Vision API mit Python verwenden

1. Übersicht

5ab7829fc22b21c4.png

Mit der Vision API können Entwickler leicht Funktionen zur visuellen Erkennung in Anwendungen einbinden. Hierzu zählen die Erkennung von Bildlabels, Gesichtern und Sehenswürdigkeiten, die optische Zeichenerkennung (Optical Character Recognition, OCR) sowie die Kennzeichnung expliziter Inhalte.

In dieser Anleitung konzentrieren Sie sich auf die Verwendung der Vision API mit Python.

Aufgaben in diesem Lab

  • Umgebung einrichten
  • Labelerkennung durchführen
  • So führen Sie eine Texterkennung durch
  • Sehenswürdigkeiten erkennen
  • So führen Sie die Gesichtserkennung durch
  • So führen Sie eine Objekterkennung durch

Voraussetzungen

  • Ein Google Cloud-Projekt
  • Ein Browser wie Chrome oder Firefox
  • Vertrautheit bei der Verwendung von Python

Umfrage

Wie möchten Sie diese Anleitung nutzen?

<ph type="x-smartling-placeholder"></ph> Nur bis zum Ende lesen Lies sie dir durch und absolviere die Übungen

Wie würden Sie Ihre Erfahrung mit Python bewerten?

<ph type="x-smartling-placeholder"></ph> Neuling Mittel Kompetent

Wie würden Sie Ihre Erfahrung mit Google Cloud-Diensten bewerten?

<ph type="x-smartling-placeholder"></ph> Neuling Mittel Kompetent

2. Einrichtung und Anforderungen

Umgebung für das selbstbestimmte Lernen einrichten

  1. Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Der Projektname ist der Anzeigename für die Projektteilnehmer. Es handelt sich um eine Zeichenfolge, die von Google APIs nicht verwendet wird. Sie können sie jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich. Sie kann nach dem Festlegen nicht mehr geändert werden. Die Cloud Console generiert automatisch einen eindeutigen String. ist Ihnen meist egal, was es ist. In den meisten Codelabs musst du auf deine Projekt-ID verweisen, die üblicherweise als PROJECT_ID bezeichnet wird. Wenn Ihnen die generierte ID nicht gefällt, können Sie eine weitere zufällige ID generieren. Alternativ können Sie einen eigenen verwenden und nachsehen, ob er verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts erhalten.
  • Zur Information gibt es noch einen dritten Wert, die Projektnummer, die von manchen APIs verwendet wird. Weitere Informationen zu allen drei Werten finden Sie in der Dokumentation.
  1. Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Cloud-Ressourcen/APIs verwenden zu können. Dieses Codelab ist kostengünstig. Sie können die von Ihnen erstellten Ressourcen oder das Projekt löschen, um Ressourcen herunterzufahren, um zu vermeiden, dass über diese Anleitung hinaus Kosten anfallen. Neue Google Cloud-Nutzer haben Anspruch auf das kostenlose Testprogramm mit 300$Guthaben.

Cloud Shell starten

Sie können Google Cloud zwar von Ihrem Laptop aus der Ferne bedienen, in diesem Codelab verwenden Sie jedoch Cloud Shell, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.

Cloud Shell aktivieren

  1. Klicken Sie in der Cloud Console auf Cloud Shell aktivieren 853e55310c205094.png.

55efc1aaa7a4d3ad.png

Wenn Sie Cloud Shell zum ersten Mal starten, wird ein Zwischenbildschirm mit einer Beschreibung der Funktion angezeigt. Wenn ein Zwischenbildschirm angezeigt wird, klicken Sie auf Weiter.

9c92662c6a846a5c.png

Die Bereitstellung und Verbindung mit Cloud Shell dauert nur einen Moment.

9f0e51b578fecce5.png

Diese virtuelle Maschine verfügt über alle erforderlichen Entwicklertools. Es bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und wird in Google Cloud ausgeführt. Dadurch werden die Netzwerkleistung und die Authentifizierung erheblich verbessert. Viele, wenn nicht sogar alle Arbeiten in diesem Codelab können mit einem Browser erledigt werden.

