APIs für maschinelles Lernen einbinden

APIs für maschinelles Lernen einbinden

Informationen zu diesem Codelab

subjectZuletzt aktualisiert: Juni 30, 2021
account_circleVerfasst von Torry Yang

1. Übersicht

In diesem Codelab lernen Sie schnell einige APIs für maschinelles Lernen kennen. Sie verwenden Folgendes:

  • Cloud Vision: Den Inhalt eines Bilds verstehen
  • Cloud Speech-to-Text, um Audio in Text zu transkribieren
  • Cloud Translation: Übersetzung eines beliebigen Strings in eine unterstützte Sprache
  • Cloud Natural Language, um Informationen aus Text zu extrahieren

Inhalte, die Sie erstellen werden

Sie erstellen eine Pipeline, in der eine Audioaufnahme mit einem Bild verglichen und ihre Relevanz miteinander ermittelt wird. Hier eine Vorschau auf Ihre Ziele:

e6a57e5def315116.jpeg

Lerninhalte

  • Vision API, Speech-to-Text, Translation API und Natural Language API verwenden
  • Hier finden Sie Codebeispiele

Voraussetzungen

  • Ein Browser, z. B. Chrome oder Firefox
  • Grundkenntnisse in Python

2. Einrichtung und Anforderungen

Umgebung im eigenen Tempo einrichten

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

96a9c957bc475304.png

b9a10ebdf5b5a448

a1e3c01a38fa61c2

Notieren Sie sich die Projekt-ID, also den projektübergreifend nur einmal vorkommenden Namen eines Google Cloud-Projekts. Der oben angegebene Name ist bereits vergeben und kann leider nicht mehr verwendet werden. In diesem Codelab wird sie später als PROJECT_ID bezeichnet.

  1. Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Google Cloud-Ressourcen zu nutzen.

Dieses Codelab dauert natürlich nicht viel. Führen Sie die Schritte im Abschnitt „Bereinigen“ aus, in der Sie aufgefordert werden, Ressourcen herunterzufahren, damit Sie über diese Anleitung hinaus keine Kosten in Rechnung stellen. Neue Nutzer von Google Cloud nehmen am kostenlosen Testzeitraum von 300$ teil.

APIs aktivieren

Klicken Sie auf diesen Link, um alle erforderlichen APIs zu aktivieren. Wenn Sie dies getan haben, können Sie die Anleitung zur Authentifizierung ignorieren. Dies geschieht gleich. Alternativ können Sie jede API auch einzeln aktivieren. Klicken Sie hierzu links oben auf das Menüsymbol.

2bfc27ef9ba2ec7d

Wählen Sie im Drop-down-Menü APIs &Dienste aus und klicken Sie auf „Dashboard“.

a9546a22581facd5

Klicken Sie auf APIs und Dienste aktivieren.

eae7ff043d13a35

Suchen Sie anschließend im Suchfeld nach „vision“. Klicken Sie auf die Google Cloud Vision API:

a47893f36372ae2f

Klicken Sie auf Aktivieren, um die Cloud Vision API zu aktivieren.

a24fd082a22030ad.png

Warten Sie einige Sekunden, bis sie aktiviert wird. Folgendes wird angezeigt, sobald es aktiviert ist:

633e58cbde1b74c6.png

Wiederholen Sie die Schritte zum Aktivieren von Cloud Speech, Cloud Translation und Cloud Natural Language APIs.

Cloud Shell

Google Cloud Shell ist eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird. Diese Debian-basierte virtuelle Maschine ist mit allen Entwicklertools ausgestattet, die Sie benötigen (gcloud, bq, git und andere). Sie enthält ein Basisverzeichnis mit 5 GB Speicherplatz. Wir verwenden Cloud Shell, um unsere Anfrage an die APIs für Machine Learning zu erstellen.

Wenn Sie Cloud Shell verwenden möchten, klicken Sie rechts oben in der Kopfzeile auf das Symbol „Google Cloud Shell aktivieren“ Screenshot 2015-06-08 um 17.30.32 Uhr.png

24ef50000ca737a4

Im unteren Bereich der Konsole wird ein neuer Frame für die Cloud Shell-Sitzung geöffnet, in dem eine Befehlszeilen-Eingabeaufforderung angezeigt wird. Warten Sie, bis die Eingabeaufforderung „user@project:~$“ erscheint.

