Szybki start: korzystanie z biblioteki klienta analizy obrazów lub interfejsu API REST

Wprowadzenie do interfejsu API REST analizy obrazów lub bibliotek klienckich. Usługa analizowanie obrazów udostępnia algorytmy sztucznej inteligencji do przetwarzania obrazów i zwracania informacji o ich funkcjach wizualnych. Wykonaj następujące kroki, aby zainstalować pakiet w aplikacji i wypróbować przykładowy kod dla podstawowych zadań.

Za pomocą biblioteki klienta analizy obrazów można analizować obraz pod względu na tagi, opis tekstu, twarze, zawartość dla dorosłych i nie tylko.

Dokumentacja referencyjna | Kod źródłowy biblioteki | Pakiet (NuGet) | Przykłady

Wymagania wstępne

  • Subskrypcja platformy Azure — bezpłatne tworzenie subskrypcji
  • Program Visual Studio IDE lub bieżącą wersję programu .NET Core.
  • Po utworzeniu subskrypcji platformy Azure utwórz zasób przetwarzanie obrazów zasobów przetwarzanie obrazów w witrynie Azure Portal, aby uzyskać klucz i punkt końcowy. Po wdrożeniu kliknij pozycję Przejdź do zasobu.
    • Klucz i punkt końcowy będą potrzebne z zasobu, który utworzysz, aby połączyć aplikację z przetwarzanie obrazów usługą. Klucz i punkt końcowy wkleisz do poniższego kodu w dalszej części tego przewodnika Szybki start.
    • Możesz użyć bezpłatnej warstwy cenowej ( ), aby wypróbować usługę, a następnie przejść na warstwę płatną w F0 środowisku produkcyjnym.

Konfigurowanie

Tworzenie nowej aplikacji w języku C#

Za Visual Studio utwórz nową aplikację .NET Core.

Instalowanie biblioteki klienta

Po utworzeniu nowego projektu zainstaluj bibliotekę klienta, klikając prawym przyciskiem myszy rozwiązanie projektu w Eksplorator rozwiązań i wybierając pozycję Zarządzaj pakietami NuGet. W menedżerze pakietów, który zostanie otwarty, wybierz pozycję Przeglądaj, zaznacz pole wyboru Uwzględnij wstępną publikację i Microsoft.Azure.CognitiveServices.Vision.ComputerVision wyszukaj . Wybierz wersję 7.0.0 , a następnie pozycję Zainstaluj.

Porada

Chcesz wyświetlić cały plik kodu szybkiego startu jednocześnie? Można go znaleźć w witrynie GitHub,która zawiera przykłady kodu w tym przewodniku Szybki start.

W katalogu projektu otwórz plik Program.cs w preferowanym edytorze lub w preferowanym idee. Dodaj następujące using dyrektywy:

using System;
using System.Collections.Generic;
using Microsoft.Azure.CognitiveServices.Vision.ComputerVision;
using Microsoft.Azure.CognitiveServices.Vision.ComputerVision.Models;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Threading;
using System.Linq;

W klasie Program aplikacji utwórz zmienne dla klucza i punktu końcowego platformy Azure zasobu.

// Add your Computer Vision subscription key and endpoint
static string subscriptionKey = "PASTE_YOUR_COMPUTER_VISION_SUBSCRIPTION_KEY_HERE";
static string endpoint = "PASTE_YOUR_COMPUTER_VISION_ENDPOINT_HERE";

Ważne

Przejdź do witryny Azure Portal. Jeśli zasób przetwarzanie obrazów utworzony w sekcji Wymagania wstępne został pomyślnie wdrożony, kliknij przycisk Przejdź do zasobu w obszarze Następne kroki. Klucz i punkt końcowy można znaleźć na stronie klucza i punktu końcowego zasobu w obszarze zarządzanie zasobami.

Pamiętaj, aby usunąć klucz z kodu, gdy wszystko będzie gotowe, i nigdy nie publikować go publicznie. W środowisku produkcyjnym rozważ użycie bezpiecznego sposobu przechowywania poświadczeń i uzyskiwania do nich dostępu. Zobacz artykuł Cognitive Services zabezpieczeń, aby uzyskać więcej informacji.

W metodzie aplikacji dodaj wywołania metod używanych Main w tym przewodniku Szybki start. Utworzysz je później.

// Create a client
ComputerVisionClient client = Authenticate(endpoint, subscriptionKey);

// Analyze an image to get features and other properties.
AnalyzeImageUrl(client, ANALYZE_URL_IMAGE).Wait();

Model obiektu

Poniższe klasy i interfejsy obsługują niektóre główne funkcje zestawu .NET SDK analizy obrazów.

Nazwa Opis
ComputerVisionClient Ta klasa jest potrzebna dla wszystkich przetwarzanie obrazów funkcjonalności. Należy utworzyć jego wystąpienia z informacjami o subskrypcji i używać ich do większości operacji na obrazach.
ComputerVisionClientExtensions Ta klasa zawiera dodatkowe metody klasy ComputerVisionClient.
VisualFeatureTypes To wylinie definiuje różne typy analizy obrazów, które można wykonać w standardowej operacji analizy. W zależności od potrzeb należy określić zestaw wartości VisualFeatureTypes.

Przykłady kodu

Te fragmenty kodu pokazują, jak wykonać następujące zadania za pomocą biblioteki klienta analizy obrazów dla programu .NET:

Uwierzytelnianie klienta

Uwaga

W tym przewodniku Szybki start założono, że utworzono zmienne środowiskowe dla klucza przetwarzanie obrazów punktu końcowego o nazwach COMPUTER_VISION_SUBSCRIPTION_KEY i COMPUTER_VISION_ENDPOINT .

W nowej metodzie w klasie Program należy utworzyć wystąpienia klienta z punktem końcowym i kluczem. Utwórz obiekt ApiKeyServiceClientCredentials za pomocą klucza i użyj go z punktem końcowym, aby utworzyć obiekt ComputerVisionClient.

/*
 * AUTHENTICATE
 * Creates a Computer Vision client used by each example.
 */
public static ComputerVisionClient Authenticate(string endpoint, string key)
{
    ComputerVisionClient client =
      new ComputerVisionClient(new ApiKeyServiceClientCredentials(key))
      { Endpoint = endpoint };
    return client;
}

Analizowanie obrazu

Poniższy kod definiuje metodę , która używa obiektu klienta do analizowania obrazu zdalnego AnalyzeImageUrl i drukowania wyników. Metoda zwraca opis tekstowy, kategoryzację, listę tagów, wykryte twarze, flagi zawartości dla dorosłych, główne kolory i typ obrazu.

Porada

Można również analizować obraz lokalny. Zobacz metody ComputerVisionClient, takie jak AnalyzeImageInStreamAsync. Możesz też zobaczyć przykładowy kod w usłudze GitHub, aby uzyskać scenariusze obejmujące obrazy lokalne.

Konfigurowanie obrazu testowego

W klasie Program zapisz odwołanie do adresu URL obrazu, który chcesz przeanalizować.

// URL image used for analyzing an image (image of puppy)
private const string ANALYZE_URL_IMAGE = "https://moderatorsampleimages.blob.core.windows.net/samples/sample16.png";

Określanie funkcji wizualnych

Zdefiniuj nową metodę analizy obrazów. Dodaj poniższy kod, który określa cechy wizualne, które chcesz wyodrębnić w analizie. Pełną listę można znaleźć w wylicie VisualFeatureTypes.

/* 
 * ANALYZE IMAGE - URL IMAGE
 * Analyze URL image. Extracts captions, categories, tags, objects, faces, racy/adult/gory content,
 * brands, celebrities, landmarks, color scheme, and image types.
 */
public static async Task AnalyzeImageUrl(ComputerVisionClient client, string imageUrl)
{
    Console.WriteLine("----------------------------------------------------------");
    Console.WriteLine("ANALYZE IMAGE - URL");
    Console.WriteLine();

    // Creating a list that defines the features to be extracted from the image. 

    List<VisualFeatureTypes?> features = new List<VisualFeatureTypes?>()
    {
        VisualFeatureTypes.Categories, VisualFeatureTypes.Description,
        VisualFeatureTypes.Faces, VisualFeatureTypes.ImageType,
        VisualFeatureTypes.Tags, VisualFeatureTypes.Adult,
        VisualFeatureTypes.Color, VisualFeatureTypes.Brands,
        VisualFeatureTypes.Objects
    };

Wywołanie interfejsu API analizy

Metoda AnalyzeImageAsync zwraca obiekt ImageAnalysis zawierający wszystkie wyodrębnione informacje.

Console.WriteLine($"Analyzing the image {Path.GetFileName(imageUrl)}...");
Console.WriteLine();
// Analyze the URL image 
ImageAnalysis results = await client.AnalyzeImageAsync(imageUrl, visualFeatures: features);

W poniższych sekcjach przedstawiono szczegółowe analizowanie tych informacji.

Wstaw dowolny z poniższych bloków kodu do metody AnalyzeImageUrl, aby przeanalizować dane z żądanych powyżej cech wizualnych. Pamiętaj, aby dodać nawias zamykający na końcu.

}

Uzyskiwanie opisu obrazu

Poniższy kod pobiera listę wygenerowanych napisów dla obrazu. Aby uzyskać więcej informacji, zobacz Describe images (Opisywanie obrazów).

// Sunmarizes the image content.
Console.WriteLine("Summary:");
foreach (var caption in results.Description.Captions)
{
    Console.WriteLine($"{caption.Text} with confidence {caption.Confidence}");
}
Console.WriteLine();

Pobierz kategorię obrazu

Poniższy kod pobiera wykrytą kategorię obrazu. Aby uzyskać więcej informacji, zobacz Kategoryzowanie obrazów.

// Display categories the image is divided into.
Console.WriteLine("Categories:");
foreach (var category in results.Categories)
{
    Console.WriteLine($"{category.Name} with confidence {category.Score}");
}
Console.WriteLine();

Uzyskiwanie tagów obrazów

Poniższy kod pobiera zestaw wykrytych tagów na obrazie. Aby uzyskać więcej informacji, zobacz Tagi zawartości.

// Image tags and their confidence score
Console.WriteLine("Tags:");
foreach (var tag in results.Tags)
{
    Console.WriteLine($"{tag.Name} {tag.Confidence}");
}
Console.WriteLine();

Wykrywanie obiektów

Poniższy kod wykrywa typowe obiekty na obrazie i drukuje je w konsoli. Aby uzyskać więcej informacji, zobacz Wykrywanie obiektów.

// Objects
Console.WriteLine("Objects:");
foreach (var obj in results.Objects)
{
    Console.WriteLine($"{obj.ObjectProperty} with confidence {obj.Confidence} at location {obj.Rectangle.X}, " +
      $"{obj.Rectangle.X + obj.Rectangle.W}, {obj.Rectangle.Y}, {obj.Rectangle.Y + obj.Rectangle.H}");
}
Console.WriteLine();

Wykrywanie marek

Poniższy kod wykrywa firmowe marki i logo na obrazie i drukuje je w konsoli. Aby uzyskać więcej informacji, zobacz Wykrywanie marki.

// Well-known (or custom, if set) brands.
Console.WriteLine("Brands:");
foreach (var brand in results.Brands)
{
    Console.WriteLine($"Logo of {brand.Name} with confidence {brand.Confidence} at location {brand.Rectangle.X}, " +
      $"{brand.Rectangle.X + brand.Rectangle.W}, {brand.Rectangle.Y}, {brand.Rectangle.Y + brand.Rectangle.H}");
}
Console.WriteLine();

Wykrywanie twarzy

Poniższy kod zwraca wykryte twarze na obrazie z ich współrzędnymi prostokąta i wybiera atrybuty twarzy. Aby uzyskać więcej informacji, zobacz Wykrywanie twarzy.

// Faces
Console.WriteLine("Faces:");
foreach (var face in results.Faces)
{
    Console.WriteLine($"A {face.Gender} of age {face.Age} at location {face.FaceRectangle.Left}, " +
      $"{face.FaceRectangle.Left}, {face.FaceRectangle.Top + face.FaceRectangle.Width}, " +
      $"{face.FaceRectangle.Top + face.FaceRectangle.Height}");
}
Console.WriteLine();

