using Microsoft.Azure.CognitiveServices.Vision.ComputerVision;
using Microsoft.Azure.CognitiveServices.Vision.ComputerVision.Models;
using System.Collections.Generic;
using System.Threading.Tasks;
private const string subscriptionKey = "5c0d27045e84491cb4c761c4c61a05a4";
private const string localImagePath = @"<LocalImage>";
private const string remoteImageUrl = "https://www.superama.com.mx/Content/images/products/img_large/0000007505390L.jpg";
private static readonly List<VisualFeatureTypes> features = new List<VisualFeatureTypes>()
VisualFeatureTypes.Brands,
VisualFeatureTypes.Categories,
VisualFeatureTypes.Description,
VisualFeatureTypes.Objects,
public static void Main()
ComputerVisionClient computerVision = new ComputerVisionClient(new ApiKeyServiceClientCredentials(subscriptionKey), new System.Net.Http.DelegatingHandler[] { });
computerVision.Endpoint = "https://southcentralus.api.cognitive.microsoft.com/";
var t1 = AnalyzeRemoteAsync(computerVision, remoteImageUrl).Result;
private static async Task<string> AnalyzeRemoteAsync(ComputerVisionClient computerVision, string imageUrl)
var result = string.Empty;
if (!Uri.IsWellFormedUriString(imageUrl, UriKind.Absolute))
result = "Invalid remoteImageUrl: " + imageUrl;
ImageAnalysis analysis = await computerVision.AnalyzeImageAsync(imageUrl, features).ConfigureAwait(false);
result = DisplayResults(analysis);
private static async Task<string> AnalyzeLocalAsync(ComputerVisionClient computerVision, string imagePath)
var result = string.Empty;
if (!File.Exists(imagePath))
result = "Unable to open or read localImagePath: " + imagePath;
using (Stream imageStream = File.OpenRead(imagePath))
ImageAnalysis analysis = await computerVision.AnalyzeImageInStreamAsync(imageStream, features).ConfigureAwait(false);
result = DisplayResults(analysis);
private static string DisplayResults(ImageAnalysis analysis)
var result = string.Empty;
if (analysis.Description.Captions.Count != 0)
result += "\nDescription";
foreach(var c in analysis.Description.Captions) {
foreach(var c in analysis.Brands) {
result += "\n\nCategories";
foreach(var c in analysis.Categories){
foreach(var c in analysis.Objects){
result += "\n" + c.ObjectProperty;
foreach(var c in analysis.Tags){
result = "No description generated.";