Optional: Code-Editor

Je nachdem, wie vertraut Sie mit der Befehlszeile sind, können Sie auf das Symbol „Code-Editor starten“ b885bf07bc1b02e5.png oben rechts in der Cloud Shell-Leiste klicken.

de00be9278baf7b8

Dienstkonto

Für die Authentifizierung ist ein Dienstkonto erforderlich. Ersetzen Sie [NAME] durch den Namen des gewünschten Dienstkontos und führen Sie den folgenden Befehl in Cloud Shell aus:

gcloud iam service-accounts create [NAME]

Jetzt müssen Sie einen Schlüssel generieren, um dieses Dienstkonto zu nutzen. Ersetzen Sie [FILE_NAME] durch den gewünschten Schlüsselnamen, [NAME] durch den Dienstkontonamen oben und [PROJECT_ID] durch die ID Ihres Projekts. Mit dem folgenden Befehl wird der Schlüssel erstellt und als [FILE_NAME].json heruntergeladen:

gcloud iam service-accounts keys create [FILE_NAME].json --iam-account [NAME]@[PROJECT_ID].iam.gserviceaccount.com

Um das Dienstkonto zu verwenden, müssen Sie die Variable GOOGLE_application_CREDENTIALS auf den Pfad des Schlüssels festlegen. Führen Sie dazu den folgenden Befehl aus, nachdem Sie [PATH_TO_FILE] und [FILE_NAME] ersetzt haben:

export GOOGLE_APPLICATION_CREDENTIALS=[PATH_TO_FILE]/[FILE_NAME].json

3. Cloud Vision

Python-Client

Sie benötigen den Python-Client für Cloud Vision. Geben Sie Folgendes in Cloud Shell ein, um die Installation zu starten:

pip install --upgrade google-cloud-vision --user

Jetzt ausprobieren

Sehen Sie sich die Codebeispiele für die Cloud Vision API an. Wir möchten herausfinden, was in einem bestimmten Bild enthalten ist. detect.py scheint hierzu nützlich zu sein. Lassen Sie uns das holen. Eine Möglichkeit besteht darin, den Inhalt von Detect.py zu kopieren, eine neue Datei in Cloud Shell mit dem Namen vision.py zu erstellen und den gesamten Code in vision.py einzufügen. Sie können dies manuell im Cloud Shell-Code-Editor oder mit dem folgenden curl-Befehl in Cloud Shell tun:

curl https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/vision/cloud-client/detect/detect.py -o vision.py

Verwenden Sie anschließend die API, indem Sie in Cloud Shell Folgendes ausführen:

python vision.py labels-uri gs://cloud-samples-data/ml-api-codelab/birds.jpg

Sie sollten eine Ausgabe über Vögel und Straußen sehen, da es sich dabei um das analysierte Bild handelt: https://storage.googleapis.com/cloud-samples-data/ml-api-codelab/birds.jpg

Was ist da los?

Sie haben zwei Argumente an vision.py übergeben:

  • Mit labels-uri wird die Funktion detect_labels_uri() ausgewählt, die ausgeführt werden soll.
  • gs://cloud-samples-data/ml-api-codelab/birds.jpg ist der Speicherort eines Bildes in Google Cloud Storage und wird als uri an detect_labels_uri() übergeben.

Werfen wir einen näheren Blick auf detect_labels_uri(). Notieren Sie sich die zusätzlichen Kommentare, die eingefügt wurden.

def detect_labels_uri(uri):
   
"""Detects labels in the file located in Google Cloud Storage or on the
    Web."""

   
# relevant import from above
   
# from google.cloud import vision

   
# create ImageAnnotatorClient object
    client
= vision.ImageAnnotatorClient()

   
# create Image object
    image
= vision.types.Image()

   
# specify location of image
    image
.source.image_uri = uri

   
# get label_detection response by passing image to client
    response
= client.label_detection(image=image)

   
# get label_annotations portion of response
    labels
= response.label_annotations
   
print('Labels:')

   
for label in labels:
       
# print the label descriptions
       
print(label.description)

4. Cloud Speech-to-Text

Python-Client

Sie benötigen den Python-Client für Cloud Speech-to-Text. Geben Sie Folgendes in Cloud Shell ein, um die Installation zu starten:

sudo pip install --upgrade google-cloud-speech

