Azure Cognitive Services: SDK für maschinelles Sehen für Python

Über den Dienst für maschinelles Sehen haben Entwickler Zugriff auf erweiterte Algorithmen für die Bildverarbeitung und die Rückgabe von Informationen. Algorithmen für maschinelles Sehen analysieren den Inhalt eines Bilds auf unterschiedliche Weise – je nachdem, für welche visuellen Merkmale Sie sich interessieren.

Maschinelles Sehen kann in Ihrer Anwendung für Folgendes verwendet werden:

  • Analysieren von Bildern, um Erkenntnisse zu gewinnen
  • Extrahieren von Text aus Bildern
  • Generieren von Miniaturansichten

Weitere Dokumentationen:

Voraussetzungen

Wenn Sie ein Konto für die Maschinelles Sehen-API benötigen, können Sie über die Azure-Befehlszeilenschnittstelle mithilfe des folgenden Befehls ein entsprechendes Konto erstellen:

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

Installieren Sie das Azure Cognitive Services SDK für maschinelles Sehen mit pip – optional in einer virtuellen Umgebung.

Konfigurieren einer virtuellen Umgebung (optional)

Mit einer virtuellen Umgebung können Sie die Umgebung Ihres Grundsystems und die Umgebung des Azure SDK auf Wunsch voneinander isolieren. Dies ist jedoch nicht zwingend erforderlich. Führen Sie die folgenden Befehle aus, um mit venv eine virtuelle Umgebung zu konfigurieren (beispielsweise cogsrv-vision-env):

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

Installieren des SDK

Installieren Sie das Azure Cognitive Services SDK für maschinelles Sehen für Python mit pip:

pip install azure-cognitiveservices-vision-computervision

Authentifizierung

Nachdem Sie die Ressource für maschinelles Sehen erstellt haben, benötigen Sie ihre Region und einen ihrer Kontoschlüssel, um das Clientobjekt zu instanziieren.

Diese Werte werden beim Erstellen der Instanz des Clientobjekts ComputerVisionClient verwendet.

Abrufen von Anmeldeinformationen

Verwenden Sie den folgenden Codeausschnitt für die Azure-Befehlszeilenschnittstelle, um zwei Umgebungsvariablen mit der Region und einem der Schlüssel des Kontos für maschinelles Sehen aufzufüllen. (Diese Werte stehen auch im Azure-Portal zur Verfügung.) Der Ausschnitt ist für die Bash-Shell formatiert.

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)

Erstellen des Clients

Nachdem Sie die ACCOUNT_REGION Umgebungsvariablen und ACCOUNT_KEY ausgefüllt haben, können Sie das ComputerVisionClient-Clientobjekt erstellen.

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
)

Verbrauch

Nachdem Sie ein ComputerVisionClient-Clientobjekt initialisiert haben, können Sie:

  • Analysieren eines Bilds: Sie können ein Bild auf bestimmte Merkmale wie Gesichter, Farben und Tags analysieren.
  • Generieren von Miniaturansichten: Erstellen Sie ein benutzerdefiniertes JPEG-Bild, das als Miniaturansicht des Originalbilds verwendet werden soll.
  • Beschreibung eines Bilds abrufen: Rufen Sie eine Beschreibung des Bilds basierend auf seiner Betreffdomäne ab.

Weitere Informationen zu diesem Dienst finden Sie unter Worum handelt es sich bei maschinellem Sehen?.

Beispiele

Die folgenden Abschnitte enthalten einige Codeausschnitte für gängige Aufgaben im Zusammenhang mit maschinellem Sehen:

Analysieren von Bildern

Mit analyze_image können verschiedene Aspekte eines Bilds analysiert werden. Verwenden Sie die Eigenschaft visual_features, um festzulegen, welche Analysen für das Bild ausgeführt werden sollen. Gängige Werte sind VisualFeatureTypes.tags und 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)

Abrufen der Motivdomänenliste