Sobald Sie mit Cloud Shell verbunden sind, sollten Sie sehen, dass Sie authentifiziert sind und das Projekt auf Ihre Projekt-ID eingestellt ist.

  1. Führen Sie in Cloud Shell den folgenden Befehl aus, um zu prüfen, ob Sie authentifiziert sind:
gcloud auth list

Befehlsausgabe

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Führen Sie in Cloud Shell den folgenden Befehl aus, um zu prüfen, ob der gcloud-Befehl Ihr Projekt kennt:
gcloud config list project

Befehlsausgabe

[core]
project = <PROJECT_ID>

Ist dies nicht der Fall, können Sie die Einstellung mit diesem Befehl vornehmen:

gcloud config set project <PROJECT_ID>

Befehlsausgabe

Updated property [core/project].

3. Umgebung einrichten

Bevor Sie die Vision API verwenden können, führen Sie den folgenden Befehl in Cloud Shell aus, um die API zu aktivieren:

gcloud services enable vision.googleapis.com

Auf dem Bildschirm sollte Folgendes zu sehen sein:

Operation "operations/..." finished successfully.

Jetzt können Sie die Vision API verwenden.

Wechseln Sie zu Ihrem Basisverzeichnis:

cd ~

Erstellen Sie eine virtuelle Python-Umgebung, um die Abhängigkeiten zu isolieren:

virtualenv venv-vision

Aktivieren Sie die virtuelle Umgebung:

source venv-vision/bin/activate

Installieren Sie IPython und die Vision API-Clientbibliothek:

pip install ipython google-cloud-vision

Auf dem Bildschirm sollte Folgendes zu sehen sein:

...
Installing collected packages: ..., ipython, google-cloud-vision
Successfully installed ... google-cloud-vision-3.4.0 ...

Jetzt können Sie die Vision API-Clientbibliothek verwenden.

In den nächsten Schritten verwenden Sie einen interaktiven Python-Interpreter namens IPython, den Sie im vorherigen Schritt installiert haben. Starten Sie eine Sitzung, indem Sie ipython in Cloud Shell ausführen:

ipython

Auf dem Bildschirm sollte Folgendes zu sehen sein:

Python 3.9.2 (default, Feb 28 2021, 17:03:44)
Type 'copyright', 'credits' or 'license' for more information
IPython 8.12.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

Du kannst jetzt deine erste Anfrage stellen...

4. Labelerkennung ausführen

Eine der Kernfunktionen der Vision API besteht darin, Objekte oder Entitäten in einem Bild zu identifizieren. Diese wird als Labelannotation bezeichnet. Die Labelerkennung erkennt allgemeine Objekte, Orte, Aktivitäten, Tierarten, Produkte und mehr. Die Vision API nimmt ein Eingabebild und gibt die Labels zurück, die am ehesten auf dieses Bild zutreffen. Sie gibt die Labels mit der besten Übereinstimmung zusammen mit dem Konfidenzwert einer Übereinstimmung mit dem Bild zurück.

In diesem Beispiel führen Sie eine Labelerkennung für ein Bild (mit freundlicher Genehmigung von Alex Knight) von Setagaya aus, einem beliebten Bezirk in Tokio:

756f97f0b1e46c38.jpeg

Kopieren Sie den folgenden Code in Ihre IPython-Sitzung:

from typing import Sequence

from google.cloud import vision


def analyze_image_from_uri(
    image_uri: str,
    feature_types: Sequence,
) -> vision.AnnotateImageResponse:
    client = vision.ImageAnnotatorClient()

    image = vision.Image()
    image.source.image_uri = image_uri
    features = [vision.Feature(type_=feature_type) for feature_type in feature_types]
    request = vision.AnnotateImageRequest(image=image, features=features)

    response = client.annotate_image(request=request)

    return response


def print_labels(response: vision.AnnotateImageResponse):
    print("=" * 80)
    for label in response.label_annotations:
        print(
            f"{label.score:4.0%}",
            f"{label.description:5}",
            sep=" | ",
        )
        

Nehmen Sie sich einen Moment Zeit, um sich den Code anzusehen und zu sehen, wie er mit der annotate_image-Clientbibliotheksmethode ein Bild für eine Reihe bestimmter Funktionen analysiert.

