Bing Visual Search

A sample project that performs a bing visual search and returns a json response.

using Newtonsoft.Json;
using System;
using System.IO;
using System.Net.Http;

/* This sample makes a call to the Bing Visual Search API with a query image and returns similar images with details.
 * Bing Visual Search API: 
 * https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bingvisualsearch/images/visualsearch
 */

namespace BingVisualSearch
{
    internal class Program
    {
        // Set the path to the image
        private static string imagePath = "";
        // Set your access key
        private static string accessKey = "";
        private static Uri endpointUrl = new Uri("https://api.cognitive.microsoft.com/bing/v7.0/images/visualsearch");

        private static HttpClient client;
        private static Uri imgUri;

        private static void Main()
        {
            //Define change this to receive a URL if you want
            imgUri = new Uri(imagePath);

            client = new HttpClient();
            client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", accessKey);

            var request =
                new
                {
                    imageInfo = new
                    {
                        cropArea = new
                        {
                            top = 0.0,
                            left = 0.0,
                            right = 0.0,
                            bottom = 0.0
                        },
                        url = imgUri.IsFile ? (string) null : imgUri.ToString()
                    }
                };
            var mfdc = new MultipartFormDataContent();

            // Part #2 - Add binary image file if using a local image
            // NOTE: the file needs to be an image file that is < 1MB
            if (imgUri.IsFile)
            {
                var path = imgUri.LocalPath;

                var fs = new FileStream(path, FileMode.Open, FileAccess.Read);

                var sizeMb = fs.Length / 1024.0 / 1024.0;

                if (sizeMb > 1.0) // Enforces file size restriction
                    throw new ApplicationException(
                        $"The file {imgUri.LocalPath} is greater than 1MB. Please resize it and try again");

                var sc = new StreamContent(fs);
                mfdc.Add(
                    sc, // binay image path
                    "image", // name = image
                    "image" // filename = image
                );
            }

            // Part #3 - Add KnowledgeRequest JSON object
            mfdc.Add(new StringContent(JsonConvert.SerializeObject(request)), "knowledgeRequest");

            // Part #4 - Invoke the service and read the response
            var response = client.PostAsync(endpointUrl, mfdc);

            // Part # 5 - Do what you like with the data
            Console.WriteLine(response.Result.Content.ReadAsStringAsync().Result);
            File.WriteAllText(@"response.txt", response.Result.Content.ReadAsStringAsync().Result);
            Console.ReadLine();
        }
    }
}

References:

Github Link

Posted in C#