Jetzt ausprobieren

Rufen Sie die Codebeispiele für Cloud Speech-to-Text auf. Wir möchten Sprachaudio transkribieren. transcribe.py ist ein guter Ausgangspunkt. Kopieren Sie den Inhalt von tranwrite.py, erstellen Sie in Cloud Shell eine neue Datei mit dem Namen speech2text.py und fügen Sie den gesamten Code in speech2text.py ein. Sie können dies manuell im Cloud Shell-Code-Editor oder mit dem folgenden curl-Befehl in Cloud Shell tun:

curl https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/speech/cloud-client/transcribe.py -o speech2text.py

Verwenden Sie anschließend die API, indem Sie in Cloud Shell Folgendes ausführen:

python speech2text.py gs://cloud-samples-data/ml-api-codelab/tr-ostrich.wav

Es sollten Fehler über die falsche Codierung und Stichprobenherzfrequenz vorliegen. Gehe zu transcribe_gcs()im Code und lösche die encoding- und sampe_hertz_rate-Einstellungen aus RecognitionConfig(). Ändern Sie den Sprachcode, während Sie „tr-TR'“ verwenden, da tr-ostrich.wav eine Sprachaufnahme auf Türkisch ist.

config = types.RecognitionConfig(language_code='tr-TR')

Führen Sie jetzt speech2text.py aus. Die Ausgabe sollte ein türkischer Text sein, da er dies analysiert hat: https://storage.googleapis.com/cloud-samples-data/ml-api-codelab/tr-ostrich.wav

Worum geht es?

Sie haben gs://cloud-samples-data/ml-api-codelab/tr-ostrich.wav, den Speicherort einer Audiodatei in Google Cloud Storage, an speech2text.py übergeben. Diese wird als gcs_uri an transcribe_uri() übergeben.

Sehen wir uns unsere geänderte transcribe_uri() genauer an.

def transcribe_gcs(gcs_uri):
   
"""Transcribes the audio file specified by the gcs_uri."""

   
from google.cloud import speech
   
# enums no longer used
   
# from google.cloud.speech import enums
   
from google.cloud.speech import types

   
# create ImageAnnotatorClient object
    client
= speech.SpeechClient()

   
# specify location of speech
    audio
= types.RecognitionAudio(uri=gcs_uri)

   
# set language to Turkish
   
# removed encoding and sample_rate_hertz
    config
= types.RecognitionConfig(language_code='tr-TR')

   
# get response by passing config and audio settings to client
    response
= client.recognize(config, audio)

   
# Each result is for a consecutive portion of the audio. Iterate through
   
# them to get the transcripts for the entire audio file.
   
for result in response.results:
       
# The first alternative is the most likely one for this portion.
       
# get the transcript of the first alternative
       
print(u'Transcript: {}'.format(result.alternatives[0].transcript))

5. Cloud Translation

Python-Client

Sie benötigen den Python-Client für Cloud Translation. Geben Sie Folgendes in Cloud Shell ein, um die Installation zu starten:

sudo pip install --upgrade google-cloud-translate

Jetzt ausprobieren

Sehen wir uns jetzt die Codebeispiele für die Cloud Translation an. Für dieses Codelab möchten wir Text ins Englische übersetzen. snippets.py sieht aus, als wollten wir. Kopieren Sie die Datei snippets.py, erstellen Sie in Cloud Shell eine neue Datei mit dem Namen translate.py und fügen Sie den gesamten Code in translate.py ein. Sie können dies manuell im Cloud Shell-Code-Editor oder mit dem folgenden curl-Befehl in Cloud Shell tun:

curl https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/translate/cloud-client/snippets.py -o translate.py

Verwenden Sie anschließend die API, indem Sie in Cloud Shell Folgendes ausführen:

python translate.py translate-text en '你有沒有帶外套'

Die Übersetzung sollte „ Erhalte eine Jacke“.

Worum geht es?

Sie haben drei Argumente an translate.py übergeben:

  • Mit translate-text wird die Funktion translate_text() ausgewählt, die ausgeführt werden soll.
  • en wird als Ziel an translate_text() übergeben und dient dazu, die Sprache anzugeben, in die übersetzt werden soll.
  • ‘你helloworld沒帶外套' ist der zu übersetzende String und wird als Text an translate_text() weitergegeben.

