Delen via


Azure Cognitive Services Computer Vision SDK voor Python

De Computer Vision-service geeft ontwikkelaars toegang tot geavanceerde algoritmen voor het verwerken van afbeeldingen en het retourneren van informatie. Met Computer Vision-algoritmen kunt u de inhoud van een afbeelding op verschillende manieren analyseren, afhankelijk van de visuele kenmerken waarin u geïnteresseerd bent.

U kunt Computer Vision in uw toepassing voor het volgende gebruiken:

  • Analyseren van afbeeldingen voor inzicht
  • Extraheren van tekst uit afbeeldingen
  • Miniaturen genereren

Zoekt u meer documentatie?

Vereisten

Als u een Computer Vision-API-account nodig hebt, kunt u er met deze Azure CLI-opdracht een maken:

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

Installatie

Installeer de Azure Cognitive Services Computer Vision SDK met pip, eventueel in een virtuele omgeving.

Een virtuele omgeving configureren (optioneel)

Hoewel dit niet is vereist, kunt u met een virtuele omgeving uw basissysteem en Azure SDK-omgevingen van elkaar geïsoleerd houden. Voer de volgende opdrachten uit om een virtuele omgeving te configureren en vervolgens te openen met venv, bijvoorbeeld cogsrv-vision-env:

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

De SDK installeren

Installeer het pakket voor de Azure Cognitive Services Computer Vision SDK voor Python met pip:

pip install azure-cognitiveservices-vision-computervision

Verificatie

Zodra u uw Computer Vision-resource hebt gemaakt, hebt u de regio en een van de accountsleutels nodig om een instantie van het clientobject te maken.

Gebruik deze waarden wanneer u het exemplaar van het ComputerVisionClient-clientobject maakt.

Referenties ophalen

Gebruik het Azure CLI-codefragment hieronder om twee omgevingsvariabelen in te vullen met de regio en een van de sleutels van het Computer Vision-account (u vindt deze waarden ook in de Azure-portal). Het codefragment is geformatteerd voor de Bash-shell.

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)

Client maken

Zodra u de ACCOUNT_REGION omgevingsvariabelen en ACCOUNT_KEY hebt ingevuld, kunt u het ComputerVisionClient-clientobject maken.

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
)

Gebruik

Nadat u een ComputerVisionClient-clientobject hebt geïnitialiseerd, kunt u het volgende doen:

  • Een afbeelding analyseren: u kunt een afbeelding analyseren op bepaalde functies, zoals gezichten, kleuren en tags.
  • Miniaturen genereren: maak een aangepaste JPEG-afbeelding om te gebruiken als miniatuur van de oorspronkelijke afbeelding.
  • Beschrijving van een afbeelding ophalen: een beschrijving van de afbeelding ophalen op basis van het onderwerpdomein.

Zie Wat is Computer Vision? voor meer informatie over deze service.

Voorbeelden

In de volgende gedeelten vindt u enkele codefragmenten die betrekking hebben op een aantal van de meest algemene Computer Vision-taken, met inbegrip van:

Een afbeelding analyseren

U kunt een afbeelding analyseren op bepaalde kenmerken met analyze_image. Gebruik de eigenschap visual_features om de soorten analyse in te stellen die u op de afbeelding wilt uitvoeren. Veelvoorkomende waarden zijn VisualFeatureTypes.tags en 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)

Lijst met onderwerpdomeinen ophalen

Bekijk de onderwerpdomeinen die zijn gebruikt om uw afbeelding te analyseren met list_models. Deze domeinnamen worden gebruikt bij het analyseren van een afbeelding op domein. Een voorbeeld van een domein is landmarks.

models = client.list_models()

for x in models.models_property:
    print(x)

Een afbeelding op domein analyseren

U kunt een afbeelding op onderwerpdomein analyseren met analyze_image_by_domain. Haal de lijst met ondersteunde onderwerpdomeinen op zodat u de juiste domeinnaam kunt gebruiken.

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

Tekstbeschrijving van een afbeelding ophalen

U kunt een op taal gebaseerde tekstbeschrijving van een afbeelding ophalen met describe_image. Vraag verschillende beschrijvingen op met de eigenschap max_description als u een tekstanalyse uitvoert voor trefwoorden die aan de afbeelding zijn gekoppeld. Voorbeelden van een tekstbeschrijving voor de volgende afbeelding zijn onder meer a train crossing a bridge over a body of water, a large bridge over a body of water en 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)

Tekst uit een afbeelding ophalen

U kunt handgeschreven of gedrukte tekst uit een afbeelding ophalen. Hiervoor zijn twee aanroepen aan de SDK nodig: read en get_read_result. De aanroep om te lezen is asynchroon. In de resultaten van de get_read_result aanroep moet u controleren of de eerste aanroep is voltooid met OperationStatusCodes voordat u de tekstgegevens ophaalt. De resultaten bevatten de tekst en de coördinaten van het begrenzingsvak voor de tekst.

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

Miniatuur genereren

U kunt een miniatuur (JPG) van een afbeelding genereren met generate_thumbnail. De miniatuur hoeft niet dezelfde verhoudingen te hebben als de oorspronkelijke afbeelding.

In dit voorbeeld wordt het pakket Pillow gebruikt om de nieuwe miniatuurafbeelding lokaal op te slaan.

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

Problemen oplossen

Algemeen

Wanneer u met het ComputerVisionClient-clientobject communiceert met behulp van de Python SDK, wordt de ComputerVisionErrorException klasse gebruikt om fouten te retourneren. Fouten die door de service worden geretourneerd, komen overeen met de HTTP-statuscodes die voor REST API-aanvragen worden geretourneerd.

Als u bijvoorbeeld probeert een afbeelding met een ongeldige sleutel te analyseren, wordt de fout 401 geretourneerd. In het volgende codefragment wordt de fout mooi verwerkt door de uitzondering vast te leggen en aanvullende informatie over de fout weer te geven.


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

Tijdelijke fouten verwerken met nieuwe pogingen

Tijdens het werken met de ComputerVisionClient-client kunnen tijdelijke fouten optreden die worden veroorzaakt door frequentielimieten die worden afgedwongen door de service, of andere tijdelijke problemen, zoals netwerkstoringen. Raadpleeg voor meer informatie over het verwerken van dit soort fouten Patroon voor opnieuw proberen in de handleiding Cloudontwerppatronen en de verwante Patroon Circuitonderbreker.

Volgende stappen

Meer voorbeeldcode

Enkele voorbeelden voor de Computer Vision SDK voor Python zijn beschikbaar in de GitHub-opslagplaats van de SDK. Deze voorbeelden bieden voorbeeldcode voor aanvullende scenario's die vaak voorkomen bij het werken met Computer Vision:

Aanvullende documentatie

Bekijk de Azure Computer Vision-documentatie op docs.microsoft.com voor uitgebreidere documentatie over de Computer Vision-service.