Wykrywanie zawartości dla dorosłych, racy lub gory

Poniższy kod drukuje wykrytą obecność treści dla dorosłych na obrazie. Aby uzyskać więcej informacji, zobacz zawartość dla dorosłych, racy i gory.

// Adult or racy content, if any.
Console.WriteLine("Adult:");
Console.WriteLine($"Has adult content: {results.Adult.IsAdultContent} with confidence {results.Adult.AdultScore}");
Console.WriteLine($"Has racy content: {results.Adult.IsRacyContent} with confidence {results.Adult.RacyScore}");
Console.WriteLine($"Has gory content: {results.Adult.IsGoryContent} with confidence {results.Adult.GoreScore}");
Console.WriteLine();

Uzyskiwanie schematu kolorów obrazu

Poniższy kod drukuje wykryte atrybuty kolorów na obrazie, takie jak dominujący kolor i kolor akcentu. Aby uzyskać więcej informacji, zobacz Schematy kolorów.

// Identifies the color scheme.
Console.WriteLine("Color Scheme:");
Console.WriteLine("Is black and white?: " + results.Color.IsBWImg);
Console.WriteLine("Accent color: " + results.Color.AccentColor);
Console.WriteLine("Dominant background color: " + results.Color.DominantColorBackground);
Console.WriteLine("Dominant foreground color: " + results.Color.DominantColorForeground);
Console.WriteLine("Dominant colors: " + string.Join(",", results.Color.DominantColors));
Console.WriteLine();

Uzyskiwanie zawartości specyficznej dla domeny

Analiza obrazów może używać wyspecjalizowanych modeli do dalszej analizy obrazów. Aby uzyskać więcej informacji, zobacz Zawartość specyficzna dla domeny.

Poniższy kod analizuje dane dotyczące wykrytych osobistości na obrazie.

// Celebrities in image, if any.
Console.WriteLine("Celebrities:");
foreach (var category in results.Categories)
{
    if (category.Detail?.Celebrities != null)
    {
        foreach (var celeb in category.Detail.Celebrities)
        {
            Console.WriteLine($"{celeb.Name} with confidence {celeb.Confidence} at location {celeb.FaceRectangle.Left}, " +
              $"{celeb.FaceRectangle.Top}, {celeb.FaceRectangle.Height}, {celeb.FaceRectangle.Width}");
        }
    }
}
Console.WriteLine();

Poniższy kod analizuje dane dotyczące wykrytych punktów orientacyjnych na obrazie.

// Popular landmarks in image, if any.
Console.WriteLine("Landmarks:");
foreach (var category in results.Categories)
{
    if (category.Detail?.Landmarks != null)
    {
        foreach (var landmark in category.Detail.Landmarks)
        {
            Console.WriteLine($"{landmark.Name} with confidence {landmark.Confidence}");
        }
    }
}
Console.WriteLine();

Uzyskiwanie typu obrazu

Poniższy kod drukuje informacje o typie obrazu, niezależnie od tego, czy jest to — obiekt clipart, czy rysunek liniowy.

// Detects the image types.
Console.WriteLine("Image Type:");
Console.WriteLine("Clip Art Type: " + results.ImageType.ClipArtType);
Console.WriteLine("Line Drawing Type: " + results.ImageType.LineDrawingType);
Console.WriteLine();

Uruchamianie aplikacji

Uruchom aplikację, klikając przycisk Debug (Debuguj) w górnej części okna IDE.

Czyszczenie zasobów

Jeśli chcesz wyczyścić i usunąć subskrypcję Cognitive Services, możesz usunąć zasób lub grupę zasobów. Usunięcie grupy zasobów powoduje również usunięcie wszystkich innych skojarzonych z nią zasobów.

Następne kroki

W tym przewodniku Szybki start opisano sposób instalowania biblioteki klienta analizy obrazów i dokonywania podstawowych wywołań analizy obrazów. Następnie dowiedz się więcej o funkcjach interfejsu API analizowania.

Za pomocą biblioteki klienta analizy obrazów można analizować obraz pod względu na tagi, opis tekstu, twarze, zawartość dla dorosłych i nie tylko.

Dokumentacja referencyjna | Kod źródłowy biblioteki | Pakiet (PiPy) | Przykłady

Wymagania wstępne

  • Subskrypcja platformy Azure — bezpłatne tworzenie subskrypcji

  • Python 3.x

    • Instalacja języka Python powinna zawierać pip. Możesz sprawdzić, czy masz zainstalowany program pip, pip --version uruchamiając polecenie w wierszu polecenia. Pobierz program pip, instalując najnowszą wersję języka Python.
  • Po utworzeniu subskrypcji platformy Azure utwórz zasób przetwarzanie obrazów zasobów przetwarzanie obrazów w witrynie Azure Portal, aby uzyskać klucz i punkt końcowy. Po wdrożeniu kliknij pozycję Przejdź do zasobu.

    • Klucz i punkt końcowy będą potrzebne z zasobu, który utworzysz, aby połączyć aplikację z przetwarzanie obrazów usługą. Klucz i punkt końcowy wkleisz do poniższego kodu w dalszej części tego przewodnika Szybki start.
    • Możesz użyć bezpłatnej warstwy cenowej ( ), aby wypróbować usługę, a następnie przejść na warstwę płatną w F0 środowisku produkcyjnym.

Konfigurowanie

Instalowanie biblioteki klienta

Bibliotekę klienta można zainstalować za pomocą:

pip install --upgrade azure-cognitiveservices-vision-computervision

Zainstaluj również bibliotekę Pillow.

pip install pillow

Tworzenie nowej aplikacji w języku Python

Utwórz nowy plik w — języku Python quickstart-file.py , na przykład . Następnie otwórz go w preferowanym edytorze lub w środowiskach IDE i zaimportuj następujące biblioteki.

from azure.cognitiveservices.vision.computervision import ComputerVisionClient
from azure.cognitiveservices.vision.computervision.models import OperationStatusCodes
from azure.cognitiveservices.vision.computervision.models import VisualFeatureTypes
from msrest.authentication import CognitiveServicesCredentials

from array import array
import os
from PIL import Image
import sys
import time

Porada

Chcesz wyświetlić cały plik kodu szybkiego startu jednocześnie? Można go znaleźć w witrynie GitHub,która zawiera przykłady kodu w tym przewodniku Szybki start.

Następnie utwórz zmienne dla klucza i punktu końcowego platformy Azure zasobu.

subscription_key = "PASTE_YOUR_COMPUTER_VISION_SUBSCRIPTION_KEY_HERE"
endpoint = "PASTE_YOUR_COMPUTER_VISION_ENDPOINT_HERE"

Ważne

Przejdź do witryny Azure Portal. Jeśli zasób przetwarzanie obrazów utworzony w sekcji Wymagania wstępne został pomyślnie wdrożony, kliknij przycisk Przejdź do zasobu w obszarze Następne kroki. Klucz i punkt końcowy można znaleźć na stronie klucza i punktu końcowego zasobu w obszarze zarządzanie zasobami.

Pamiętaj, aby usunąć klucz z kodu, gdy wszystko będzie gotowe, i nigdy nie publikować go publicznie. W środowisku produkcyjnym rozważ użycie bezpiecznego sposobu przechowywania poświadczeń i uzyskiwania do nich dostępu. Na przykład usługa Azure Key Vault.

Model obiektu

Poniższe klasy i interfejsy obsługują niektóre główne funkcje zestawu SDK języka Python do analizy obrazów.

Nazwa Opis
ComputerVisionClientOperationsMixin Ta klasa bezpośrednio obsługuje wszystkie operacje obrazu, takie jak analiza obrazu, wykrywanie tekstu i generowanie miniatur.
ComputerVisionClient Ta klasa jest potrzebna dla wszystkich przetwarzanie obrazów funkcjonalności. Należy utworzyć jego wystąpienie z informacjami o subskrypcji i użyć ich do tworzenia wystąpień innych klas. Implementuje ona computerVisionClientOperationsMixin.
VisualFeatureTypes To wylinie definiuje różne typy analizy obrazów, które można wykonać w standardowej operacji analizy. W zależności od potrzeb należy określić zestaw wartości VisualFeatureTypes.

Przykłady kodu

Te fragmenty kodu pokazują, jak wykonać następujące zadania za pomocą biblioteki klienta analizy obrazów dla języka Python:

Uwierzytelnianie klienta

Należy utworzyć wystąpienia klienta z punktem końcowym i kluczem. Utwórz obiekt CognitiveServicesCredentials przy użyciu klucza i użyj go z punktem końcowym, aby utworzyć obiekt ComputerVisionClient.

computervision_client = ComputerVisionClient(endpoint, CognitiveServicesCredentials(subscription_key))

Analizowanie obrazu

Obiekt klienta umożliwia analizowanie wizualnych funkcji obrazu zdalnego. Najpierw zapisz odwołanie do adresu URL obrazu, który chcesz przeanalizować.

remote_image_url = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/landmark.jpg"

Porada

Można również analizować obraz lokalny. Zobacz metody ComputerVisionClientOperationsMixin, takie jak analyze_image_in_stream. Możesz też zobaczyć przykładowy kod w usłudze GitHub, aby uzyskać scenariusze obejmujące obrazy lokalne.

Uzyskiwanie opisu obrazu

Poniższy kod pobiera listę wygenerowanych napisów dla obrazu. Aby uzyskać więcej informacji, zobacz Describe images (Opisywanie obrazów).

'''
Describe an Image - remote
This example describes the contents of an image with the confidence score.
'''
print("===== Describe an image - remote =====")
# Call API
description_results = computervision_client.describe_image(remote_image_url )

# Get the captions (descriptions) from the response, with confidence level
print("Description of remote image: ")
if (len(description_results.captions) == 0):
    print("No description detected.")
else:
    for caption in description_results.captions:
        print("'{}' with confidence {:.2f}%".format(caption.text, caption.confidence * 100))

Pobierz kategorię obrazu

Poniższy kod pobiera wykrytą kategorię obrazu. Aby uzyskać więcej informacji, zobacz Kategoryzowanie obrazów.

'''
Categorize an Image - remote
This example extracts (general) categories from a remote image with a confidence score.
'''
print("===== Categorize an image - remote =====")
# Select the visual feature(s) you want.
remote_image_features = ["categories"]
# Call API with URL and features
categorize_results_remote = computervision_client.analyze_image(remote_image_url , remote_image_features)

# Print results with confidence score
print("Categories from remote image: ")
if (len(categorize_results_remote.categories) == 0):
    print("No categories detected.")
else:
    for category in categorize_results_remote.categories:
        print("'{}' with confidence {:.2f}%".format(category.name, category.score * 100))

Uzyskiwanie tagów obrazów

Poniższy kod pobiera zestaw wykrytych tagów na obrazie. Aby uzyskać więcej informacji, zobacz Tagi zawartości.

'''
Tag an Image - remote
This example returns a tag (key word) for each thing in the image.
'''
print("===== Tag an image - remote =====")
# Call API with remote image
tags_result_remote = computervision_client.tag_image(remote_image_url )

# Print results with confidence score
print("Tags in the remote image: ")
if (len(tags_result_remote.tags) == 0):
    print("No tags detected.")
else:
    for tag in tags_result_remote.tags:
        print("'{}' with confidence {:.2f}%".format(tag.name, tag.confidence * 100))

Wykrywanie obiektów

Poniższy kod wykrywa typowe obiekty na obrazie i drukuje je w konsoli. Aby uzyskać więcej informacji, zobacz Wykrywanie obiektów.

'''
Detect Objects - remote
This example detects different kinds of objects with bounding boxes in a remote image.
'''
print("===== Detect Objects - remote =====")
# Get URL image with different objects
remote_image_url_objects = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/objects.jpg"
# Call API with URL
detect_objects_results_remote = computervision_client.detect_objects(remote_image_url_objects)

# Print detected objects results with bounding boxes
print("Detecting objects in remote image:")
if len(detect_objects_results_remote.objects) == 0:
    print("No objects detected.")
