Informationen zu diesem Codelab
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:
Lerninhalte
- Vision API, Speech-to-Text, Translation API und Natural Language API verwenden
- Hier finden Sie Codebeispiele
Voraussetzungen
2. Einrichtung und Anforderungen
Umgebung im eigenen Tempo einrichten
- 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.
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.
- 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.
Wählen Sie im Drop-down-Menü APIs &Dienste aus und klicken Sie auf „Dashboard“.
Klicken Sie auf APIs und Dienste aktivieren.
Suchen Sie anschließend im Suchfeld nach „vision“. Klicken Sie auf die Google Cloud Vision API:
Klicken Sie auf Aktivieren, um die Cloud Vision API zu aktivieren.
Warten Sie einige Sekunden, bis sie aktiviert wird. Folgendes wird angezeigt, sobald es aktiviert ist:
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“
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“ oben rechts in der Cloud Shell-Leiste klicken.
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.
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
- Einen besseren Vergleich der Wörter findest du unter word2vec
- Sehen Sie sich die ausführlichen Codelabs für die Vision API, Speech-to-Text API, die Übersetzung API und die Natural Language API an.
- Cloud Vision durch Cloud Video Intelligence ersetzen
- Audio mit der Cloud Text-to-Speech API synthetisieren
- Weitere Informationen zum Hochladen von Objekten in Cloud Storage