Schnellstart: Generieren einer Miniaturansicht mit der REST-API und C# in der Maschinelles Sehen-APIQuickstart: Generate a thumbnail using the REST API and C# in Computer Vision

In diesem Schnellstart generieren Sie eine Miniaturansicht von einem Bild, indem Sie die REST-API von Maschinelles Sehen verwenden.In this quickstart, you generate a thumbnail from an image by using Computer Vision's REST API. Mit der Get Thumbnail-Methode können Sie eine Miniaturansicht von einem Bild generieren.With the Get Thumbnail method, you can generate a thumbnail of an image. Sie geben die Höhe und Breite an. Diese kann sich vom Seitenverhältnis des Eingabebilds unterscheiden.You specify the height and width, which can differ from the aspect ratio of the input image. Für das maschinelle Sehen wird die intelligente Zuschneidefunktion verwendet, um die gewünschte Region zu identifizieren und basierend auf dieser Region Zuschneidekoordinaten zu generieren.Computer Vision uses smart cropping to intelligently identify the region of interest and generate cropping coordinates based on that region.

Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.If you don't have an Azure subscription, create a free account before you begin.

VoraussetzungenPrerequisites

Erstellen und Ausführen der BeispielanwendungCreate and run the sample application

Führen Sie die folgenden Schritte durch, um das Beispiel in Visual Studio zu erstellen:To create the sample in Visual Studio, do the following steps:

  1. Erstellen Sie mithilfe der Visual C#-Konsolen-App-Vorlage eine neue Visual Studio-Projektmappe in Visual Studio.Create a new Visual Studio solution in Visual Studio, using the Visual C# Console App template.
  2. Installieren Sie das NuGet-Paket „Newtonsoft.Json“.Install the Newtonsoft.Json NuGet package.
    1. Klicken Sie im Menü auf Werkzeuge, wählen Sie NuGet-Paket-Manager und dann NuGet-Pakete für Projektmappe verwalten aus.On the menu, click Tools, select NuGet Package Manager, then Manage NuGet Packages for Solution.
    2. Klicken Sie auf die Registerkarte Durchsuchen, und geben Sie „Newtonsoft.Json“ in das Feld Suchen ein.Click the Browse tab, and in the Search box type "Newtonsoft.Json".
    3. Wählen Sie Newtonsoft.Json aus, wenn das Paket angezeigt wird, aktivieren Sie das Kontrollkästchen neben dem Projektnamen, und klicken Sie dann auf Installieren.Select Newtonsoft.Json when it displays, then click the checkbox next to your project name, and Install.
  3. Ersetzen Sie den Code in Program.cs durch den folgenden Code, und nehmen Sie dann die folgenden Änderungen im Code vor, falls dies erforderlich ist:Replace the code in Program.cs with the following code, and then make the following changes in code where needed:
    1. Ersetzen Sie den subscriptionKey-Wert durch Ihren Abonnementschlüssel.Replace the value of subscriptionKey with your subscription key.
    2. Ersetzen Sie den Wert von uriBase durch die Endpunkt-URL für die Methode Get Thumbnail in der Azure-Region, in der Sie Ihre Abonnementschlüssel bezogen haben, falls erforderlich.Replace the value of uriBase with the endpoint URL for the Get Thumbnail method from the Azure region where you obtained your subscription keys, if necessary.
  4. Führen Sie das Programm aus.Run the program.
  5. Geben Sie an der Eingabeaufforderung den Pfad zu einem lokalen Bild ein.At the prompt, enter the path to a local image.
using Newtonsoft.Json.Linq;
using System;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;

namespace CSHttpClientSample
{
    static class Program
    {
        // Replace <Subscription Key> with your valid subscription key.
        const string subscriptionKey = "<Subscription Key>";

        // You must use the same Azure region in your REST API method as you used to
        // get your subscription keys. For example, if you got your subscription keys
        // from the West US region, replace "westcentralus" in the URL
        // below with "westus".
        //
        // Free trial subscription keys are generated in the "westus" region.
        // If you use a free trial subscription key, you shouldn't need to change
        // this region.
        const string uriBase =
            "https://westcentralus.api.cognitive.microsoft.com/vision/v2.0/generateThumbnail";

        static void Main()
        {
            // Get the path and filename to process from the user.
            Console.WriteLine("Thumbnail:");
            Console.Write(
                "Enter the path to the image you wish to use to create a thumbnail image: ");
            string imageFilePath = Console.ReadLine();

            if (File.Exists(imageFilePath))
            {
                // Call the REST API method.
                Console.WriteLine("\nWait a moment for the results to appear.\n");
                MakeThumbNailRequest(imageFilePath).Wait();
            }
            else
            {
                Console.WriteLine("\nInvalid file path");
            }
            Console.WriteLine("\nPress Enter to exit...");
            Console.ReadLine();
        }