else:
    for object in detect_objects_results_remote.objects:
        print("object at location {}, {}, {}, {}".format( \
        object.rectangle.x, object.rectangle.x + object.rectangle.w, \
        object.rectangle.y, object.rectangle.y + object.rectangle.h))

Wykrywanie marek

Poniższy kod wykrywa firmowe marki i logo na obrazie i drukuje je w konsoli. Aby uzyskać więcej informacji, zobacz Wykrywanie marki.

'''
Detect Brands - remote
This example detects common brands like logos and puts a bounding box around them.
'''
print("===== Detect Brands - remote =====")
# Get a URL with a brand logo
remote_image_url = "https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/images/gray-shirt-logo.jpg"
# Select the visual feature(s) you want
remote_image_features = ["brands"]
# Call API with URL and features
detect_brands_results_remote = computervision_client.analyze_image(remote_image_url, remote_image_features)

print("Detecting brands in remote image: ")
if len(detect_brands_results_remote.brands) == 0:
    print("No brands detected.")
else:
    for brand in detect_brands_results_remote.brands:
        print("'{}' brand detected with confidence {:.1f}% at location {}, {}, {}, {}".format( \
        brand.name, brand.confidence * 100, brand.rectangle.x, brand.rectangle.x + brand.rectangle.w, \
        brand.rectangle.y, brand.rectangle.y + brand.rectangle.h))

Wykrywanie twarzy

Poniższy kod zwraca wykryte twarze na obrazie z ich współrzędnymi prostokąta i wybiera atrybuty twarzy. Aby uzyskać więcej informacji, zobacz Wykrywanie twarzy.

'''
Detect Faces - remote
This example detects faces in a remote image, gets their gender and age, 
and marks them with a bounding box.
'''
print("===== Detect Faces - remote =====")
# Get an image with faces
remote_image_url_faces = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/faces.jpg"
# Select the visual feature(s) you want.
remote_image_features = ["faces"]
# Call the API with remote URL and features
detect_faces_results_remote = computervision_client.analyze_image(remote_image_url_faces, remote_image_features)

# Print the results with gender, age, and bounding box
print("Faces in the remote image: ")
if (len(detect_faces_results_remote.faces) == 0):
    print("No faces detected.")
else:
    for face in detect_faces_results_remote.faces:
        print("'{}' of age {} at location {}, {}, {}, {}".format(face.gender, face.age, \
        face.face_rectangle.left, face.face_rectangle.top, \
        face.face_rectangle.left + face.face_rectangle.width, \
        face.face_rectangle.top + face.face_rectangle.height))

Wykrywanie zawartości dla dorosłych, racy lub gory

Poniższy kod drukuje wykrytą obecność treści dla dorosłych na obrazie. Aby uzyskać więcej informacji, zobacz zawartość dla dorosłych, racy i gory.

'''
Detect Adult or Racy Content - remote
This example detects adult or racy content in a remote image, then prints the adult/racy score.
The score is ranged 0.0 - 1.0 with smaller numbers indicating negative results.
'''
print("===== Detect Adult or Racy Content - remote =====")
# Select the visual feature(s) you want
remote_image_features = ["adult"]
# Call API with URL and features
detect_adult_results_remote = computervision_client.analyze_image(remote_image_url, remote_image_features)

# Print results with adult/racy score
print("Analyzing remote image for adult or racy content ... ")
print("Is adult content: {} with confidence {:.2f}".format(detect_adult_results_remote.adult.is_adult_content, detect_adult_results_remote.adult.adult_score * 100))
print("Has racy content: {} with confidence {:.2f}".format(detect_adult_results_remote.adult.is_racy_content, detect_adult_results_remote.adult.racy_score * 100))

Uzyskiwanie schematu kolorów obrazu

Poniższy kod drukuje wykryte atrybuty kolorów na obrazie, takie jak dominujący kolor i kolor akcentu. Aby uzyskać więcej informacji, zobacz Schematy kolorów.

'''
Detect Color - remote
This example detects the different aspects of its color scheme in a remote image.
'''
print("===== Detect Color - remote =====")
# Select the feature(s) you want
remote_image_features = ["color"]
# Call API with URL and features
detect_color_results_remote = computervision_client.analyze_image(remote_image_url, remote_image_features)

# Print results of color scheme
print("Getting color scheme of the remote image: ")
print("Is black and white: {}".format(detect_color_results_remote.color.is_bw_img))
print("Accent color: {}".format(detect_color_results_remote.color.accent_color))
print("Dominant background color: {}".format(detect_color_results_remote.color.dominant_color_background))
print("Dominant foreground color: {}".format(detect_color_results_remote.color.dominant_color_foreground))
print("Dominant colors: {}".format(detect_color_results_remote.color.dominant_colors))

Uzyskiwanie zawartości specyficznej dla domeny

Analiza obrazów może używać wyspecjalizowanego modelu do dalszej analizy obrazów. Aby uzyskać więcej informacji, zobacz Zawartość specyficzna dla domeny.

Poniższy kod analizuje dane dotyczące wykrytych osobistości na obrazie.

'''
Detect Domain-specific Content - remote
This example detects celebrites and landmarks in remote images.
'''
print("===== Detect Domain-specific Content - remote =====")
# URL of one or more celebrities
remote_image_url_celebs = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/faces.jpg"
# Call API with content type (celebrities) and URL
detect_domain_results_celebs_remote = computervision_client.analyze_image_by_domain("celebrities", remote_image_url_celebs)

# Print detection results with name
print("Celebrities in the remote image:")
if len(detect_domain_results_celebs_remote.result["celebrities"]) == 0:
    print("No celebrities detected.")
else:
    for celeb in detect_domain_results_celebs_remote.result["celebrities"]:
        print(celeb["name"])

Poniższy kod analizuje dane dotyczące wykrytych punktów orientacyjnych na obrazie.

# Call API with content type (landmarks) and URL
detect_domain_results_landmarks = computervision_client.analyze_image_by_domain("landmarks", remote_image_url)
print()

print("Landmarks in the remote image:")
if len(detect_domain_results_landmarks.result["landmarks"]) == 0:
    print("No landmarks detected.")
else:
    for landmark in detect_domain_results_landmarks.result["landmarks"]:
        print(landmark["name"])

Uzyskiwanie typu obrazu

Poniższy kod drukuje informacje o typie obrazu, niezależnie od tego, czy jest to — obiekt clipart, czy rysunek liniowy.

'''
Detect Image Types - remote
This example detects an image's type (clip art/line drawing).
'''
print("===== Detect Image Types - remote =====")
# Get URL of an image with a type
remote_image_url_type = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/type-image.jpg"
# Select visual feature(s) you want
remote_image_features = [VisualFeatureTypes.image_type]
# Call API with URL and features
detect_type_results_remote = computervision_client.analyze_image(remote_image_url_type, remote_image_features)

# Prints type results with degree of accuracy
print("Type of remote image:")
if detect_type_results_remote.image_type.clip_art_type == 0:
    print("Image is not clip art.")
elif detect_type_results_remote.image_type.line_drawing_type == 1:
    print("Image is ambiguously clip art.")
elif detect_type_results_remote.image_type.line_drawing_type == 2:
    print("Image is normal clip art.")
else:
    print("Image is good clip art.")

if detect_type_results_remote.image_type.line_drawing_type == 0:
    print("Image is not a line drawing.")
else:
    print("Image is a line drawing")

Uruchamianie aplikacji

Uruchom aplikację za pomocą python polecenia w pliku szybkiego startu.

python quickstart-file.py

Czyszczenie zasobów

Jeśli chcesz wyczyścić i usunąć subskrypcję Cognitive Services zasobów, możesz usunąć zasób lub grupę zasobów. Usunięcie grupy zasobów powoduje również usunięcie wszystkich innych skojarzonych z nią zasobów.

Następne kroki

W tym przewodniku Szybki start opisano sposób instalowania biblioteki klienta analizy obrazów i dokonywania podstawowych wywołań analizy obrazów. Następnie dowiedz się więcej o funkcjach interfejsu API analizowania.

Za pomocą biblioteki klienta analizy obrazów można analizować obraz pod względu na tagi, opis tekstu, twarze, zawartość dla dorosłych i nie tylko.

Dokumentacja referencyjna | Kod źródłowy biblioteki | Artefakt (Maven) | Przykłady

Wymagania wstępne

  • Subskrypcja platformy Azure — utwórz subskrypcję bezpłatnie
  • Bieżąca wersja zestawu Java Development Kit (JDK)
  • Narzędzie kompilacji Gradlelub inny menedżer zależności.
  • Po utworzeniu subskrypcji platformy Azure utwórz zasób przetwarzanie obrazów zasobów przetwarzanie obrazów usłudze Azure Portal, aby uzyskać klucz i punkt końcowy. Po wdrożeniu kliknij pozycję Przejdź do zasobu.
    • Klucz i punkt końcowy z zasobu, który utworzysz, będą potrzebne do połączenia aplikacji z przetwarzanie obrazów usługą. Klucz i punkt końcowy wkleisz do poniższego kodu w dalszej części tego przewodnika Szybki start.
    • Możesz użyć bezpłatnej warstwy cenowej ( ), aby wypróbować usługę, a następnie uaktualnić ją do warstwy F0 płatnej w środowisku produkcyjnym.

Konfigurowanie

Tworzenie nowego projektu gradle

W oknie konsoli (takim jak cmd, PowerShell lub Bash) utwórz nowy katalog dla aplikacji i przejdź do niego.

mkdir myapp && cd myapp

Uruchom polecenie gradle init z katalogu roboczego. To polecenie spowoduje utworzenie podstawowych plików kompilacji dla programu Gradle, w tym pliku build.gradle.kts, który jest używany w czasie wykonywania do tworzenia i konfigurowania aplikacji.

gradle init --type basic

Po wyświetleniu monitu wybierz pozycję Język DSL, a następnie Kotlin.

Instalowanie biblioteki klienta

W tym przewodniku Szybki start jest używany menedżer zależności gradle. Bibliotekę klienta i informacje dla innych menedżerów zależności można znaleźć w centralnym repozytorium maven.

Znajdź plik build.gradle.kts i otwórz go za pomocą preferowanego środowiska IDE lub edytora tekstów. Następnie skopiuj następującą konfigurację kompilacji. Ta konfiguracja definiuje projekt jako aplikację Java, której punktem wejścia jest klasa ImageAnalysisQuickstart. Importuje przetwarzanie obrazów bibliotekę.

plugins {
    java
    application
}
application { 
    mainClass.set("ImageAnalysisQuickstart")
}
repositories {
    mavenCentral()
}
dependencies {
    implementation(group = "com.microsoft.azure.cognitiveservices", name = "azure-cognitiveservices-computervision", version = "1.0.6-beta")
}

Tworzenie pliku języka Java

Z katalogu roboczego uruchom następujące polecenie, aby utworzyć folder źródłowy projektu:

mkdir -p src/main/java

Przejdź do nowego folderu i utwórz plik o nazwie ImageAnalysisQuickstart.java. Otwórz go w preferowanym edytorze lub w środowiskach IDE i dodaj następujące import instrukcje:

import com.microsoft.azure.cognitiveservices.vision.computervision.*;
import com.microsoft.azure.cognitiveservices.vision.computervision.implementation.ComputerVisionImpl;
import com.microsoft.azure.cognitiveservices.vision.computervision.models.*;

import java.io.*;
import java.nio.file.Files;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

Porada

Chcesz wyświetlić cały plik kodu szybkiego startu jednocześnie? Znajdziesz go w witrynie GitHub,która zawiera przykłady kodu z tego przewodnika Szybki start.

Zdefiniuj klasę ImageAnalysisQuickstart.

public class ImageAnalysisQuickstart {
}

W klasie ImageAnalysisQuickstart utwórz zmienne dla klucza i punktu końcowego zasobu.

static String subscriptionKey = "PASTE_YOUR_COMPUTER_VISION_SUBSCRIPTION_KEY_HERE";
static String endpoint = "PASTE_YOUR_COMPUTER_VISION_ENDPOINT_HERE";

