Udostępnij za pośrednictwem


Zestaw SDK przetwarzania obrazów usług Azure Cognitive Services dla języka Python

Usługa przetwarzania obrazów oferuje deweloperom dostęp do zaawansowanych algorytmów przetwarzania obrazów i zwracania informacji. Algorytmy przetwarzania obrazów pozwalają analizować zawartość obrazu na różne sposoby, w zależności od interesujących Cię funkcji wizualnych.

Przetwarzanie obrazów pozwala aplikacjom wykonywać następujące zadania:

  • Analizowanie obrazów w celu uzyskania szczegółowych informacji
  • Wyodrębnianie tekstu z obrazów
  • Generowanie miniatur

Szukasz dodatkowej dokumentacji?

Wymagania wstępne

Jeśli potrzebujesz konta interfejsu API przetwarzania obrazów, możesz je utworzyć za pomocą poniższego polecenia interfejsu wiersza polecenia platformy Azure:

RES_REGION=westeurope
RES_GROUP=<resourcegroup-name>
ACCT_NAME=<computervision-account-name>

az cognitiveservices account create \
    --resource-group $RES_GROUP \
    --name $ACCT_NAME \
    --location $RES_REGION \
    --kind ComputerVision \
    --sku S1 \
    --yes

Instalacja

Zainstaluj zestaw SDK przetwarzania obrazów usług Azure Cognitive Services za pomocą programu pip, opcjonalnie w środowisku wirtualnym.

Konfigurowanie środowiska wirtualnego (opcjonalnie)

Chociaż nie jest to wymagane, można odizolować od siebie środowiska podstawowego systemu i zestawu Azure SDK. Umożliwia to środowisko wirtualne. Wykonaj następujące polecenia, aby skonfigurować, a następnie uruchomić środowisko wirtualne przy użyciu modułu venv, na przykład cogsrv-vision-env:

python3 -m venv cogsrv-vision-env
source cogsrv-vision-env/bin/activate

Instalacja zestawu SDK

Zainstaluj pakiet zestawu SDK przetwarzania obrazów usług Azure Cognitive Services dla języka Python za pomocą programu pip:

pip install azure-cognitiveservices-vision-computervision

Authentication

Po utworzeniu zasobu przetwarzania obrazów należy utworzyć wystąpienie obiektu klienta przy użyciu regionu i jednego z kluczy konta tego zasobu.

Użyj tych wartości podczas tworzenia wystąpienia obiektu klienta ComputerVisionClient .

Pobieranie poświadczeń

Poniższy fragment kodu interfejsu wiersza polecenia platformy Azure umożliwia wypełnienie dwóch zmiennych środowiskowych wartościami regionu i jednego z kluczy konta przetwarzania obrazów (wartości te można również znaleźć w witrynie Azure Portal). Ten fragment kodu został sformatowany dla powłoki Bash.

RES_GROUP=<resourcegroup-name>
ACCT_NAME=<computervision-account-name>

export ACCOUNT_REGION=$(az cognitiveservices account show \
    --resource-group $RES_GROUP \
    --name $ACCT_NAME \
    --query location \
    --output tsv)

export ACCOUNT_KEY=$(az cognitiveservices account keys list \
    --resource-group $RES_GROUP \
    --name $ACCT_NAME \
    --query key1 \
    --output tsv)

Tworzenie klienta

Po wypełnieniu ACCOUNT_REGION zmiennych środowiskowych i ACCOUNT_KEY można utworzyć obiekt klienta ComputerVisionClient .

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

import os
region = os.environ['ACCOUNT_REGION']
key = os.environ['ACCOUNT_KEY']

credentials = CognitiveServicesCredentials(key)
client = ComputerVisionClient(
    endpoint="https://" + region + ".api.cognitive.microsoft.com/",
    credentials=credentials
)

Użycie

Po zainicjowaniu obiektu klienta ComputerVisionClient można wykonać następujące czynności:

  • Analizowanie obrazu: możesz analizować obraz pod kątem niektórych funkcji, takich jak twarze, kolory, tagi.
  • Generowanie miniatur: utwórz niestandardowy obraz JPEG do użycia jako miniaturę oryginalnego obrazu.
  • Uzyskaj opis obrazu: Pobierz opis obrazu na podstawie jego domeny podmiotu.

Aby uzyskać więcej informacji na temat tej usługi, zobacz Czym jest przetwarzanie obrazów?.

Przykłady

Poniższe sekcje zawierają kilka fragmentów kodu, które dotyczą najbardziej typowych zadań przetwarzania obrazów, m.in:

Analizowanie obrazu

Obraz można analizować pod kątem określonych cech za pomocą operacji analyze_image. Właściwość visual_features umożliwia ustawienie typów analizy do wykonania na obrazie. Typowe wartości to VisualFeatureTypes.tags i VisualFeatureTypes.description.

url = "https://upload.wikimedia.org/wikipedia/commons/thumb/1/12/Broadway_and_Times_Square_by_night.jpg/450px-Broadway_and_Times_Square_by_night.jpg"

image_analysis = client.analyze_image(url,visual_features=[VisualFeatureTypes.tags])

for tag in image_analysis.tags:
    print(tag)

Pobieranie listy domen tematycznych

Za pomocą operacji list_models można przejrzeć domeny tematyczne używane do analizy obrazu. Te nazwy domen są używane podczas analizowania obrazu według domeny. Przykładowa domena to landmarks.

models = client.list_models()

for x in models.models_property:
    print(x)

Analizowanie obrazu według domeny