        /// <summary>
        /// Gets a thumbnail image from the specified image file by using
        /// the Computer Vision REST API.
        /// </summary>
        /// <param name="imageFilePath">The image file to use to create the thumbnail image.</param>
        static async Task MakeThumbNailRequest(string imageFilePath)
        {
            try
            {
                HttpClient client = new HttpClient();

                // Request headers.
                client.DefaultRequestHeaders.Add(
                    "Ocp-Apim-Subscription-Key", subscriptionKey);

                // Request parameters.
                // The width and height parameters specify a thumbnail that's 
                // 200 pixels wide and 150 pixels high.
                // The smartCropping parameter is set to true, to enable smart cropping.
                string requestParameters = "width=200&height=150&smartCropping=true";

                // Assemble the URI for the REST API method.
                string uri = uriBase + "?" + requestParameters;

                HttpResponseMessage response;

                // Read the contents of the specified local image
                // into a byte array.
                byte[] byteData = GetImageAsByteArray(imageFilePath);

                // Add the byte array as an octet stream to the request body.
                using (ByteArrayContent content = new ByteArrayContent(byteData))
                {
                    // This example uses the "application/octet-stream" content type.
                    // The other content types you can use are "application/json"
                    // and "multipart/form-data".
                    content.Headers.ContentType =
                        new MediaTypeHeaderValue("application/octet-stream");

                    // Asynchronously call the REST API method.
                    response = await client.PostAsync(uri, content);
                }

                // Check the HTTP status code of the response. If successful, display
                // display the response and save the thumbnail.
                if (response.IsSuccessStatusCode)
                {
                    // Display the response data.
                    Console.WriteLine("\nResponse:\n{0}", response);

                    // Get the image data for the thumbnail from the response.
                    byte[] thumbnailImageData =
                        await response.Content.ReadAsByteArrayAsync();

                    // Save the thumbnail to the same folder as the original image,
                    // using the original name with the suffix "_thumb".
                    // Note: This will overwrite an existing file of the same name.
                    string thumbnailFilePath =
                        imageFilePath.Insert(imageFilePath.Length - 4, "_thumb");
                    File.WriteAllBytes(thumbnailFilePath, thumbnailImageData);
                    Console.WriteLine("\nThumbnail written to: {0}", thumbnailFilePath);
                }
                else
                {
                    // Display the JSON error data.
                    string errorString = await response.Content.ReadAsStringAsync();
                    Console.WriteLine("\n\nResponse:\n{0}\n",
                        JToken.Parse(errorString).ToString());
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("\n" + e.Message);
            }
        }

        /// <summary>
        /// Returns the contents of the specified file as a byte array.
        /// </summary>
        /// <param name="imageFilePath">The image file to read.</param>
        /// <returns>The byte array of the image data.</returns>
        static byte[] GetImageAsByteArray(string imageFilePath)
        {
            // Open a read-only file stream for the specified file.
            using (FileStream fileStream =
                new FileStream(imageFilePath, FileMode.Open, FileAccess.Read))
            {
                // Read the file's contents into a byte array.
                BinaryReader binaryReader = new BinaryReader(fileStream);
                return binaryReader.ReadBytes((int)fileStream.Length);
            }
        }
    }
}

Untersuchen der AntwortExamine the response

Eine erfolgreiche Antwort wird als Binärdaten zurückgegeben, die die Bilddaten für die Miniaturansicht darstellen.A successful response is returned as binary data, which represents the image data for the thumbnail. Wenn die Anforderung erfolgreich ausgeführt wird, wird die Miniaturansicht im selben Ordner wie das lokale Bild gespeichert, wobei der ursprüngliche Name mit dem Suffix „_thumb“ verwendet wird.If the request succeeds, the thumbnail is saved to the same folder as the local image, using the original name with the suffix "_thumb". Wenn die Anforderung nicht erfolgreich ist, enthält die Antwort einen Fehlercode und eine Meldung, damit Sie ermitteln können, wo der Fehler liegt.If the request fails, the response contains an error code and a message to help determine what went wrong.

Die Beispielanwendung zeigt eine erfolgreiche Antwort im Konsolenfenster an, ähnlich wie im folgenden Beispiel:The sample application displays a successful response in the console window, similar to the following example:

Response:

StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
  Pragma: no-cache
  apim-request-id: 131eb5b4-5807-466d-9656-4c1ef0a64c9b
  Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
  x-content-type-options: nosniff
  Cache-Control: no-cache
  Date: Tue, 06 Jun 2017 20:54:07 GMT
  X-AspNet-Version: 4.0.30319
  X-Powered-By: ASP.NET
  Content-Length: 5800
  Content-Type: image/jpeg
  Expires: -1
}

Bereinigen von RessourcenClean up resources

Wenn Sie die Visual Studio-Projektmappe nicht mehr benötigen, löschen Sie sie.When no longer needed, delete the Visual Studio solution. Öffnen Sie zu diesem Zweck den Datei-Explorer, navigieren Sie zu dem Ordner, in dem Sie die Visual Studio-Projektmappe erstellt haben, und löschen Sie den Ordner.To do so, open File Explorer, navigate to the folder in which you created the Visual Studio solution, and delete the folder.

Nächste SchritteNext steps

Lernen Sie eine einfache Windows-Anwendung kennen, die maschinelles Sehen verwendet, um eine optische Zeichenerkennung (Optical Character Recognition, OCR) durchzuführen, intelligent zugeschnittene Miniaturansichten zu erstellen sowie visuelle Merkmale (einschließlich Gesichter) in einem Bild zu erkennen, zu kategorisieren, zu markieren und zu beschreiben.Explore a basic Windows application that uses Computer Vision to perform optical character recognition (OCR); create smart-cropped thumbnails; plus detect, categorize, tag, and describe visual features, including faces, in an image. Wenn Sie schnell mit Ihren Experimenten mit den Maschinelles Sehen-APIs beginnen möchten, können Sie die Open API-Testkonsole verwenden.To rapidly experiment with the Computer Vision APIs, try the Open API testing console.