Ważne

Przejdź do witryny Azure Portal. Jeśli zasób przetwarzanie obrazów utworzony w sekcji Wymagania wstępne został pomyślnie wdrożony, kliknij przycisk Przejdź do zasobu w obszarze Następne kroki. Klucz i punkt końcowy można znaleźć na stronie klucza i punktu końcowego zasobu w obszarze zarządzania zasobami.

Pamiętaj, aby usunąć klucz z kodu, gdy wszystko będzie gotowe, i nigdy nie publikować go publicznie. W środowisku produkcyjnym rozważ użycie bezpiecznego sposobu przechowywania poświadczeń i uzyskiwania do nich dostępu. Zobacz artykuł Cognitive Services zabezpieczeń, aby uzyskać więcej informacji.

W metodzie main aplikacji dodaj wywołania metod używanych w tym przewodniku Szybki start. Zdefiniuje się je później.

public static void main(String[] args) {
    
    System.out.println("\nAzure Cognitive Services Computer Vision - Java Quickstart Sample");

    // Create an authenticated Computer Vision client.
    ComputerVisionClient compVisClient = Authenticate(subscriptionKey, endpoint); 

    // Analyze local and remote images
    AnalyzeLocalImage(compVisClient);

}

Model obiektu

Poniższe klasy i interfejsy obsługują niektóre główne funkcje zestawu SDK Java analizy obrazów.

Nazwa Opis
ComputerVisionClient Ta klasa jest potrzebna dla wszystkich przetwarzanie obrazów funkcjonalności. Należy utworzyć jego wystąpienie z informacjami o subskrypcji i użyć ich do tworzenia wystąpień innych klas.
ComputerVision Ta klasa pochodzi z obiektu klienta i bezpośrednio obsługuje wszystkie operacje obrazu, takie jak analiza obrazu, wykrywanie tekstu i generowanie miniatur.
VisualFeatureTypes To wyliczynie definiuje różne typy analizy obrazów, które mogą być wykonywane w standardowej operacji analizy. W zależności od potrzeb należy określić zestaw wartości VisualFeatureTypes.

Przykłady kodu

Te fragmenty kodu pokazują, jak wykonywać następujące zadania za pomocą biblioteki klienta analizy obrazów dla języka Java:

Uwierzytelnianie klienta

W nowej metodzie należy utworzyć wystąpienia obiektu ComputerVisionClient z punktem końcowym i kluczem.

public static ComputerVisionClient Authenticate(String subscriptionKey, String endpoint){
    return ComputerVisionManager.authenticate(subscriptionKey).withEndpoint(endpoint);
}

Analizowanie obrazu

Poniższy kod definiuje metodę , która używa obiektu klienta do analizowania obrazu AnalyzeLocalImage lokalnego i drukowania wyników. Metoda zwraca opis tekstowy, kategoryzację, listę tagów, wykryte twarze, flagi zawartości dla dorosłych, główne kolory i typ obrazu.

Porada

Można również analizować obraz zdalny przy użyciu jego adresu URL. Zobacz metody ComputerVision, takie jak AnalyzeImage. Możesz też zobaczyć przykładowy kod w usłudze GitHub, aby uzyskać scenariusze obejmujące obrazy zdalne.

Konfigurowanie obrazu testowego

Najpierw utwórz folder resources/folder w folderze src/main/ projektu i dodaj obraz, który chcesz przeanalizować. Następnie dodaj następującą definicję metody do klasy ImageAnalysisQuickstart. Zmień wartość , aby pathToLocalImage dopasować plik obrazu.

public static void AnalyzeLocalImage(ComputerVisionClient compVisClient) {
    /*
     * Analyze a local image:
     *
     * Set a string variable equal to the path of a local image. The image path
     * below is a relative path.
     */
    String pathToLocalImage = "src\\main\\resources\\myImage.png";

Określanie cech wizualnych

Następnie określ, które cechy wizualne chcesz wyodrębnić w analizie. Pełną listę można znaleźć w wylicie VisualFeatureTypes.

// This list defines the features to be extracted from the image.
List<VisualFeatureTypes> featuresToExtractFromLocalImage = new ArrayList<>();
featuresToExtractFromLocalImage.add(VisualFeatureTypes.DESCRIPTION);
featuresToExtractFromLocalImage.add(VisualFeatureTypes.CATEGORIES);
featuresToExtractFromLocalImage.add(VisualFeatureTypes.TAGS);
featuresToExtractFromLocalImage.add(VisualFeatureTypes.FACES);
featuresToExtractFromLocalImage.add(VisualFeatureTypes.OBJECTS);
featuresToExtractFromLocalImage.add(VisualFeatureTypes.BRANDS);
featuresToExtractFromLocalImage.add(VisualFeatureTypes.ADULT);
featuresToExtractFromLocalImage.add(VisualFeatureTypes.COLOR);
featuresToExtractFromLocalImage.add(VisualFeatureTypes.IMAGE_TYPE);

Analiza

Ten blok drukuje szczegółowe wyniki w konsoli dla każdego zakresu analizy obrazu. Metoda analyzeImageInStream zwraca obiekt ImageAnalysis, który zawiera wszystkie wyodrębnione informacje.

try {
    // Need a byte array for analyzing a local image.
    File rawImage = new File(pathToLocalImage);
    byte[] imageByteArray = Files.readAllBytes(rawImage.toPath());

    // Call the Computer Vision service and tell it to analyze the loaded image.
    ImageAnalysis analysis = compVisClient.computerVision().analyzeImageInStream().withImage(imageByteArray)
            .withVisualFeatures(featuresToExtractFromLocalImage).execute();

W poniższych sekcjach przedstawiono sposób szczegółowej analizy tych informacji.

Uzyskiwanie opisu obrazu

Poniższy kod pobiera listę wygenerowanych podpisów dla obrazu. Aby uzyskać więcej informacji, zobacz Opis obrazów.

// Display image captions and confidence values.
System.out.println("\nCaptions: ");
for (ImageCaption caption : analysis.description().captions()) {
    System.out.printf("\'%s\' with confidence %f\n", caption.text(), caption.confidence());
}

Uzyskiwanie kategorii obrazów

Poniższy kod pobiera wykrytą kategorię obrazu. Aby uzyskać więcej informacji, zobacz Categorize images (Kategoryzowanie obrazów).

// Display image category names and confidence values.
System.out.println("\nCategories: ");
for (Category category : analysis.categories()) {
    System.out.printf("\'%s\' with confidence %f\n", category.name(), category.score());
}

Uzyskiwanie tagów obrazów

Poniższy kod pobiera zestaw wykrytych tagów na obrazie. Aby uzyskać więcej informacji, zobacz Tagi zawartości.

// Display image tags and confidence values.
System.out.println("\nTags: ");
for (ImageTag tag : analysis.tags()) {
    System.out.printf("\'%s\' with confidence %f\n", tag.name(), tag.confidence());
}

Wykrywanie twarzy

Poniższy kod zwraca wykryte twarze na obrazie z ich współrzędnymi prostokąta i wybiera atrybuty twarzy. Aby uzyskać więcej informacji, zobacz Wykrywanie twarzy.

// Display any faces found in the image and their location.
System.out.println("\nFaces: ");
for (FaceDescription face : analysis.faces()) {
    System.out.printf("\'%s\' of age %d at location (%d, %d), (%d, %d)\n", face.gender(), face.age(),
            face.faceRectangle().left(), face.faceRectangle().top(),
            face.faceRectangle().left() + face.faceRectangle().width(),
            face.faceRectangle().top() + face.faceRectangle().height());
}

Wykrywanie obiektów

Poniższy kod zwraca wykryte obiekty na obrazie wraz z ich współrzędnymi. Aby uzyskać więcej informacji, zobacz Wykrywanie obiektów.

// Display any objects found in the image.
System.out.println("\nObjects: ");
for ( DetectedObject object : analysis.objects()) {
    System.out.printf("Object \'%s\' detected at location (%d, %d)\n", object.objectProperty(),
            object.rectangle().x(), object.rectangle().y());
}

Wykrywanie marek

Poniższy kod zwraca wykryte logo marki na obrazie wraz z ich współrzędnymi. Aby uzyskać więcej informacji, zobacz Wykrywanie marki.

// Display any brands found in the image.
System.out.println("\nBrands: ");
for ( DetectedBrand brand : analysis.brands()) {
    System.out.printf("Brand \'%s\' detected at location (%d, %d)\n", brand.name(),
            brand.rectangle().x(), brand.rectangle().y());
}

Wykrywanie zawartości dla dorosłych, racją lub treściami owłosymi

Poniższy kod drukuje wykrytą obecność zawartości dla dorosłych na obrazie. Aby uzyskać więcej informacji, zobacz zawartość dla dorosłych, racy i gory.

// Display whether any adult/racy/gory content was detected and the confidence
// values.
System.out.println("\nAdult: ");
System.out.printf("Is adult content: %b with confidence %f\n", analysis.adult().isAdultContent(),
        analysis.adult().adultScore());
System.out.printf("Has racy content: %b with confidence %f\n", analysis.adult().isRacyContent(),
        analysis.adult().racyScore());
System.out.printf("Has gory content: %b with confidence %f\n", analysis.adult().isGoryContent(),
        analysis.adult().goreScore());

Uzyskiwanie schematu kolorów obrazu

Poniższy kod drukuje wykryte atrybuty kolorów na obrazie, takie jak dominujący kolor i kolor akcentu. Aby uzyskać więcej informacji, zobacz Schematy kolorów.

// Display the image color scheme.
System.out.println("\nColor scheme: ");
System.out.println("Is black and white: " + analysis.color().isBWImg());
System.out.println("Accent color: " + analysis.color().accentColor());
System.out.println("Dominant background color: " + analysis.color().dominantColorBackground());
System.out.println("Dominant foreground color: " + analysis.color().dominantColorForeground());
System.out.println("Dominant colors: " + String.join(", ", analysis.color().dominantColors()));

Uzyskiwanie zawartości specyficznej dla domeny

Analiza obrazów może używać wyspecjalizowanego modelu do dalszej analizy obrazów. Aby uzyskać więcej informacji, zobacz Zawartość specyficzna dla domeny.

Poniższy kod analizuje dane dotyczące wykrytych osobistości na obrazie.

// Display any celebrities detected in the image and their locations.
System.out.println("\nCelebrities: ");
for (Category category : analysis.categories()) {
    if (category.detail() != null && category.detail().celebrities() != null) {
        for (CelebritiesModel celeb : category.detail().celebrities()) {
            System.out.printf("\'%s\' with confidence %f at location (%d, %d), (%d, %d)\n", celeb.name(),
                    celeb.confidence(), celeb.faceRectangle().left(), celeb.faceRectangle().top(),
                    celeb.faceRectangle().left() + celeb.faceRectangle().width(),
                    celeb.faceRectangle().top() + celeb.faceRectangle().height());
        }
    }
}

Poniższy kod analizuje dane dotyczące wykrytych punktów orientacyjnych na obrazie.

// Display any landmarks detected in the image and their locations.
System.out.println("\nLandmarks: ");
for (Category category : analysis.categories()) {
    if (category.detail() != null && category.detail().landmarks() != null) {
        for (LandmarksModel landmark : category.detail().landmarks()) {
            System.out.printf("\'%s\' with confidence %f\n", landmark.name(), landmark.confidence());
        }
    }
}

Uzyskiwanie typu obrazu

Poniższy kod drukuje informacje o typie obrazu, niezależnie od tego, czy jest to — obiekt clipart, czy rysunek liniowy.

// Display what type of clip art or line drawing the image is.
System.out.println("\nImage type:");
System.out.println("Clip art type: " + analysis.imageType().clipArtType());
System.out.println("Line drawing type: " + analysis.imageType().lineDrawingType());

Zamykanie metody

Ukończ blok try/catch i zamknij metodę .

    }

    catch (Exception e) {
        System.out.println(e.getMessage());
        e.printStackTrace();
    }
}

Uruchamianie aplikacji

Aplikację można skompilować za pomocą:

gradle build

Uruchom aplikację za pomocą gradle run polecenia :

