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
- Azure-abonnement: maak een gratis account
- Azure Computer Vision-resource
- Python 3.6+
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
- Lijst met onderwerpdomeinen ophalen
- Een afbeelding op domein analyseren
- Tekstbeschrijving van een afbeelding ophalen
- Handgeschreven tekst uit een afbeelding ophalen
- Miniatuur genereren
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.
Azure SDK for Python