Werfen wir einen näheren Blick auf translate_text(). Notiere die hinzugefügten Kommentare.

def translate_text(target, text):
   
"""Translates text into the target language.

    Target must be an ISO 639-1 language code.
    See https://g.co/cloud/translate/v2/translate-reference#supported_languages
    """

   
# relevant imports from above
   
# from google.cloud import translate
   
# import six

   
# create Client object
    translate_client
= translate.Client()

   
# decode text if it's a binary type
   
# six is a python 2 and 3 compatibility library
   
if isinstance(text, six.binary_type):
        text
= text.decode('utf-8')

   
# get translation result by passing text and target language to client
   
# Text can also be a sequence of strings, in which case this method
   
# will return a sequence of results for each text.
    result
= translate_client.translate(text, target_language=target)

   
# print original text, translated text and detected original language
   
print(u'Text: {}'.format(result['input']))
   
print(u'Translation: {}'.format(result['translatedText']))
   
print(u'Detected source language: {}'.format(
        result
['detectedSourceLanguage']))

6. Cloud Natural Language

Python-Client

Sie benötigen den Python-Client für Cloud Natural Language. Geben Sie Folgendes in Cloud Shell ein, um die Installation zu starten:

sudo pip install --upgrade google-cloud-language

Jetzt ausprobieren

Zum Schluss sehen wir uns die Codebeispiele für die Cloud Natural Language API an. Wir möchten Entitäten im Text erkennen. snippets.py enthält offenbar Code, der das tut. Kopieren Sie die Datei snippets.py, erstellen Sie in Cloud Shell eine neue Datei mit dem Namen natural_language.py und fügen Sie den gesamten Code in natural_language.py ein. Sie können dies manuell im Cloud Shell-Code-Editor oder mit dem folgenden curl-Befehl in Cloud Shell tun:

curl https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/language/cloud-client/v1/snippets.py -o natural_language.py

Verwenden Sie anschließend die API, indem Sie in Cloud Shell Folgendes ausführen:

python natural_language.py entities-text 'where did you leave my bike'

Die API sollte „Motorrad“ als Entität identifizieren. Entitäten können eigene Substantive sein (Personen des öffentlichen Lebens, Sehenswürdigkeiten usw.) oder gängige Substantive (z. B. Restaurant oder Stadion).

Worum geht es?

Sie haben zwei Argumente an natural_language.py übergeben:

  • Mit entitys-text wird die Funktion entities_text() ausgewählt
  • wo haben Sie mein Fahrrad verlassen? ist der String, der auf Entitäten untersucht werden soll und als Text an entities_text() weitergegeben wird.

Werfen wir einen näheren Blick auf entities_text(). Sehen Sie sich die neu eingefügten Kommentare an.

def entities_text(text):
   
"""Detects entities in the text."""
   
# relevant imports from above
   
# from google.cloud import language
   
# from google.cloud.language import enums
   
# from google.cloud.language import types
   
# import six

   
# create LanguageServiceClient object
    client
= language.LanguageServiceClient()

   
# decode text if it's a binary type
   
# six is a python 2 and 3 compatibility library
   
if isinstance(text, six.binary_type):
        text
= text.decode('utf-8')

   
# Instantiates a plain text document.
    document
= types.Document(
        content
=text,
        type
=enums.Document.Type.PLAIN_TEXT)

   
# Detects entities in the document. You can also analyze HTML with:
   
#   document.type == enums.Document.Type.HTML
    entities
= client.analyze_entities(document).entities

   
# entity types from enums.Entity.Type
    entity_type
= ('UNKNOWN', 'PERSON', 'LOCATION', 'ORGANIZATION',
                   
'EVENT', 'WORK_OF_ART', 'CONSUMER_GOOD', 'OTHER')

   
# print information for each entity found
   
for entity in entities:
       
print('=' * 20)
       
print(u'{:<16}: {}'.format('name', entity.name))
       
print(u'{:<16}: {}'.format('type', entity_type[entity.type]))
       
print(u'{:<16}: {}'.format('metadata', entity.metadata))
       
print(u'{:<16}: {}'.format('salience', entity.salience))
       
print(u'{:<16}: {}'.format('wikipedia_url',
              entity
.metadata.get('wikipedia_url', '-')))

7. Einbindung

Lass uns daran erinnern, was du bauen willst.

e6a57e5def315116.jpeg