Senden Sie eine Anfrage mit der Funktion LABEL_DETECTION:

image_uri = "gs://cloud-samples-data/vision/label/setagaya.jpeg"
features = [vision.Feature.Type.LABEL_DETECTION]

response = analyze_image_from_uri(image_uri, features)
print_labels(response)

Sie sollten die folgende Ausgabe erhalten:

================================================================================
 97% | Bicycle
 96% | Tire
 94% | Wheel
 91% | Automotive lighting
 89% | Infrastructure
 87% | Bicycle wheel
 86% | Mode of transport
 85% | Building
 83% | Electricity
 82% | Neighbourhood

So werden die Ergebnisse in der Online-Demo dargestellt:

2191b0425c9c148f.png

Zusammenfassung

In diesem Schritt konnten Sie eine Labelerkennung für ein Bild durchführen und die wahrscheinlichsten Labels anzeigen, die diesem Bild zugeordnet sind. Weitere Informationen zur Labelerkennung

5. Texterkennung ausführen

Bei der Texterkennung wird die optische Zeichenerkennung (Optical Character Recognition, OCR) ausgeführt. Sie kann Text in einem Bild erkennen und extrahieren und dabei eine Vielzahl von Sprachen unterstützen. Die Funktion beinhaltet auch eine automatische Spracherkennung.

In diesem Beispiel führen Sie eine Texterkennung an einem Bild eines Verkehrsschilds aus:

4dedd3fcfd9ad99b.jpeg

Kopieren Sie den folgenden Code in Ihre IPython-Sitzung:

def print_text(response: vision.AnnotateImageResponse):
    print("=" * 80)
    for annotation in response.text_annotations:
        vertices = [f"({v.x},{v.y})" for v in annotation.bounding_poly.vertices]
        print(
            f"{repr(annotation.description):42}",
            ",".join(vertices),
            sep=" | ",
        )
        

Senden Sie eine Anfrage mit der Funktion TEXT_DETECTION:

image_uri = "gs://cloud-samples-data/vision/ocr/sign.jpg"
features = [vision.Feature.Type.TEXT_DETECTION]

response = analyze_image_from_uri(image_uri, features)
print_text(response)

Sie sollten die folgende Ausgabe erhalten:

================================================================================
'WAITING?\nPLEASE\nTURN OFF\nYOUR\nENGINE' | (310,821),(2225,821),(2225,1965),(310,1965)
'WAITING'                                  | (344,821),(2025,879),(2016,1127),(335,1069)
'?'                                        | (2057,881),(2225,887),(2216,1134),(2048,1128)
'PLEASE'                                   | (1208,1230),(1895,1253),(1891,1374),(1204,1351)
'TURN'                                     | (1217,1414),(1718,1434),(1713,1558),(1212,1538)
'OFF'                                      | (1787,1437),(2133,1451),(2128,1575),(1782,1561)
'YOUR'                                     | (1211,1609),(1741,1626),(1737,1747),(1207,1731)
'ENGINE'                                   | (1213,1805),(1923,1819),(1920,1949),(1210,1935)

So werden die Ergebnisse in der Online-Demo dargestellt:

9c70fbce871c5fe5.png

Zusammenfassung

In diesem Schritt konnten Sie eine Texterkennung in einem Bild durchführen und den im Bild erkannten Text anzeigen lassen. Weitere Informationen zur Texterkennung

6. Erkennung von Sehenswürdigkeiten durchführen

Mit der Erkennung von Sehenswürdigkeiten lassen sich bekannte natürliche oder von Menschen erschaffene Strukturen in einem Bild erkennen.

In diesem Beispiel führen Sie in einem Bild (mit freundlicher Genehmigung von John Towner) vom Eiffelturm eine Erkennung von Sehenswürdigkeiten durch:

fb7801e36884b875.jpeg

Kopieren Sie den folgenden Code in Ihre IPython-Sitzung:

def print_landmarks(response: vision.AnnotateImageResponse, min_score: float = 0.5):
    print("=" * 80)
    for landmark in response.landmark_annotations:
        if landmark.score < min_score:
            continue
        vertices = [f"({v.x},{v.y})" for v in landmark.bounding_poly.vertices]
        lat_lng = landmark.locations[0].lat_lng
        print(
            f"{landmark.description:18}",
            ",".join(vertices),
            f"{lat_lng.latitude:.5f}",
            f"{lat_lng.longitude:.5f}",
            sep=" | ",
        )
        

Senden Sie eine Anfrage mit der Funktion LANDMARK_DETECTION:

image_uri = "gs://cloud-samples-data/vision/landmark/eiffel_tower.jpg"
features = [vision.Feature.Type.LANDMARK_DETECTION]

response = analyze_image_from_uri(image_uri, features)
print_landmarks(response)

Sie sollten die folgende Ausgabe erhalten:

================================================================================
Trocadéro Gardens  | (303,36),(520,36),(520,371),(303,371) | 48.86160 | 2.28928
Eiffel Tower       | (458,76),(512,76),(512,263),(458,263) | 48.85846 | 2.29435

So werden die Ergebnisse in der Online-Demo dargestellt:

2788697365670985.png

Zusammenfassung

In diesem Schritt konnten Sie Sehenswürdigkeiten auf einem Bild des Eiffelturms erkennen. Weitere Informationen zur Erkennung von Sehenswürdigkeiten

7. Gesichtserkennung durchführen

Mit der Funktion zur Gesichtsmerkmalerkennung werden mehrere Gesichter in einem Bild sowie die damit verknüpften wichtigen Gesichtsmerkmale wie emotionaler Zustand oder das Tragen von Kopfbedeckungen erkannt.

In diesem Beispiel werden Sie in der folgenden Abbildung Gesichter erkennen (mit freundlicher Genehmigung von Himanshu Singh Gurjar):

58c578ece524cf32.jpeg

Kopieren Sie den folgenden Code in Ihre IPython-Sitzung:

def print_faces(response: vision.AnnotateImageResponse):
    print("=" * 80)
    for face_number, face in enumerate(response.face_annotations, 1):
        vertices = ",".join(f"({v.x},{v.y})" for v in face.bounding_poly.vertices)
        print(f"# Face {face_number} @ {vertices}")
        print(f"Joy:     {face.joy_likelihood.name}")
        print(f"Exposed: {face.under_exposed_likelihood.name}")
        print(f"Blurred: {face.blurred_likelihood.name}")
        print("-" * 80)
        

Senden Sie eine Anfrage mit der Funktion FACE_DETECTION:

image_uri = "gs://cloud-samples-data/vision/face/faces.jpeg"
features = [vision.Feature.Type.FACE_DETECTION]

response = analyze_image_from_uri(image_uri, features)
print_faces(response)

Sie sollten die folgende Ausgabe erhalten:

================================================================================
# Face 1 @ (1077,157),(2146,157),(2146,1399),(1077,1399)
Joy:     VERY_LIKELY
Exposed: VERY_UNLIKELY
Blurred: VERY_UNLIKELY
--------------------------------------------------------------------------------
# Face 2 @ (144,1273),(793,1273),(793,1844),(144,1844)
Joy:     VERY_UNLIKELY
Exposed: VERY_UNLIKELY
Blurred: UNLIKELY
--------------------------------------------------------------------------------
# Face 3 @ (785,167),(1100,167),(1100,534),(785,534)
Joy:     VERY_UNLIKELY
Exposed: LIKELY
Blurred: VERY_LIKELY
--------------------------------------------------------------------------------

So werden die Ergebnisse in der Online-Demo dargestellt:

cbb7f59299651b83.png

Zusammenfassung

In diesem Schritt konnten Sie die Gesichtserkennung durchführen. Weitere Informationen zur Gesichtserkennung

8. Objekterkennung durchführen

In diesem Beispiel führen Sie eine Objekterkennung auf demselben vorherigen Bild von Setagaya durch (mit freundlicher Genehmigung von Alex Knight):

756f97f0b1e46c38.jpeg

Kopieren Sie den folgenden Code in Ihre IPython-Sitzung:

def print_objects(response: vision.AnnotateImageResponse):
    print("=" * 80)
    for obj in response.localized_object_annotations:
        nvertices = obj.bounding_poly.normalized_vertices
        print(
            f"{obj.score:4.0%}",
            f"{obj.name:15}",
            f"{obj.mid:10}",
            ",".join(f"({v.x:.1f},{v.y:.1f})" for v in nvertices),
            sep=" | ",
        )
        

Senden Sie eine Anfrage mit der Funktion OBJECT_LOCALIZATION:

image_uri = "gs://cloud-samples-data/vision/label/setagaya.jpeg"
features = [vision.Feature.Type.OBJECT_LOCALIZATION]

response = analyze_image_from_uri(image_uri, features)
print_objects(response)

Sie sollten die folgende Ausgabe erhalten:

================================================================================
 93% | Bicycle         | /m/0199g   | (0.6,0.6),(0.8,0.6),(0.8,0.9),(0.6,0.9)
 92% | Bicycle wheel   | /m/01bqk0  | (0.6,0.7),(0.7,0.7),(0.7,0.9),(0.6,0.9)
 91% | Tire            | /m/0h9mv   | (0.7,0.7),(0.8,0.7),(0.8,1.0),(0.7,1.0)
 75% | Bicycle         | /m/0199g   | (0.3,0.6),(0.4,0.6),(0.4,0.7),(0.3,0.7)
 51% | Tire            | /m/0h9mv   | (0.3,0.6),(0.4,0.6),(0.4,0.7),(0.3,0.7)

So werden die Ergebnisse in der Online-Demo dargestellt:

e1c2ca803d874a6b.png

Zusammenfassung

In diesem Schritt konnten Sie eine Objekterkennung durchführen. Weitere Informationen zur Objekterkennung

9. Mehrere Funktionen

Sie haben gesehen, wie Sie einige Features der Vision API verwenden. Es gibt jedoch noch viel mehr. Sie können mehrere Features in einer einzigen Anfrage anfordern.

Mit den folgenden Anfragen erhalten Sie alle Informationen auf einmal:

image_uri = "gs://..."
features = [
    vision.Feature.Type.OBJECT_LOCALIZATION,
    vision.Feature.Type.FACE_DETECTION,
    vision.Feature.Type.LANDMARK_DETECTION,
    vision.Feature.Type.LOGO_DETECTION,
    vision.Feature.Type.LABEL_DETECTION,
    vision.Feature.Type.TEXT_DETECTION,
    vision.Feature.Type.DOCUMENT_TEXT_DETECTION,
    vision.Feature.Type.SAFE_SEARCH_DETECTION,
    vision.Feature.Type.IMAGE_PROPERTIES,
    vision.Feature.Type.CROP_HINTS,
    vision.Feature.Type.WEB_DETECTION,
    vision.Feature.Type.PRODUCT_SEARCH,
    vision.Feature.Type.OBJECT_LOCALIZATION,
]

# response = analyze_image_from_uri(image_uri, features)

Es gibt noch mehr Möglichkeiten, z. B. die Erkennung eines Stapels von Bildern synchron oder asynchron durchzuführen. Anleitungen ansehen

10. Glückwunsch!

5ab7829fc22b21c4.png

Sie haben gelernt, wie Sie die Vision API mit Python verwenden, und haben einige Bilderkennungsfunktionen getestet.

Bereinigen

So bereinigen Sie die Entwicklungsumgebung in Cloud Shell:

  • Wenn Sie sich noch in Ihrer IPython-Sitzung befinden, gehen Sie zurück zur Shell: exit
  • Verwendung der virtuellen Python-Umgebung beenden: deactivate
  • Löschen Sie den Ordner der virtuellen Umgebung: cd ~ ; rm -rf ./venv-vision

So löschen Sie Ihr Google Cloud-Projekt in Cloud Shell:

  • Rufen Sie Ihre aktuelle Projekt-ID ab: PROJECT_ID=$(gcloud config get-value core/project)
  • Achten Sie darauf, dass dies das Projekt ist, das Sie löschen möchten: echo $PROJECT_ID
  • Projekt löschen: gcloud projects delete $PROJECT_ID

Weitere Informationen

Lizenz

Dieser Text ist mit einer Creative Commons Attribution 2.0 Generic License lizenziert.