Verwenden Sie list_models, um die für die Bildanalyse verwendeten Motivdomänen zu überprüfen. Diese Domänennamen werden bei der domänenbasierten Bildanalyse verwendet. Ein Beispiel für eine Domäne wäre etwa landmarks.

models = client.list_models()

for x in models.models_property:
    print(x)

Analysieren eines Bilds nach Domäne

Mit analyze_image_by_domain können Sie eine Bildanalyse auf der Grundlage der Motivdomäne durchführen. Rufen Sie die Liste unterstützter Motivdomänen ab, um den passenden Domänennamen zu verwenden.

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

Generieren einer Bildbeschreibung in Textform

Mit describe_image können Sie eine sprachbasierte Textbeschreibung eines Bilds generieren. Mit der Eigenschaft max_description können Sie mehrere Beschreibungen anfordern, wenn Sie eine Textanalyse für Schlüsselwörter im Zusammenhang mit dem Bild durchführen. Textbeschreibungsbeispiele für das folgende Bild wären etwa a train crossing a bridge over a body of water, a large bridge over a body of water und 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)

Extrahieren von Text aus einem Bild

Sie können handschriftlichen oder gedruckten Text aus einem Bild extrahieren. Dazu sind zwei SDK-Aufrufe erforderlich: read und get_read_result. Der Aufruf zum Lesen ist asynchron. In den Ergebnissen des get_read_result-Aufrufs müssen Sie überprüfen, ob der erste Aufruf mit OperationStatusCodes abgeschlossen wurde, bevor Sie die Textdaten extrahieren. Die Ergebnisse enthalten den Text sowie die Koordinaten des umgebenden Rechtecks für den Text.

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

Generieren einer Miniaturansicht

Mit generate_thumbnail können Sie eine Miniaturansicht (JPG) eines Bilds generieren. Die Proportionen der Miniaturansicht können von den Proportionen des ursprünglichen Bilds abweichen.

Im folgenden Beispiel wird zum lokalen Speichern der neuen Miniaturansicht das Pillow-Paket verwendet.

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

Problembehandlung

Allgemein

Wenn Sie bei Verwendung des Python SDK mit dem Clientobjekt ComputerVisionClient interagieren, wird für die Rückgabe von Fehlern die Klasse ComputerVisionErrorException verwendet. Die von dem Dienst zurückgegebenen Fehler entsprechen den HTTP-Statuscodes, die für REST-API-Anforderungen zurückgegeben werden.

Wenn Sie also beispielsweise versuchen, ein Bild mit einem ungültigen Schlüssel zu analysieren, wird ein Fehler vom Typ 401 zurückgegeben. Im folgenden Codeausschnitt wird der Fehler ordnungsgemäß behandelt, indem die Ausnahme abgefangen und zusätzliche Informationen zum Fehler angezeigt werden.


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

Behandeln von vorübergehenden Fehlern mit Wiederholungen

Bei der Verwendung des ComputerVisionClient-Clients kann es zu vorübergehenden Fehlern kommen. Diese können auf durch den Dienst erzwungene Ratenlimits oder auf andere vorübergehende Probleme (etwa auf Netzwerkausfälle) zurückzuführen sein. Informationen zur Behandlung solcher Fehler finden Sie im Leitfaden für Cloudentwurfsmuster unter Wiederholungsmuster sowie unter dem dazugehörigen Trennschalter-Muster.

Nächste Schritte

Weiterer Beispielcode

Im GitHub-Repository des SDK stehen zahlreiche Beispiele für das Computer Vision Python SDK zur Verfügung. Diese Beispiele enthalten Beispielcode für weitere gängige Szenarien im Zusammenhang mit maschinellem Sehen:

Zusätzliche Dokumentation

Eine ausführlichere Dokumentation zum Dienst für maschinelles Sehen finden Sie auf „docs.microsoft.com“ in der Azure-Dokumentation für maschinelles Sehen.