gradle run

Czyszczenie zasobów

Jeśli chcesz wyczyścić i usunąć subskrypcję Cognitive Services zasobów, możesz usunąć zasób lub grupę zasobów. Usunięcie grupy zasobów powoduje również usunięcie wszystkich innych skojarzonych z nią zasobów.

Następne kroki

W tym przewodniku Szybki start opisano sposób instalowania biblioteki klienta analizy obrazów i dokonywania podstawowych wywołań analizy obrazów. Następnie dowiedz się więcej o funkcjach interfejsu API analizowania.

Za pomocą biblioteki klienta analizy obrazów można analizować obraz pod względu na tagi, opis tekstu, twarze, zawartość dla dorosłych i nie tylko.

Dokumentacja referencyjna | Kod źródłowy biblioteki | Pakiet (npm) | Przykłady

Wymagania wstępne

  • Subskrypcja platformy Azure — utwórz subskrypcję bezpłatnie
  • Bieżąca wersja Node.js
  • Po utworzeniu subskrypcji platformy Azure utwórz zasób przetwarzanie obrazów zasobów przetwarzanie obrazów usłudze Azure Portal, aby uzyskać klucz i punkt końcowy. Po wdrożeniu kliknij pozycję Przejdź do zasobu.
    • Klucz i punkt końcowy z zasobu, który utworzysz, będą potrzebne do połączenia aplikacji z przetwarzanie obrazów usługą. Klucz i punkt końcowy wkleisz do poniższego kodu w dalszej części tego przewodnika Szybki start.
    • Możesz użyć bezpłatnej warstwy cenowej ( ), aby wypróbować usługę, a następnie uaktualnić ją do warstwy F0 płatnej w środowisku produkcyjnym.

Konfigurowanie

Tworzenie nowej aplikacji Node.js

W oknie konsoli (takim jak cmd, PowerShell lub Bash) utwórz nowy katalog dla aplikacji i przejdź do niego.

mkdir myapp && cd myapp

Uruchom polecenie npm init , aby utworzyć aplikację node z package.json plikiem .

npm init

Instalowanie biblioteki klienta

Zainstaluj pakiet ms-rest-azure @azure/cognitiveservices-computervision NPM i :

npm install @azure/cognitiveservices-computervision

Zainstaluj również moduł asynchroniczny:

npm install async

Plik aplikacji package.json zostanie zaktualizowany o zależności.

Utwórz nowy plik, index.jsotwórz go w edytorze tekstów. Dodaj następujące instrukcje importu.

'use strict';

const async = require('async');
const fs = require('fs');
const https = require('https');
const path = require("path");
const createReadStream = require('fs').createReadStream
const sleep = require('util').promisify(setTimeout);
const ComputerVisionClient = require('@azure/cognitiveservices-computervision').ComputerVisionClient;
const ApiKeyCredentials = require('@azure/ms-rest-js').ApiKeyCredentials;

Porada

Chcesz wyświetlić cały plik kodu szybkiego startu jednocześnie? Znajdziesz go w witrynie GitHub,która zawiera przykłady kodu z tego przewodnika Szybki start.

Utwórz zmienne dla klucza i punktu końcowego platformy Azure zasobu.

/**
 * AUTHENTICATE
 * This single client is used for all examples.
 */
const key = 'PASTE_YOUR_COMPUTER_VISION_SUBSCRIPTION_KEY_HERE';
const endpoint = 'PASTE_YOUR_COMPUTER_VISION_ENDPOINT_HERE';

Ważne

Przejdź do witryny Azure Portal. Jeśli zasób przetwarzanie obrazów utworzony w sekcji Wymagania wstępne został pomyślnie wdrożony, kliknij przycisk Przejdź do zasobu w obszarze Następne kroki. Klucz i punkt końcowy można znaleźć na stronie klucza i punktu końcowego zasobu w obszarze zarządzania zasobami.

Pamiętaj, aby usunąć klucz z kodu, gdy wszystko będzie gotowe, i nigdy nie publikować go publicznie. W środowisku produkcyjnym rozważ użycie bezpiecznego sposobu przechowywania poświadczeń i uzyskiwania do nich dostępu. Zobacz artykuł Cognitive Services zabezpieczeń, aby uzyskać więcej informacji.

Model obiektu

Poniższe klasy i interfejsy obsługują niektóre główne funkcje zestawu SDK analizy obrazów Node.js SDK.

Nazwa Opis
ComputerVisionClient Ta klasa jest potrzebna dla wszystkich przetwarzanie obrazów funkcjonalności. Należy utworzyć jego wystąpienia z informacjami o subskrypcji i używać ich do większości operacji na obrazach.
VisualFeatureTypes To wyliczynie definiuje różne typy analizy obrazów, które mogą być wykonywane w standardowej operacji analizy. W zależności od potrzeb należy określić zestaw wartości VisualFeatureTypes.

Przykłady kodu

Te fragmenty kodu pokazują, jak wykonać następujące zadania za pomocą biblioteki klienta analizy obrazów dla Node.js:

Uwierzytelnianie klienta

Należy utworzyć wystąpienia klienta z punktem końcowym i kluczem. Utwórz obiekt ApiKeyCredentials przy użyciu klucza i punktu końcowego, a następnie użyj go do utworzenia obiektu ComputerVisionClient.

const computerVisionClient = new ComputerVisionClient(
  new ApiKeyCredentials({ inHeader: { 'Ocp-Apim-Subscription-Key': key } }), endpoint);

Następnie zdefiniuj funkcję computerVision i zadeklaruj serię asynchroniczną za pomocą funkcji podstawowej i funkcji wywołania zwrotnego. Dodasz kod szybkiego startu do funkcji podstawowej i wywołasz computerVision wywołanie w dolnej części skryptu. Pozostała część kodu w tym przewodniku Szybki start znajduje się wewnątrz computerVision funkcji .

function computerVision() {
  async.series([
    async function () {

    },
    function () {
      return new Promise((resolve) => {
        resolve();
      })
    }
  ], (err) => {
    throw (err);
  });
}

computerVision();

Analizowanie obrazu

Kod w tej sekcji analizuje obrazy zdalne w celu wyodrębnienia różnych cech wizualnych. Te operacje można wykonać w ramach metody analyzeImage obiektu klienta lub wywołać je przy użyciu poszczególnych metod. Aby uzyskać szczegółowe informacje, zobacz dokumentację referencyjną.

Uwaga

Można również analizować obraz lokalny. Zobacz metody ComputerVisionClient, takie jak describeImageInStream. Możesz też zobaczyć przykładowy kod w usłudze GitHub, aby uzyskać scenariusze obejmujące obrazy lokalne.

Uzyskiwanie opisu obrazu

Poniższy kod pobiera listę wygenerowanych napisów dla obrazu. Aby uzyskać więcej informacji, zobacz Opisywanie obrazów.

Najpierw zdefiniuj adres URL obrazu do analizy:

const describeURL = 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/celebrities.jpg';

Następnie dodaj następujący kod, aby uzyskać opis obrazu i wydrukować go w konsoli.

// Analyze URL image
console.log('Analyzing URL image to describe...', describeURL.split('/').pop());
const caption = (await computerVisionClient.describeImage(describeURL)).captions[0];
console.log(`This may be ${caption.text} (${caption.confidence.toFixed(2)} confidence)`);

Uzyskiwanie kategorii obrazów

Poniższy kod pobiera wykrytą kategorię obrazu. Aby uzyskać więcej informacji, zobacz Kategoryzowanie obrazów.

const categoryURLImage = 'https://moderatorsampleimages.blob.core.windows.net/samples/sample16.png';

// Analyze URL image
console.log('Analyzing category in image...', categoryURLImage.split('/').pop());
const categories = (await computerVisionClient.analyzeImage(categoryURLImage)).categories;
console.log(`Categories: ${formatCategories(categories)}`);

Zdefiniuj funkcję pomocnika formatCategories :

// Formats the image categories
function formatCategories(categories) {
  categories.sort((a, b) => b.score - a.score);
  return categories.map(cat => `${cat.name} (${cat.score.toFixed(2)})`).join(', ');
}

Uzyskiwanie tagów obrazów

Poniższy kod pobiera zestaw wykrytych tagów na obrazie. Aby uzyskać więcej informacji, zobacz Tagi zawartości.

console.log('-------------------------------------------------');
console.log('DETECT TAGS');
console.log();

// Image of different kind of dog.
const tagsURL = 'https://moderatorsampleimages.blob.core.windows.net/samples/sample16.png';

// Analyze URL image
console.log('Analyzing tags in image...', tagsURL.split('/').pop());
const tags = (await computerVisionClient.analyzeImage(tagsURL, { visualFeatures: ['Tags'] })).tags;
console.log(`Tags: ${formatTags(tags)}`);

Zdefiniuj funkcję pomocnika formatTags :

// Format tags for display
function formatTags(tags) {
  return tags.map(tag => (`${tag.name} (${tag.confidence.toFixed(2)})`)).join(', ');
}

Wykrywanie obiektów

Poniższy kod wykrywa typowe obiekty na obrazie i drukuje je w konsoli. Aby uzyskać więcej informacji, zobacz Wykrywanie obiektów.

// Image of a dog
const objectURL = 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-node-sdk-samples/master/Data/image.jpg';

// Analyze a URL image
console.log('Analyzing objects in image...', objectURL.split('/').pop());
const objects = (await computerVisionClient.analyzeImage(objectURL, { visualFeatures: ['Objects'] })).objects;
console.log();

// Print objects bounding box and confidence
if (objects.length) {
  console.log(`${objects.length} object${objects.length == 1 ? '' : 's'} found:`);
  for (const obj of objects) { console.log(`    ${obj.object} (${obj.confidence.toFixed(2)}) at ${formatRectObjects(obj.rectangle)}`); }
} else { console.log('No objects found.'); }

Zdefiniuj funkcję formatRectObjects pomocnika, aby zwracała współrzędne górne, lewe, dolne i prawe wraz z szerokością i wysokością.

// Formats the bounding box
function formatRectObjects(rect) {
  return `top=${rect.y}`.padEnd(10) + `left=${rect.x}`.padEnd(10) + `bottom=${rect.y + rect.h}`.padEnd(12)
    + `right=${rect.x + rect.w}`.padEnd(10) + `(${rect.w}x${rect.h})`;
}

Wykrywanie marek

Poniższy kod wykrywa marki i logo firmowe na obrazie i drukuje je w konsoli. Aby uzyskać więcej informacji, zobacz Wykrywanie marki.

const brandURLImage = 'https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/images/red-shirt-logo.jpg';

// Analyze URL image
console.log('Analyzing brands in image...', brandURLImage.split('/').pop());
const brands = (await computerVisionClient.analyzeImage(brandURLImage, { visualFeatures: ['Brands'] })).brands;

// Print the brands found
if (brands.length) {
  console.log(`${brands.length} brand${brands.length != 1 ? 's' : ''} found:`);
  for (const brand of brands) {
    console.log(`    ${brand.name} (${brand.confidence.toFixed(2)} confidence)`);
  }
} else { console.log(`No brands found.`); }

Wykrywanie twarzy

Poniższy kod zwraca wykryte twarze na obrazie z ich współrzędnymi prostokąta i wybiera atrybuty twarzy. Aby uzyskać więcej informacji, zobacz Wykrywanie twarzy.

const facesImageURL = 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/faces.jpg';

// Analyze URL image.
console.log('Analyzing faces in image...', facesImageURL.split('/').pop());
// Get the visual feature for 'Faces' only.
const faces = (await computerVisionClient.analyzeImage(facesImageURL, { visualFeatures: ['Faces'] })).faces;

// Print the bounding box, gender, and age from the faces.
if (faces.length) {
  console.log(`${faces.length} face${faces.length == 1 ? '' : 's'} found:`);
  for (const face of faces) {
    console.log(`    Gender: ${face.gender}`.padEnd(20)
      + ` Age: ${face.age}`.padEnd(10) + `at ${formatRectFaces(face.faceRectangle)}`);
  }
} else { console.log('No faces found.'); }