Za pomocą operacji analyze_image_by_domain można analizować obraz według domeny tematycznej. Prawidłowe nazwy domen można znaleźć na liście obsługiwanych domen tematycznych.

domain = "landmarks"
url = "https://images.pexels.com/photos/338515/pexels-photo-338515.jpeg"
language = "en"

analysis = client.analyze_image_by_domain(domain, url, language)

for landmark in analysis.result["landmarks"]:
    print(landmark["name"])
    print(landmark["confidence"])

Pobieranie tekstu opisu obrazu

Za pomocą operacji describe_image można uzyskać opis językowy obrazu. Przy użyciu właściwości max_description można pobrać kilka opisów w przypadku przeprowadzania analizy tekstu pod kątem słów kluczowych skojarzonych z obrazem. Przykładowe opisy tekstowe dla następującego obrazu to a train crossing a bridge over a body of water, a large bridge over a body of water i a train crossing a bridge over a large body of water.

domain = "landmarks"
url = "http://www.public-domain-photos.com/free-stock-photos-4/travel/san-francisco/golden-gate-bridge-in-san-francisco.jpg"
language = "en"
max_descriptions = 3

analysis = client.describe_image(url, max_descriptions, language)

for caption in analysis.captions:
    print(caption.text)
    print(caption.confidence)

Pobieranie tekstu z obrazu

Można wyodrębnić dowolny odręczny lub drukowany tekst znajdujący się na obrazie. Wymaga to dwóch wywołań zestawu SDK: read i get_read_result. Wywołanie odczytu jest asynchroniczne. W wynikach wywołania get_read_result należy sprawdzić, czy pierwsze wywołanie zostało zakończone OperationStatusCodes przed wyodrębnianiem danych tekstowych. Wyniki obejmują tekst oraz współrzędne pola ograniczenia tekstu.

# import models
from azure.cognitiveservices.vision.computervision.models import OperationStatusCodes

url = "https://github.com/Azure-Samples/cognitive-services-python-sdk-samples/raw/master/samples/vision/images/make_things_happen.jpg"
raw = True
numberOfCharsInOperationId = 36

# SDK call
rawHttpResponse = client.read(url, language="en", raw=True)

# Get ID from returned headers
operationLocation = rawHttpResponse.headers["Operation-Location"]
idLocation = len(operationLocation) - numberOfCharsInOperationId
operationId = operationLocation[idLocation:]

# SDK call
result = client.get_read_result(operationId)

# Get data
if result.status == OperationStatusCodes.succeeded:

    for line in result.analyze_result.read_results[0].lines:
        print(line.text)
        print(line.bounding_box)

Generowanie miniatury

Za pomocą operacji generate_thumbnail można wygenerować miniaturę obrazu w formacie JPG. Miniatura nie musi mieć takich samych proporcji co oryginalny obraz.

W tym przykładzie użyto pakietu Pillow, aby zapisać lokalnie nowy obraz miniatury.

from PIL import Image
import io

width = 50
height = 50
url = "http://www.public-domain-photos.com/free-stock-photos-4/travel/san-francisco/golden-gate-bridge-in-san-francisco.jpg"

thumbnail = client.generate_thumbnail(width, height, url)

for x in thumbnail:
    image = Image.open(io.BytesIO(x))

image.save('thumbnail.jpg')

Rozwiązywanie problemów

Ogólne

W przypadku interakcji z obiektem klienta ComputerVisionClient przy użyciu zestawu SDK ComputerVisionErrorResponseException języka Python klasa jest używana do zwracania błędów. Błędy zwracane przez tę usługę odpowiadają kodom stanu HTTP zwracanym dla żądań interfejsu API REST.

Na przykład jeśli spróbujesz przeprowadzić analizę obrazu za pomocą nieprawidłowego klucza, zostanie zwrócony błąd 401. W poniższym fragmencie kodu przedstawiono bezpieczną obsługę błędu opartą na przechwyceniu wyjątku i wyświetleniu dodatkowych informacji o błędzie.


domain = "landmarks"
url = "http://www.public-domain-photos.com/free-stock-photos-4/travel/san-francisco/golden-gate-bridge-in-san-francisco.jpg"
language = "en"
max_descriptions = 3

try:
    analysis = client.describe_image(url, max_descriptions, language)

    for caption in analysis.captions:
        print(caption.text)
        print(caption.confidence)
except HTTPFailure as e:
    if e.status_code == 401:
        print("Error unauthorized. Make sure your key and region are correct.")
    else:
        raise

Obsługa błędów przejściowych z logiką ponawiania próby

Podczas pracy z klientem ComputerVisionClient mogą wystąpić przejściowe błędy spowodowane przez limity szybkości wymuszone przez usługę lub inne przejściowe problemy, takie jak awarie sieci. Aby uzyskać informacje na temat obsługi takich błędów, zobacz temat Wzorzec ponawiania w przewodniku po wzorcach projektowych opartych na chmurze i powiązany temat Wzorzec wyłącznika.

Następne kroki

Więcej przykładów kodu

Kilka przykładów dotyczących zestawu SDK przetwarzania obrazów dla języka Python jest dostępnych w repozytorium GitHub zestawu SDK. Zawierają one przykładowy kod dla innych scenariuszy, często występujących podczas korzystania z przetwarzania obrazów:

Dodatkowa dokumentacja

Więcej informacji o usłudze przetwarzania obrazów można znaleźć w dokumentacji dotyczącej przetwarzania obrazów na platformie Azure dostępnej w witrynie docs.microsoft.com.