Azure Cognitive Services-SDK för visuellt innehåll och för Python

Via tjänsten Visuellt innehåll har utvecklare tillgång till avancerade algoritmer för bearbetning av bilder och returnering av information. Algoritmer för visuellt innehåll kan analysera innehållet i en bild på olika sätt beroende på vilka visuella egenskaper som du är intresserad av.

Du kan använda visuellt innehåll i ditt program för att:

  • Analysera bilder för att få information
  • Extrahera text från bilder
  • Skapa miniatyrbilder

Letar du efter mer dokumentation?

Förutsättningar

Om du behöver ett API-konto för visuellt innehåll kan du skapa ett med det här Azure CLI-kommandot:

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

Installation

Installera Azure Cognitive Services-SDK för visuellt innehåll med pip, eventuellt i en virtuell miljö.

Konfigurera en virtuell miljö (valfritt)

Även om det inte krävs, du kan behålla dina grundläggande system- och Azure SDK-miljöer isolerade från varandra om du använder en virtuell miljö. Kör följande kommandon för att konfigurera och ange sedan en virtuell miljö med venv, till exempel cogsrv-vision-env:

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

Installera SDK:n

Installera Azure Cognitive Services-SDK för visuellt innehåll för Python-paket med pip:

pip install azure-cognitiveservices-vision-computervision

Autentisering

När du skapar resursen för visuellt innehåll måste dess region och en av dess kontonycklar skapa en instans av klientobjektet.

Använd dessa värden när du skapar instansen av klientobjektet ComputerVisionClient .

Hämta autentiseringsuppgifter

Använd kodavsnittet Azure CLI nedan för att fylla i två miljövariabler med kontots region för visuellt innehåll och en av dess nycklar (du hittar även dessa värden i Azure-portalen). Kodfragmentet är formaterat för Bash-gränssnittet.

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)

Skapa en klient

När du har fyllt i ACCOUNT_REGION miljövariablerna och ACCOUNT_KEY kan du skapa klientobjektet 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
)

Användning

När du har initierat ett ComputerVisionClient-klientobjekt kan du:

  • Analysera en bild: Du kan analysera en bild för vissa funktioner som ansikten, färger och taggar.
  • Generera miniatyrer: Skapa en anpassad JPEG-bild som ska användas som en miniatyrbild av den ursprungliga bilden.
  • Hämta en beskrivning av en bild: Hämta en beskrivning av bilden baserat på dess ämnesdomän.

Mer information om den här tjänsten finns i Vad är visuellt innehåll?.

Exempel

Följande avsnitt innehåller flera kodfragment som täcker några av de vanligaste uppgifterna för visuellt innehåll, inklusive:

Analysera en bild

Du kan analysera en bild för vissa funktioner med analyze_image. Använd visual_features-egenskapen för att ange vilka typer av analyser som ska utföras på bilden. Vanliga värden är VisualFeatureTypes.tags och 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)

Hämta en ämnesdomänlista

Granska de ämnesdomäner som används för att analysera bilden med list_models. Dessa domännamn används när en bild analyseras av domänen. Ett exempel på en domän är landmarks.

models = client.list_models()

for x in models.models_property:
    print(x)

Analysera en bild efter domän

Du kan analysera en bild av ämnesdomänen med analyze_image_by_domain. Hämta listan med ämnesdomäner som stöds för att kunna använda rätt domännamn.

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"])

Hämta en textbeskrivning av en bild

Du kan få en språkbaserad textbeskrivning av en bild med describe_image. Begär flera beskrivningar med max_description-egenskapen om du genomför textanalys för nyckelord som associeras med bilden. Exempel på en textbeskrivning för följande bild är a train crossing a bridge over a body of water, a large bridge over a body of water och 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)

Hämta text från bilden

Du kan hämta handskriven eller tryckt text från en bild. Detta kräver två anrop till SDK:n: read och get_read_result. Anropet att läsa är asynkront. I resultatet av get_read_result-anropet måste du kontrollera om det första anropet slutfördes med OperationStatusCodes innan textdata extraherades. Resultatet är texten samt omgivande koordinater för textens avgränsningsfält.

# 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)

Skapa en miniatyrbild

Du kan skapa en miniatyrbild (JPG) av en bild med generate_thumbnail. Miniatyren behöver inte ha samma proportioner som den ursprungliga bilden.

I det här exemplet används paketet Pillow för att spara den nya miniatyrbilden lokalt.

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')

Felsökning

Allmänt

När du interagerar med klientobjektet ComputerVisionClient med hjälp av Python SDK ComputerVisionErrorException används klassen för att returnera fel. Fel som returneras av tjänsten motsvarar samma HTTP-statuskoder som returneras för REST API-begäranden.

Om du exempelvis försöker analysera en bild med en ogiltig nyckel, returneras felet 401. I följande kodfragment hanteras felet korrekt genom att fånga upp undantaget och visa ytterligare information om felet.


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

Hantera tillfälliga fel med återförsök

När du arbetar med ComputerVisionClient-klienten kan du stöta på tillfälliga fel som orsakas av hastighetsbegränsningar som framtvingas av tjänsten eller andra tillfälliga problem som nätverksavbrott. Information om hur du hanterar dessa typer av fel finns i Återförsöksmönster i guiden för molndesignmönster och relaterade Kretsbrytarmönster.

Nästa steg

Mer exempelkod

Flera exempel på Python-SDK:er för visuellt innehåll finns tillgängliga på GitHub-lagringsplatsen för SDK:er. De här exemplen innehåller exempelkod för fler scenarier som ofta inträffar när du arbetar med visuellt innehåll:

Ytterligare dokumentation

Mer omfattande dokumentation om tjänsten Visuellt innehåll finns i dokumentation för Azure Visuellt innehåll på docs.microsoft.com.