Zdefiniuj funkcję pomocnika formatRectFaces :

// Formats the bounding box
function formatRectFaces(rect) {
  return `top=${rect.top}`.padEnd(10) + `left=${rect.left}`.padEnd(10) + `bottom=${rect.top + rect.height}`.padEnd(12)
    + `right=${rect.left + rect.width}`.padEnd(10) + `(${rect.width}x${rect.height})`;
}

Wykrywanie zawartości dla dorosłych, racją lub treściami owłosymi

Poniższy kod drukuje wykrytą obecność zawartości dla dorosłych na obrazie. Aby uzyskać więcej informacji, zobacz zawartość dla dorosłych, racy i gory.

Zdefiniuj adres URL obrazu do użycia:

// The URL image and local images are not racy/adult. 
// Try your own racy/adult images for a more effective result.
const adultURLImage = 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/celebrities.jpg';

Następnie dodaj następujący kod, aby wykryć zawartość dla dorosłych i wydrukować wyniki w konsoli.

// Function to confirm racy or not
const isIt = flag => flag ? 'is' : "isn't";

// Analyze URL image
console.log('Analyzing image for racy/adult content...', adultURLImage.split('/').pop());
const adult = (await computerVisionClient.analyzeImage(adultURLImage, {
  visualFeatures: ['Adult']
})).adult;
console.log(`This probably ${isIt(adult.isAdultContent)} adult content (${adult.adultScore.toFixed(4)} score)`);
console.log(`This probably ${isIt(adult.isRacyContent)} racy content (${adult.racyScore.toFixed(4)} score)`);

Uzyskiwanie schematu kolorów obrazu

Poniższy kod drukuje wykryte atrybuty kolorów na obrazie, takie jak dominujący kolor i kolor akcentu. Aby uzyskać więcej informacji, zobacz Schematy kolorów.

const colorURLImage = 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/celebrities.jpg';

// Analyze URL image
console.log('Analyzing image for color scheme...', colorURLImage.split('/').pop());
console.log();
const color = (await computerVisionClient.analyzeImage(colorURLImage, { visualFeatures: ['Color'] })).color;
printColorScheme(color);

Zdefiniuj funkcję printColorScheme pomocnika, aby wydrukować szczegóły schematu kolorów w konsoli.

// Print a detected color scheme
function printColorScheme(colors) {
  console.log(`Image is in ${colors.isBwImg ? 'black and white' : 'color'}`);
  console.log(`Dominant colors: ${colors.dominantColors.join(', ')}`);
  console.log(`Dominant foreground color: ${colors.dominantColorForeground}`);
  console.log(`Dominant background color: ${colors.dominantColorBackground}`);
  console.log(`Suggested accent color: #${colors.accentColor}`);
}

Uzyskiwanie zawartości specyficznej dla domeny

Analiza obrazów może używać wyspecjalizowanego modelu do dalszej analizy obrazów. Aby uzyskać więcej informacji, zobacz Zawartość specyficzna dla domeny.

Najpierw zdefiniuj adres URL obrazu do analizy:

const domainURLImage = 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/landmark.jpg';

Poniższy kod analizuje dane dotyczące wykrytych punktów orientacyjnych na obrazie.

// Analyze URL image
console.log('Analyzing image for landmarks...', domainURLImage.split('/').pop());
const domain = (await computerVisionClient.analyzeImageByDomain('landmarks', domainURLImage)).result.landmarks;

// Prints domain-specific, recognized objects
if (domain.length) {
  console.log(`${domain.length} ${domain.length == 1 ? 'landmark' : 'landmarks'} found:`);
  for (const obj of domain) {
    console.log(`    ${obj.name}`.padEnd(20) + `(${obj.confidence.toFixed(2)} confidence)`.padEnd(20) + `${formatRectDomain(obj.faceRectangle)}`);
  }
} else {
  console.log('No landmarks found.');
}

Zdefiniuj funkcję pomocnika w celu formatRectDomain analizowania danych lokalizacji dotyczących wykrytych punktów orientacyjnych.

// Formats bounding box
function formatRectDomain(rect) {
  if (!rect) return '';
  return `top=${rect.top}`.padEnd(10) + `left=${rect.left}`.padEnd(10) + `bottom=${rect.top + rect.height}`.padEnd(12) +
    `right=${rect.left + rect.width}`.padEnd(10) + `(${rect.width}x${rect.height})`;
}

Uzyskiwanie typu obrazu

Poniższy kod drukuje informacje o typie obrazu, niezależnie od tego, czy jest to — obiekt clipart, czy rysunek liniowy.

const typeURLImage = 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-python-sdk-samples/master/samples/vision/images/make_things_happen.jpg';

// Analyze URL image
console.log('Analyzing type in image...', typeURLImage.split('/').pop());
const types = (await computerVisionClient.analyzeImage(typeURLImage, { visualFeatures: ['ImageType'] })).imageType;
console.log(`Image appears to be ${describeType(types)}`);

Zdefiniuj funkcję pomocnika describeType :

function describeType(imageType) {
  if (imageType.clipArtType && imageType.clipArtType > imageType.lineDrawingType) return 'clip art';
  if (imageType.lineDrawingType && imageType.clipArtType < imageType.lineDrawingType) return 'a line drawing';
  return 'a photograph';
}

Uruchamianie aplikacji

Uruchom aplikację za pomocą node polecenia w pliku szybkiego startu.

node index.js

Czyszczenie zasobów

Jeśli chcesz wyczyścić i usunąć subskrypcję Cognitive Services zasobów, możesz usunąć zasób lub grupę zasobów. Usunięcie grupy zasobów powoduje również usunięcie wszystkich innych skojarzonych z nią zasobów.

Następne kroki

W tym przewodniku Szybki start opisano sposób instalowania biblioteki klienta analizy obrazów i dokonywania podstawowych wywołań analizy obrazów. Następnie dowiedz się więcej o funkcjach interfejsu API analizowania.

Za pomocą biblioteki klienta analizy obrazów można analizować obraz pod względu na tagi, opis tekstu, twarze, zawartość dla dorosłych i nie tylko.

Dokumentacja referencyjna | Kod źródłowy biblioteki | Pakiet

Wymagania wstępne

  • Subskrypcja platformy Azure — utwórz subskrypcję bezpłatnie
  • Najnowsza wersja go
  • Po utworzeniu subskrypcji platformy Azure utwórz zasób przetwarzanie obrazów zasobów przetwarzanie obrazów usłudze Azure Portal, aby uzyskać klucz i punkt końcowy. Po wdrożeniu kliknij pozycję Przejdź do zasobu.
    • Klucz i punkt końcowy z zasobu, który utworzysz, będą potrzebne do połączenia aplikacji z przetwarzanie obrazów usługą. Klucz i punkt końcowy wkleisz do poniższego kodu w dalszej części tego przewodnika Szybki start.
    • Możesz użyć bezpłatnej warstwy cenowej ( ), aby wypróbować usługę, a następnie uaktualnić ją do warstwy F0 płatnej w środowisku produkcyjnym.

Konfigurowanie

Tworzenie katalogu projektu Go

W oknie konsoli (cmd, PowerShell, Terminal, Bash) utwórz nowy obszar roboczy dla projektu go o nazwie my-app i przejdź do niego.

mkdir -p my-app/{src, bin, pkg}  
cd my-app

Obszar roboczy będzie zawierać trzy foldery:

  • src — ten katalog będzie zawierać kod źródłowy i pakiety. Wszystkie pakiety zainstalowane za pomocą go get polecenia zostaną w tym katalogu.
  • pkg — ten katalog będzie zawierać skompilowane obiekty pakietu go. Wszystkie te pliki mają .a rozszerzenie .
  • bin — ten katalog będzie zawierać binarne pliki wykonywalne tworzone po uruchomieniu pliku go install .

Porada

Aby dowiedzieć się więcej na temat struktury obszaru roboczego języka Go, zobacz dokumentację języka Go. Ten przewodnik zawiera informacje dotyczące ustawiania $GOPATH i $GOROOT .

Instalowanie biblioteki klienta dla programu Go

Następnie zainstaluj bibliotekę klienta dla go:

go get -u https://github.com/Azure/azure-sdk-for-go/tree/master/services/cognitiveservices/v2.1/computervision

a jeśli używasz programu dep, w ramach repozytorium uruchom:

dep ensure -add https://github.com/Azure/azure-sdk-for-go/tree/master/services/cognitiveservices/v2.1/computervision

Tworzenie aplikacji w go

Następnie utwórz plik w katalogu src o nazwie sample-app.go :

cd src
touch sample-app.go

Otwórz sample-app.go plik w preferowanym edytorze IDE lub edytorze tekstów. Następnie dodaj nazwę pakietu i zaimportuj następujące biblioteki:

package main

import (
    "context"
    "encoding/json"
    "fmt"
    "github.com/Azure/azure-sdk-for-go/services/cognitiveservices/v2.0/computervision"
    "github.com/Azure/go-autorest/autorest"
    "io"
    "log"
    "os"
    "strings"
    "time"
)

Ponadto zadeklaruj kontekst w katalogu głównym skryptu. Ten obiekt będzie potrzebny do wykonania większości wywołań funkcji analizy obrazów:

// Declare global so don't have to pass it to all of the tasks.
var computerVisionContext context.Context

Następnie zaczniesz dodawać kod, aby wykonywać różne operacje przetwarzanie obrazów danych.

Model obiektu

Poniższe klasy i interfejsy obsługują niektóre główne funkcje zestawu SDK języka Go do analizy obrazów.

Nazwa Opis
BaseClient Ta klasa jest potrzebna dla wszystkich przetwarzanie obrazów, takich jak analiza obrazów i odczytywanie tekstu. Należy utworzyć jego wystąpienia z informacjami o subskrypcji i używać ich do większości operacji na obrazach.
ImageAnalysis Ten typ zawiera wyniki wywołania funkcji AnalyzeImage. Istnieją podobne typy dla każdej funkcji specyficznej dla kategorii.
VisualFeatureTypes Ten typ definiuje różne rodzaje analizy obrazów, które można wykonać w standardowej operacji analizy. W zależności od potrzeb należy określić zestaw wartości VisualFeatureTypes.

Przykłady kodu

Te fragmenty kodu pokazują, jak wykonywać następujące zadania za pomocą biblioteki klienta analizy obrazów dla go:

Uwierzytelnianie klienta

Uwaga

W tym kroku przyjęto założenie, że utworzono zmienne środowiskowe dla klucza przetwarzanie obrazów punktu końcowego o nazwach COMPUTER_VISION_SUBSCRIPTION_KEY i COMPUTER_VISION_ENDPOINT .

Utwórz funkcję i dodaj do niego następujący kod, aby utworzyć wystąpienia klienta main z punktem końcowym i kluczem.

/*  
 * Configure the Computer Vision client
 */
computerVisionClient := computervision.New(endpointURL);
computerVisionClient.Authorizer = autorest.NewCognitiveServicesAuthorizer(computerVisionKey)

computerVisionContext = context.Background()
/*
 * END - Configure the Computer Vision client
 */

Analizowanie obrazu

Poniższy kod używa obiektu klienta do analizowania obrazu zdalnego i drukowania wyników w konsoli. Możesz uzyskać opis tekstowy, kategoryzację, listę tagów, wykryte obiekty, wykryte marki, wykryte twarze, flagi zawartości dla dorosłych, główne kolory i typ obrazu.

Konfigurowanie obrazu testowego

Najpierw zapisz odwołanie do adresu URL obrazu, który chcesz przeanalizować. Umieść ją wewnątrz main funkcji.

landmarkImageURL := "https://github.com/Azure-Samples/cognitive-services-sample-data-files/raw/master/ComputerVision/Images/landmark.jpg"

Porada

Można również analizować obraz lokalny. Zobacz metody BaseClient, takie jak AnalyzeImageInStream. Możesz też zobaczyć przykładowy kod w usłudze GitHub, aby uzyskać scenariusze obejmujące obrazy lokalne.

Określanie cech wizualnych

Następująca funkcja wywołuje wyodrębnianie różnych cech wizualnych z przykładowego obrazu. Te funkcje zdefiniuje się w poniższych sekcjach.