Jetzt können Sie alles zusammenfügen. Erstelle eine solution.py-Datei. Kopiere detect_labels_uri(), transcribe_gcs(), translate_text() und entities_text() aus den vorherigen Schritten und füge sie in solution.py ein.

Anweisungen importieren

Entfernen Sie den Kommentar und verschieben Sie die Importanweisungen nach oben. Es werden sowohl speech.types als auch language.types importiert. Das wird zu einem Konflikt führen. Lassen Sie sie also einfach entfernen und jedes einzelne Vorkommen von types in transcribe_gcs() bzw. entities_text() in speech.types bzw. language.types ändern. Ihnen sollte noch Folgendes angezeigt werden:

from google.cloud import vision
from google.cloud import speech
from google.cloud import translate
from google.cloud import language
from google.cloud.language import enums
import six

Ergebnisse zurückgeben

Statt die Ergebnisse zu drucken, lassen Sie die Funktionen die Ergebnisse zurückgeben. Das Passwort sollte etwa so aussehen:

# import statements

def detect_labels_uri(uri):
   
# code

   
# we only need the label descriptions
    label_descriptions
= []
   
for label in labels:
        label_descriptions
.append(label.description)

   
return label_descriptions

def transcribe_gcs(gcs_uri):
   
# code

   
# naive assumption that audio file is short
   
return response.results[0].alternatives[0].transcript

def translate_text(target, text):
   
# code

   
# only interested in translated text
   
return result['translatedText']

def entities_text(text):
   
# code

   
# we only need the entity names
    entity_names
= []
   
for entity in entities:
        entity_names
.append(entity.name)

   
return entity_names

Funktionen verwenden

Nach all der harten Arbeit können Sie diese Funktionen aufrufen. Nur zu. Beispiel:

def compare_audio_to_image(audio, image):
   
"""Checks whether a speech audio is relevant to an image."""

   
# speech audio -> text
    transcription
= transcribe_gcs(audio)

   
# text of any language -> english text
    translation
= translate_text('en', transcription)

   
# text -> entities
    entities
= entities_text(translation)

   
# image -> labels
    labels
= detect_labels_uri(image)

   
# naive check for whether entities intersect with labels
    has_match
= False
   
for entity in entities:
       
if entity in labels:
           
# print result for each match
           
print('The audio and image both contain: {}'.format(entity))
            has_match
= True

   
# print if there are no matches
   
if not has_match:
       
print('The audio and image do not appear to be related.')

Mehrere Sprachen unterstützen

Türkisch wurde zuvor in transcribe_gcs() hartcodiert. Lass uns das ändern, damit die Sprache von compare_audio_to_image() spezifisch ist. Folgende Änderungen sind erforderlich:

def transcribe_gcs(language, gcs_uri):
   
...
    config
= speech.types.RecognitionConfig(language_code=language)
def compare_audio_to_image(language, audio, image):
    transcription
= transcribe_gcs(language, audio)

Jetzt ausprobieren

Den endgültigen Code finden Sie in solutions.py dieses GitHub-Repositorys. Hier ein Beispiel:

curl https://raw.githubusercontent.com/googlecodelabs/integrating-ml-apis/master/solution.py -O

Die Version auf GitHub enthält „argparse“, was folgende Befehle über die Befehlszeile ermöglicht:

python solution.py tr-TR gs://cloud-samples-data/ml-api-codelab/tr-ball.wav gs://cloud-samples-data/ml-api-codelab/football.jpg

Der Code sollte für jedes gefundene Element Folgendes enthalten: „Audio“ und „Bild“ enthalten beide: „"“

Bonus: Weitere Informationen

Hier sind einige weitere Speicherorte von Audio- und Bilddateien.

8. Glückwunsch!

Sie haben vier APIs für maschinelles Lernen eingesetzt, um zu ermitteln, ob ein Sprachbeispiel über das bereitgestellte Bild spricht. Dies ist nur der Anfang, denn es gibt noch viele weitere Möglichkeiten, diese Pipeline zu verbessern!

Behandelte Themen

  • Anfragen an die Cloud Vision API senden
  • Anfragen an die Cloud Speech-to-Text API senden
  • Anfragen an die Cloud Translation API senden
  • Anfragen an die Cloud Natural Language API senden
  • Alle oben genannten APIs zusammen verwenden

Nächste Schritte