// Analyze features of an image, remote
DescribeRemoteImage(computerVisionClient, landmarkImageURL)
CategorizeRemoteImage(computerVisionClient, landmarkImageURL)
TagRemoteImage(computerVisionClient, landmarkImageURL)
DetectFacesRemoteImage(computerVisionClient, facesImageURL)
DetectObjectsRemoteImage(computerVisionClient, objectsImageURL)
DetectBrandsRemoteImage(computerVisionClient, brandsImageURL)
DetectAdultOrRacyContentRemoteImage(computerVisionClient, adultRacyImageURL)
DetectColorSchemeRemoteImage(computerVisionClient, brandsImageURL)
DetectDomainSpecificContentRemoteImage(computerVisionClient, landmarkImageURL)
DetectImageTypesRemoteImage(computerVisionClient, detectTypeImageURL)
GenerateThumbnailRemoteImage(computerVisionClient, adultRacyImageURL)

Uzyskiwanie opisu obrazu

Następująca funkcja pobiera listę wygenerowanych napisów dla obrazu. Aby uzyskać więcej informacji na temat opisu obrazu, zobacz Describe images (Opisywanie obrazów).

func DescribeRemoteImage(client computervision.BaseClient, remoteImageURL string) {
    fmt.Println("-----------------------------------------")
    fmt.Println("DESCRIBE IMAGE - remote")
    fmt.Println()
    var remoteImage computervision.ImageURL
    remoteImage.URL = &remoteImageURL

    maxNumberDescriptionCandidates := new(int32)
    *maxNumberDescriptionCandidates = 1

    remoteImageDescription, err := client.DescribeImage(
            computerVisionContext,
            remoteImage,
            maxNumberDescriptionCandidates,
            "") // language
        if err != nil { log.Fatal(err) }

    fmt.Println("Captions from remote image: ")
    if len(*remoteImageDescription.Captions) == 0 {
        fmt.Println("No captions detected.")
    } else {
        for _, caption := range *remoteImageDescription.Captions {
            fmt.Printf("'%v' with confidence %.2f%%\n", *caption.Text, *caption.Confidence * 100)
        }
    }
    fmt.Println()
}

Uzyskiwanie kategorii obrazów

Następująca funkcja pobiera wykrytą kategorię obrazu. Aby uzyskać więcej informacji, zobacz Categorize images (Kategoryzowanie obrazów).

func CategorizeRemoteImage(client computervision.BaseClient, remoteImageURL string) {
    fmt.Println("-----------------------------------------")
    fmt.Println("CATEGORIZE IMAGE - remote")
    fmt.Println()
    var remoteImage computervision.ImageURL
    remoteImage.URL = &remoteImageURL

    features := []computervision.VisualFeatureTypes{computervision.VisualFeatureTypesCategories}
    imageAnalysis, err := client.AnalyzeImage(
            computerVisionContext,
            remoteImage,
            features,
            []computervision.Details{},
            "")
    if err != nil { log.Fatal(err) }

    fmt.Println("Categories from remote image: ")
    if len(*imageAnalysis.Categories) == 0 {
        fmt.Println("No categories detected.")
    } else {
        for _, category := range *imageAnalysis.Categories {
            fmt.Printf("'%v' with confidence %.2f%%\n", *category.Name, *category.Score * 100)
        }
    }
    fmt.Println()
}

Uzyskiwanie tagów obrazów

Następująca funkcja pobiera zestaw wykrytych tagów na obrazie. Aby uzyskać więcej informacji, zobacz Tagi zawartości.

func TagRemoteImage(client computervision.BaseClient, remoteImageURL string) {
    fmt.Println("-----------------------------------------")
    fmt.Println("TAG IMAGE - remote")
    fmt.Println()
    var remoteImage computervision.ImageURL
    remoteImage.URL = &remoteImageURL

    remoteImageTags, err := client.TagImage(
            computerVisionContext,
            remoteImage,
            "")
    if err != nil { log.Fatal(err) }

    fmt.Println("Tags in the remote image: ")
    if len(*remoteImageTags.Tags) == 0 {
        fmt.Println("No tags detected.")
    } else {
        for _, tag := range *remoteImageTags.Tags {
            fmt.Printf("'%v' with confidence %.2f%%\n", *tag.Name, *tag.Confidence * 100)
        }
    }
    fmt.Println()
}

Wykrywanie obiektów

Następująca funkcja wykrywa typowe obiekty na obrazie i drukuje je w konsoli. Aby uzyskać więcej informacji, zobacz Wykrywanie obiektów.

func DetectObjectsRemoteImage(client computervision.BaseClient, remoteImageURL string) {
    fmt.Println("-----------------------------------------")
    fmt.Println("DETECT OBJECTS - remote")
    fmt.Println()
    var remoteImage computervision.ImageURL
    remoteImage.URL = &remoteImageURL

    imageAnalysis, err := client.DetectObjects(
            computerVisionContext,
            remoteImage,
    )
    if err != nil { log.Fatal(err) }

    fmt.Println("Detecting objects in remote image: ")
    if len(*imageAnalysis.Objects) == 0 {
        fmt.Println("No objects detected.")
    } else {
        // Print the objects found with confidence level and bounding box locations.
        for _, object := range *imageAnalysis.Objects {
            fmt.Printf("'%v' with confidence %.2f%% at location (%v, %v), (%v, %v)\n",
                *object.Object, *object.Confidence * 100,
                *object.Rectangle.X, *object.Rectangle.X + *object.Rectangle.W,
                *object.Rectangle.Y, *object.Rectangle.Y + *object.Rectangle.H)
        }
    }
    fmt.Println()
}

Wykrywanie marek

Poniższy kod wykrywa marki i logo firmowe na obrazie i drukuje je w konsoli. Aby uzyskać więcej informacji, należy dowiedzieć się, jak wykrywać marki.

Najpierw zadeklaruj odwołanie do nowego obrazu w main funkcji.

brandsImageURL := "https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/images/gray-shirt-logo.jpg"

Poniższy kod definiuje funkcję wykrywania marki.

func DetectBrandsRemoteImage(client computervision.BaseClient, remoteImageURL string) {
    fmt.Println("-----------------------------------------")
    fmt.Println("DETECT BRANDS - remote")
    fmt.Println()
    var remoteImage computervision.ImageURL
    remoteImage.URL = &remoteImageURL

    // Define the kinds of features you want returned.
    features := []computervision.VisualFeatureTypes{computervision.VisualFeatureTypesBrands}

    imageAnalysis, err := client.AnalyzeImage(
        computerVisionContext,
        remoteImage,
        features,
        []computervision.Details{},
        "en")
    if err != nil { log.Fatal(err) }

    fmt.Println("Detecting brands in remote image: ")
    if len(*imageAnalysis.Brands) == 0 {
        fmt.Println("No brands detected.")
    } else {
        // Get bounding box around the brand and confidence level it's correctly identified.
        for _, brand := range *imageAnalysis.Brands {
            fmt.Printf("'%v' with confidence %.2f%% at location (%v, %v), (%v, %v)\n",
                *brand.Name, *brand.Confidence * 100,
                *brand.Rectangle.X, *brand.Rectangle.X + *brand.Rectangle.W,
                *brand.Rectangle.Y, *brand.Rectangle.Y + *brand.Rectangle.H)
        }
    }
    fmt.Println()
}

Wykrywanie twarzy

Następująca funkcja zwraca wykryte twarze na obrazie z ich współrzędnymi prostokąta i pewnymi atrybutami twarzy. Aby uzyskać więcej informacji, zobacz Wykrywanie twarzy.

func DetectFacesRemoteImage(client computervision.BaseClient, remoteImageURL string) {
    fmt.Println("-----------------------------------------")
    fmt.Println("DETECT FACES - remote")
    fmt.Println()
    var remoteImage computervision.ImageURL
    remoteImage.URL = &remoteImageURL

    // Define the features you want returned with the API call.
    features := []computervision.VisualFeatureTypes{computervision.VisualFeatureTypesFaces}
    imageAnalysis, err := client.AnalyzeImage(
            computerVisionContext,
            remoteImage,
            features,
            []computervision.Details{},
            "")
        if err != nil { log.Fatal(err) }

    fmt.Println("Detecting faces in a remote image ...")
    if len(*imageAnalysis.Faces) == 0 {
        fmt.Println("No faces detected.")
    } else {
        // Print the bounding box locations of the found faces.
        for _, face := range *imageAnalysis.Faces {
            fmt.Printf("'%v' of age %v at location (%v, %v), (%v, %v)\n",
                face.Gender, *face.Age,
                *face.FaceRectangle.Left, *face.FaceRectangle.Top,
                *face.FaceRectangle.Left + *face.FaceRectangle.Width,
                *face.FaceRectangle.Top + *face.FaceRectangle.Height)
        }
    }
    fmt.Println()
}

Wykrywanie zawartości dla dorosłych, racją lub treściami owłosymi

Następująca funkcja drukuje wykrytą obecność zawartości dla dorosłych na obrazie. Aby uzyskać więcej informacji, zobacz zawartość dla dorosłych, racy i gory.

func DetectAdultOrRacyContentRemoteImage(client computervision.BaseClient, remoteImageURL string) {
    fmt.Println("-----------------------------------------")
    fmt.Println("DETECT ADULT OR RACY CONTENT - remote")
    fmt.Println()
    var remoteImage computervision.ImageURL
    remoteImage.URL = &remoteImageURL

    // Define the features you want returned from the API call.
    features := []computervision.VisualFeatureTypes{computervision.VisualFeatureTypesAdult}
    imageAnalysis, err := client.AnalyzeImage(
            computerVisionContext,
            remoteImage,
            features,
            []computervision.Details{},
            "") // language, English is default
    if err != nil { log.Fatal(err) }

    // Print whether or not there is questionable content.
    // Confidence levels: low means content is OK, high means it's not.
    fmt.Println("Analyzing remote image for adult or racy content: ");
    fmt.Printf("Is adult content: %v with confidence %.2f%%\n", *imageAnalysis.Adult.IsAdultContent, *imageAnalysis.Adult.AdultScore * 100)
    fmt.Printf("Has racy content: %v with confidence %.2f%%\n", *imageAnalysis.Adult.IsRacyContent, *imageAnalysis.Adult.RacyScore * 100)
    fmt.Println()
}

Uzyskiwanie schematu kolorów obrazu

Następująca funkcja drukuje wykryte atrybuty kolorów na obrazie, takie jak kolory dominujące i kolor akcentu. Aby uzyskać więcej informacji, zobacz Schematy kolorów.

func DetectColorSchemeRemoteImage(client computervision.BaseClient, remoteImageURL string) {
    fmt.Println("-----------------------------------------")
    fmt.Println("DETECT COLOR SCHEME - remote")
    fmt.Println()
    var remoteImage computervision.ImageURL
    remoteImage.URL = &remoteImageURL

    // Define the features you'd like returned with the result.
    features := []computervision.VisualFeatureTypes{computervision.VisualFeatureTypesColor}
    imageAnalysis, err := client.AnalyzeImage(
            computerVisionContext,
            remoteImage,
            features,
            []computervision.Details{},
            "") // language, English is default
    if err != nil { log.Fatal(err) }

    fmt.Println("Color scheme of the remote image: ");
    fmt.Printf("Is black and white: %v\n", *imageAnalysis.Color.IsBWImg)
    fmt.Printf("Accent color: 0x%v\n", *imageAnalysis.Color.AccentColor)
    fmt.Printf("Dominant background color: %v\n", *imageAnalysis.Color.DominantColorBackground)
    fmt.Printf("Dominant foreground color: %v\n", *imageAnalysis.Color.DominantColorForeground)
    fmt.Printf("Dominant colors: %v\n", strings.Join(*imageAnalysis.Color.DominantColors, ", "))
    fmt.Println()
}

Uzyskiwanie zawartości specyficznej dla domeny

Analiza obrazów może używać wyspecjalizowanych modeli do dalszej analizy obrazów. Aby uzyskać więcej informacji, zobacz Zawartość specyficzna dla domeny.

Poniższy kod analizuje dane dotyczące wykrytych osobistości na obrazie.

func DetectDomainSpecificContentRemoteImage(client computervision.BaseClient, remoteImageURL string) {
    fmt.Println("-----------------------------------------")
    fmt.Println("DETECT DOMAIN-SPECIFIC CONTENT - remote")
    fmt.Println()
    var remoteImage computervision.ImageURL
    remoteImage.URL = &remoteImageURL

    fmt.Println("Detecting domain-specific content in the local image ...")

    // Check if there are any celebrities in the image.
    celebrities, err := client.AnalyzeImageByDomain(
            computerVisionContext,
            "celebrities",
            remoteImage,
            "") // language, English is default
    if err != nil { log.Fatal(err) }

    fmt.Println("\nCelebrities: ")

    // Marshal the output from AnalyzeImageByDomain into JSON.
    data, err := json.MarshalIndent(celebrities.Result, "", "\t")

    // Define structs for which to unmarshal the JSON.
    type Celebrities struct {
        Name string `json:"name"`
    }

    type CelebrityResult struct {
        Celebrities	[]Celebrities `json:"celebrities"`
    }

    var celebrityResult CelebrityResult

    // Unmarshal the data.
    err = json.Unmarshal(data, &celebrityResult)
    if err != nil { log.Fatal(err) }

    //	Check if any celebrities detected.
    if len(celebrityResult.Celebrities) == 0 {
        fmt.Println("No celebrities detected.")
    }	else {
        for _, celebrity := range celebrityResult.Celebrities {
            fmt.Printf("name: %v\n", celebrity.Name)
        }
    }

Poniższy kod analizuje dane dotyczące wykrytych punktów orientacyjnych na obrazie.

    fmt.Println("\nLandmarks: ")

    // Check if there are any landmarks in the image.
    landmarks, err := client.AnalyzeImageByDomain(
            computerVisionContext,
            "landmarks",
            remoteImage,
            "")
    if err != nil { log.Fatal(err) }

    // Marshal the output from AnalyzeImageByDomain into JSON.
    data, err = json.MarshalIndent(landmarks.Result, "", "\t")

    // Define structs for which to unmarshal the JSON.
    type Landmarks struct {
        Name string `json:"name"`
    }

    type LandmarkResult struct {
        Landmarks	[]Landmarks `json:"landmarks"`
    }

    var landmarkResult LandmarkResult

    // Unmarshal the data.
    err = json.Unmarshal(data, &landmarkResult)
    if err != nil { log.Fatal(err) }

    // Check if any celebrities detected.
    if len(landmarkResult.Landmarks) == 0 {
        fmt.Println("No landmarks detected.")
    }	else {
        for _, landmark := range landmarkResult.Landmarks {
            fmt.Printf("name: %v\n", landmark.Name)
        }
    }
    fmt.Println()
}

Uzyskiwanie typu obrazu

Następująca funkcja drukuje informacje o typie obrazu, niezależnie od tego, czy jest to — obiekt clipart, czy rysunek liniowy.

func DetectImageTypesRemoteImage(client computervision.BaseClient, remoteImageURL string) {
    fmt.Println("-----------------------------------------")
    fmt.Println("DETECT IMAGE TYPES - remote")
    fmt.Println()
    var remoteImage computervision.ImageURL
    remoteImage.URL = &remoteImageURL

    features := []computervision.VisualFeatureTypes{computervision.VisualFeatureTypesImageType}

    imageAnalysis, err := client.AnalyzeImage(
            computerVisionContext,
            remoteImage,
            features,
            []computervision.Details{},
            "")
    if err != nil { log.Fatal(err) }

    fmt.Println("Image type of remote image:")

    fmt.Println("\nClip art type: ")
    switch *imageAnalysis.ImageType.ClipArtType {
    case 0:
        fmt.Println("Image is not clip art.")
    case 1:
        fmt.Println("Image is ambiguously clip art.")
    case 2:
        fmt.Println("Image is normal clip art.")
    case 3:
        fmt.Println("Image is good clip art.")
    }

    fmt.Println("\nLine drawing type: ")
    if *imageAnalysis.ImageType.LineDrawingType == 1 {
        fmt.Println("Image is a line drawing.")
    }	else {
        fmt.Println("Image is not a line drawing.")
    }
    fmt.Println()
}

Uruchamianie aplikacji

Uruchom aplikację z katalogu aplikacji za pomocą go run polecenia .

go run sample-app.go

Czyszczenie zasobów

Jeśli chcesz wyczyścić i usunąć subskrypcję Cognitive Services, możesz usunąć zasób lub grupę zasobów. Usunięcie grupy zasobów powoduje również usunięcie wszystkich innych skojarzonych z nią zasobów.

Następne kroki

W tym przewodniku Szybki start opisano sposób instalowania biblioteki klienta analizy obrazów i dokonywania podstawowych wywołań analizy obrazów. Następnie dowiedz się więcej o funkcjach interfejsu API analizowania.

Interfejs API REST analizy obrazów umożliwia:

  • Przeanalizuj obraz, aby uzyskać tagi, opis tekstu, twarze, zawartość dla dorosłych i nie tylko.
  • Generowanie miniatury za pomocą inteligentnego przycinania

Uwaga

W tym przewodniku Szybki start do wywołania interfejsu API REST są używane polecenia cURL. Interfejs API REST można również wywołać przy użyciu języka programowania. Przykłady można znaleźć w przykładach w języku C#, Python, Java, JavaScripti Go.

Wymagania wstępne

  • Subskrypcja platformy Azure — bezpłatne tworzenie subskrypcji
  • Po utworzeniu subskrypcji platformy Azure utwórz zasób przetwarzanie obrazów zasobów przetwarzanie obrazów w witrynie Azure Portal, aby uzyskać klucz i punkt końcowy. Po wdrożeniu kliknij pozycję Przejdź do zasobu.
    • Klucz i punkt końcowy będą potrzebne z zasobu, który utworzysz, aby połączyć aplikację z przetwarzanie obrazów usługą. Klucz i punkt końcowy wkleisz do poniższego kodu w dalszej części tego przewodnika Szybki start.
    • Możesz użyć bezpłatnej warstwy cenowej ( ), aby wypróbować usługę, a następnie uaktualnić ją do warstwy F0 płatnej w środowisku produkcyjnym.
  • Zainstalowany program cURL

Analizowanie obrazu

Aby przeanalizować obraz pod celu przeanalizowania różnych funkcji wizualnych, wykonaj następujące kroki:

  1. Skopiuj następujące polecenie do edytora tekstów.
  2. W razie potrzeby wprowadź w poleceniu następujące zmiany:
    1. Zastąp wartość <subscriptionKey> kluczem subskrypcji.
    2. Zastąp pierwszą część adresu URL żądania ( westcentralus ) tekstem we własnym adresie URL punktu końcowego.

      Uwaga

      Nowe zasoby utworzone po 1 lipca 2019 będą używać niestandardowych nazw domen. Aby uzyskać więcej informacji i pełną listę regionalnych punktów końcowych, zobacz niestandardowe nazwy domen poddomen dla Cognitive Services.

    3. Opcjonalnie zmień adres URL obrazu w treści żądania (http://upload.wikimedia.org/wikipedia/commons/3/3c/Shaki_waterfall.jpg\) na adres URL innego obrazu do analizy.
  3. Otwórz okno wiersza polecenia.
  4. Wklej polecenie z edytora tekstów w oknie wiersza polecenia, a następnie uruchom polecenie.
curl -H "Ocp-Apim-Subscription-Key: <subscriptionKey>" -H "Content-Type: application/json" "https://westcentralus.api.cognitive.microsoft.com/vision/v3.2/analyze?visualFeatures=Categories,Description&details=Landmarks" -d "{\"url\":\"http://upload.wikimedia.org/wikipedia/commons/3/3c/Shaki_waterfall.jpg\"}"

Sprawdzanie odpowiedzi

Po pomyślnym przetworzeniu żądania zostanie zwrócona odpowiedź w formacie JSON. Przykładowa aplikacja analizuje i wyświetla pomyślną odpowiedź w oknie wiersza polecenia, podobnie jak w poniższym przykładzie:

{
  "categories": [
    {
      "name": "outdoor_water",
      "score": 0.9921875,
      "detail": {
        "landmarks": []
      }
    }
  ],
  "description": {
    "tags": [
      "nature",
      "water",
      "waterfall",
      "outdoor",
      "rock",
      "mountain",
      "rocky",
      "grass",
      "hill",
      "covered",
      "hillside",
      "standing",
      "side",
      "group",
      "walking",
      "white",
      "man",
      "large",
      "snow",
      "grazing",
      "forest",
      "slope",
      "herd",
      "river",
      "giraffe",
      "field"
    ],
    "captions": [
      {
        "text": "a large waterfall over a rocky cliff",
        "confidence": 0.916458423253597
      }
    ]
  },
  "requestId": "b6e33879-abb2-43a0-a96e-02cb5ae0b795",
  "metadata": {
    "height": 959,
    "width": 1280,
    "format": "Jpeg"
  }
}

Generowanie miniatur

Za pomocą analizy obrazów można wygenerować miniaturę z inteligentnym przycinaniem. Należy określić żądaną wysokość i szerokość, które mogą różnić się współczynnikiem proporcji od obrazu wejściowego. Analiza obrazów używa inteligentnego przycinania, aby inteligentnie identyfikować obszar zainteresowania i generować współrzędne przycinania wokół tego regionu.

Aby utworzyć i uruchomić przykład, wykonaj następujące kroki:

  1. Skopiuj następujące polecenie do edytora tekstów.

  2. W razie potrzeby wprowadź w poleceniu następujące zmiany:

    1. Zastąp wartość <subscriptionKey> kluczem subskrypcji.
    2. Zastąp wartość ścieżką i nazwą pliku, w którym chcesz <thumbnailFile> zapisać zwrócony obraz miniatury.
    3. Zastąp pierwszą część adresu URL żądania ( westcentralus ) tekstem we własnym adresie URL punktu końcowego.

      Uwaga

      Nowe zasoby utworzone po 1 lipca 2019 będą używać niestandardowych nazw domen. Aby uzyskać więcej informacji i pełną listę regionalnych punktów końcowych, zobacz niestandardowe nazwy domen poddomen dla Cognitive Services.

    4. Opcjonalnie zmień adres URL obrazu w treści żądania (https://upload.wikimedia.org/wikipedia/commons/thumb/5/56/Shorkie_Poo_Puppy.jpg/1280px-Shorkie_Poo_Puppy.jpg\) na adres URL innego obrazu do analizy, z którego chcesz wygenerować miniaturę.
  3. Otwórz okno wiersza polecenia.

  4. Wklej polecenie z edytora tekstów w oknie wiersza polecenia.

  5. Naciśnij klawisz Enter, aby uruchomić program.

    curl -H "Ocp-Apim-Subscription-Key: <subscriptionKey>" -o <thumbnailFile> -H "Content-Type: application/json" "https://westus.api.cognitive.microsoft.com/vision/v3.2/generateThumbnail?width=100&height=100&smartCropping=true" -d "{\"url\":\"https://upload.wikimedia.org/wikipedia/commons/thumb/5/56/Shorkie_Poo_Puppy.jpg/1280px-Shorkie_Poo_Puppy.jpg\"}"
    

Sprawdzanie odpowiedzi

Pomyślna odpowiedź powoduje zapisanie obrazu miniatury w pliku określonym w <thumbnailFile>. Jeśli żądanie zakończy się niepowodzeniem, w odpowiedzi zostanie wyświetlony kod błędu oraz komunikat, który umożliwi określenie, co poszło nie tak. Jeśli żądanie wydaje się zakończyć się powodzeniem, ale utworzona miniatura nie jest prawidłowym plikiem obrazu, może to oznaczać, że klucz subskrypcji jest nieprawidłowy.

Następne kroki

W tym przewodniku Szybki start opisano sposób instalowania podstawowych wywołań analizy obrazów przy użyciu interfejsu API REST. Następnie dowiedz się więcej o funkcjach interfejsu API analizowania.