Vertex AI Vision-Bewegungsfilter

1. Zielsetzungen

Übersicht

In diesem Codelab geht es um das Erstellen einer End-to-End-Anwendung von Vertex AI Vision, um das Senden von Videos mit der Bewegungsfilterfunktion zu demonstrieren. In dieser Anleitung werden die verschiedenen Parameter in der Konfiguration des Bewegungsfilters erläutert:

  • Empfindlichkeit der Bewegungserkennung
  • Minimale Ereignisdauer
  • Lookback-Window
  • Abkühlzeit
  • Bewegungserkennungsbereich

Aufgaben in diesem Lab

  • Videos für das Streaming aufnehmen
  • Verschiedene Funktionen des Bewegungsfilters und ihre Verwendung
  • Statistiken des Bewegungsfilters überprüfen
  • So kannst du die Einstellung für dein Video anpassen

2. Vorbereitung

  1. Wählen Sie in der Google Cloud Console auf der Seite für die Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines. Hinweis: Wenn Sie die Ressourcen, die Sie in diesem Verfahren erstellen, nicht behalten möchten, erstellen Sie ein Projekt, anstatt ein vorhandenes Projekt auszuwählen. Wenn Sie fertig sind, können Sie das Projekt löschen und dadurch alle damit verknüpften Ressourcen entfernen. Zur Projektauswahl
  2. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. Hier erfahren Sie, wie Sie prüfen, ob die Abrechnung für ein Projekt aktiviert ist.
  3. Aktivieren Sie die Compute Engine API und die Vision AI API. APIs aktivieren

Dienstkonto erstellen:

  1. Wechseln Sie in der Google Cloud Console zur Seite Dienstkonto erstellen. Zur Seite „Dienstkonto erstellen“
  2. Wählen Sie Ihr Projekt aus.
  3. Geben Sie im Feld Dienstkontoname einen Namen ein. In der Google Cloud Console wird das Feld Dienstkonto-ID auf Grundlage dieses Namens ausgefüllt. Geben Sie im Feld Beschreibung des Dienstkontos eine Beschreibung ein. Beispiel: Dienstkonto für Kurzanleitung.
  4. Klicken Sie auf Erstellen und fortfahren.
  5. Weisen Sie Ihrem Dienstkonto die folgenden Rollen zu, um Zugriff auf Ihr Projekt zu ermöglichen: Vision AI > Vision AI-Bearbeiter, Compute Engine > Compute-Instanzadministrator (Beta), Speicher > Storage Object Viewer † Wählen Sie aus der Liste Rolle auswählen eine Rolle aus. Wenn Sie weitere Rollen hinzufügen möchten, klicken Sie auf Weitere Rolle hinzufügen und fügen Sie jede weitere Rolle hinzu. Hinweis: Das Feld Rolle wirkt sich darauf aus, auf welche Ressourcen in Ihrem Projekt das Dienstkonto zugreifen kann. Sie können diese Rollen später widerrufen oder zusätzliche Rollen erteilen. In Produktionsumgebungen sollten Sie die Rollen „Inhaber“, „Bearbeiter“ oder „Betrachter“ nicht zuweisen. Weisen Sie stattdessen eine vordefinierte Rolle oder benutzerdefinierte Rolle zu, die Ihren Anforderungen entspricht.
  6. Klicken Sie auf Weiter.
  7. Klicken Sie auf Fertig, um das Erstellen des Dienstkontos abzuschließen. Schließen Sie das Browserfenster nicht. Sie verwenden es in der nächsten Aufgabe.

Erstellen Sie einen Dienstkontoschlüssel:

  1. Klicken Sie in der Google Cloud Console auf die E-Mail-Adresse für das Dienstkonto, das Sie erstellt haben.
  2. Klicken Sie auf Schlüssel.
  3. Klicken Sie auf Schlüssel hinzufügen und dann auf Neuen Schlüssel erstellen.
  4. Klicken Sie auf Erstellen. Daraufhin wird eine JSON-Schlüsseldatei auf Ihren Computer heruntergeladen.
  5. Klicken Sie auf Schließen.
  6. Installieren und initialisieren Sie die Google Cloud CLI.

† Rolle nur erforderlich, wenn Sie eine Beispielvideodatei aus einem Cloud Storage-Bucket kopieren.

3. Bewegungsfilter

Mit dem Bewegungsfilter werden Bewegungen und Produktvideosegmente erfasst, die Bewegungsereignisse enthalten. Über die Anpassung der Bewegungsempfindlichkeit, der Mindestereignislänge, des Lookback-Windows, der Wartezeit und des Bewegungserkennungsbereichs können Nutzer die Filterbasis nach Bedarf konfigurieren.

Konfiguration des Bewegungsfilters

Der Bewegungsfilter kann in fünf Konfigurationen angepasst werden.

  1. Bewegungsempfindlichkeit: Hier legen Sie fest, wie empfindlich eine Bewegung ausgelöst werden soll.
  2. Minimale Ereignislänge: Die Mindestlänge, die ein Bewegungsereignis erfasst wird.
  3. Lookback-Window: Gibt an, wie lange die Videoaufzeichnung starten soll, bevor ein Bewegungsereignis erkannt wird.
  4. Wartezeit: Nach dem Ende eines Bewegungsereignisses findet eine Wartezeit mit der festgelegten Dauer statt. Während der Wartezeit werden keine Bewegungsereignisse ausgelöst.
  5. Bewegungserkennungsbereich: vom Nutzer konfigurierter Bereich, um festzulegen, wo die Bewegungserkennung ausgeführt werden soll. (wird im späteren Abschnitt ausführlicher erläutert)

Bewegungsempfindlichkeit

Verwenden Sie das Flag motion_detection_sensitivity im vaictl-Befehl.String
. Standardmedium. Sie haben die Wahl zwischen „Niedrig“, „Mittel“ und „Hoch“.

Je höher die Empfindlichkeit der Bewegungserkennung ist, desto empfindlicher reagieren sie auf Geräusche und kleinere Bewegungen. Diese Einstellung wird für Einstellungen empfohlen, in denen sich kleinere bewegliche Objekte (z. B. Personen aus der Ferne) und eine stabile Beleuchtung befinden.

Andererseits ist die niedrige Empfindlichkeit weniger empfindlich auf Lichtstörungen. Diese Einstellung ist ideal, wenn es bei der Beleuchtung zu Störungen kommt, z. B. in einer Umgebung im Freien, und für eine geringere Videoqualität, da hier möglicherweise mehr Geräusche zu hören sind. Da diese Einstellung die aggressivste Filterung ist, könnten Bewegungen von kleinen Objekten ignoriert werden.

Minimale Ereignisdauer

Verwenden Sie das Flag min_event_length_in_seconds im vaictl-Befehl.
Ganzzahl. Standardeinstellung: 10 Sekunden. Der Wert kann zwischen 0 und 3.600 Sekunden liegen.

Die Mindestdauer von Videos mit Bewegungsereignissen, die geparst werden, nachdem ein Bewegungsereignissegment im Frame erkannt wurde.

Lookback-Window

Verwenden Sie das Flag look_back_window_in_seconds im vaictl-Befehl.
Ganzzahl. Standardeinstellung: 3 Sekunden. Der Wert kann zwischen 0 und 3.600 Sekunden liegen.

Das Lookback-Window ist die Dauer im Cache, bevor ein Bewegungsereignis erkannt wird. Das ist hilfreich, wenn wir wissen möchten, was einige Sekunden vor dem Erkennen von Bewegungsereignissen im Frame passiert.

Wartezeit

Verwenden Sie das Flag cool_down_period_in_seconds im vaictl-Befehl.
Ganzzahl. Standardeinstellung: 300 Sekunden. Der Wert kann zwischen 0 und 3.600 Sekunden liegen.

Die Abkühlzeit ist die Dauer, über die die Bewegungserkennung pausiert wird, nachdem ein Bewegungsereignis erfasst wurde. Während der Wartezeit werden keine Berechnungen zur Bewegungserkennung durchgeführt.

4. Beispiel für einfachen Bewegungsfilter

Vaictl SDK-Handbuch

Mit dem folgenden Befehl können Sie die vaictl-manuelle Eingabe für einen Eingabestream mit Bewegungsfilter prüfen.

vaictl send video-file applying motion-filter -h

Beispielvideo vorbereiten

  1. Mit dem folgenden gsutil cp-Befehl können Sie ein Beispielvideo kopieren. Ersetzen Sie die folgende Variable:
  • SOURCE: Der Speicherort einer zu verwendenden Videodatei. Sie können Ihre eigene Videodateiquelle (z. B. gs://BUCKET_NAME/FILENAME.mp4) oder das Beispielvideo (gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4)(Video mit Personen und Fahrzeugen, Quelle) verwenden.
export SOURCE=gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4
gsutil cp $SOURCE .

Umgebungsvariablen vorbereiten

Legen Sie die folgenden Umgebungsvariablen fest, um die bereitgestellte Befehlsvorlage zu verwenden.

vaictl-Variablen

  • PROJECT_ID: Ihre Google Cloud-Projekt-ID.
  • LOCATION_ID: Ihre Standort-ID. Beispiel: us-central1. Weitere Informationen finden Sie unter Cloud-Standorte.
  • LOCAL_FILE: Der Dateiname einer lokalen Videodatei. Beispiel: street_vehicles_people.mp4.
  • –loop-Flag: Optional. Führt Dateidaten in eine Schleife ein, um das Streaming zu simulieren.
export PROJECT_ID=<Your Google Cloud project ID>
export LOCATION_ID=us-central1

Variablen für Bewegungsfilter

  • MOTION_SENSITIVITY: Wie empfindlich die Bewegungserkennung ist.
  • MIN_EVENT_LENGTH: Mindestlänge der Bewegungsereignisse.
  • LOOK_BACK_WINDOW: Die Dauer, die vor der ersten Bewegung bei einem Bewegungsereignis erfasst werden soll.
  • COOL_DOWN_PERIOD: Der Zeitraum, in dem die Bewegungserkennung pausiert wird, nachdem ein Bewegungsereignis erfasst wurde.
export MOTION_SENSITIVITY=<low or medium or high>
export MIN_EVENT_LENGTH=<0-3600>
export LOOK_BACK_WINDOW=<0-3600>
export COOL_DOWN_PERIOD=<0-3600>

Befehl für Bewegungsfilter vorbereiten

Es gibt zwei Möglichkeiten, den Bewegungsfilter mit dem Eingabestream zu verwenden. Die erste Option besteht darin, die Bewegungsereignisse an einen Stream in der Cloud Console zu senden. Die zweite Möglichkeit besteht darin, die Bewegungsereignisse an den lokalen Speicher zu senden.

Ergebnisse an die Cloud Console senden

Sie können vaictl verwenden, um die ausgegebenen Videodaten an die Cloud Console zu streamen. Aktivieren Sie zuerst die Vision AI API in der Cloud Console.

Neuen Stream registrieren

  1. Klicken Sie in Vertex AI Vision im linken Bereich auf den Tab „Streams“.
  2. Klicken Sie auf „Registrieren“.
  3. Geben Sie in den Namen des Streams motion-detection-stream ein.
  4. Geben Sie in der Region "us-central1" ein.
  5. Auf „Registrieren“ klicken

Ergebnisse werden an Stream gesendet

Mit diesem Befehl wird eine Videodatei in einen Stream gestreamt. Mit dem Flag „-loop“ wird das Video so lange in den Stream aufgenommen, bis du den Befehl beendest. Wir führen diesen Befehl als Hintergrundjob aus, damit das Streaming fortgesetzt wird.

Fügen Sie nohup am Anfang und & am Ende hinzu, um den Job als Hintergrundjob zu erstellen.

INPUT_VIDEO=street_vehicles_people.mp4

vaictl -p $PROJECT \
       -l $LOCATION_ID \
       -c application-cluster-0 \
       --service-endpoint visionai.googleapis.com \
  send video-file  --file-path $INPUT_VIDEO \
  applying motion-filter
         --motion-sensitivity=$MOTION_SENSITIVITY \
         --min-event-length=$MIN_EVENT_LENGTH \
         --lookback-length=$LOOK_BACK_WINDOW \
         --cooldown-length=$COOL_DOWN_PERIOD \
  to streams motion-detection-stream --loop

Nach dem Start der vaictl-Datenaufnahme kann es etwa 100 Sekunden dauern, bis das Video im Dashboard angezeigt wird.

Sobald die Streamaufnahme verfügbar ist, können Sie den Videofeed im Vertex AI Vision-Dashboard auf dem Tab Streams ansehen. Wählen Sie dazu den Trafficstream-Stream aus.

Zum Tab „Streams“

Ergebnisse an lokalen Speicher senden

Mit diesem Befehl wird eine Videodatei in einen Stream gestreamt.

Fügen Sie nohup am Anfang und & am Ende hinzu, um den Job als Hintergrundjob zu erstellen.

INPUT_VIDEO=street_vehicles_people.mp4
OUTPUT_PATH=<path_to_store_motion_events_on_local_disk>

nohup vaictl -p $PROJECT \
             -l $LOCATION_ID \
             -c application-cluster-0 \
             --service-endpoint visionai.googleapis.com \
  send video-file  --file-path $INPUT_VIDEO \
  applying motion-filter
         --motion-sensitivity=$MOTION_SENSITIVITY \
         --min-event-length=$MIN_EVENT_LENGTH \
         --lookback-length=$LOOK_BACK_WINDOW \
         --cooldown-length=$COOL_DOWN_PERIOD \
  to mp4file --mp4-file-path=$OUTPUT_PATH --loop

5. Bewegungserkennungsbereich

In diesem Abschnitt erfahren Sie mehr über die Verwendung und Konfiguration des Bereichs für die Bewegungserkennung. Der Bereich dient dazu, die Bewegungserkennung zu verbessern, indem Bewegungen aus Bereichen ausgeblendet werden, die dich nicht interessieren.

Es gibt zwei Arten von Bewegungserkennungsbereichen: (1) positive Bereiche, in denen die Bewegungserkennung nur in dem entsprechenden Bereich ausgeführt wird: (2) Negativbereiche, in denen die Bewegungserkennung Bewegungen im angegebenen Bereich ignoriert.

Zonenanmerkung

Verwenden Sie das Flag zone_annotation im vaictl-Befehl, um Koordinaten für Zonenpolygone einzugeben.String
. Standardeinstellung für Zonenanmerkung leer.

Die Zonenanmerkung ist eine vom Nutzer eingegebene Zeichenfolge, die die Zonen im Frame angibt, die der Nutzer aus- oder einblenden möchte. Um die Zone zu annotieren, muss der Benutzer die Bildkoordinaten der x- und der y-Achse für jeden Knoten in der Zone angeben. Eine Zone muss mindestens drei Knoten haben, um ein Polygon zu bilden. Ein Frame kann mehrere Bereiche umfassen. Wenn sich die Zonen überschneiden, wird der von beiden Zonen abgedeckte Bereich dennoch abgedeckt.

Für Zonenanmerkungen gilt eine bestimmte Eingabesyntax.

  • Wenn Sie einen einzelnen Knoten kennzeichnen möchten, verwenden Sie :, um die x- und y-Achse einer Bildkoordination zu verbinden. Beispielsweise wird der Knoten (0,0) in der oberen linken Ecke als 0:0 bezeichnet.
  • Verwenden Sie ;, um die Knoten zu verbinden, um alle Knoten in einer einzelnen Zone zu kennzeichnen. Für eine Zone mit den Knoten (0,0), (100,0), (100,100) und (0, 100) wird die Zone beispielsweise als 0:0;100:0;100:100;0:100 angegeben. Geben Sie die Knoten immer als Verbindungsknoten nebeneinander an. Die Reihenfolge kann sowohl im Uhrzeigersinn als auch gegen den Uhrzeigersinn erfolgen.

Bewegungserkennungsbereich – quadratisch*Eine quadratische Zone mit vier Knoten.

Bewegungserkennungsbereich – Dreieck*Eine Dreieckszone mit drei Knoten.

  • Verwende -, um mehrere Zonen in einem einzelnen Frame zu kennzeichnen. Wenn wir beispielsweise sowohl (0,0), (100,0), (100,100), (0,100) als auch (120,120), (110,150), (200,160) eingeben möchten, lautet die Annotation der Eingabezone 0:0;100:0;100:100;0:100-120:120;110:150;200:160.

Bewegungserkennungsbereich – ein Frame mit zwei Bereichen*Zwei Zonen innerhalb eines Frames.

Zum Ermitteln von Koordinaten aus Bildern sind einige Online-Tools verfügbar, mit denen Sie die Koordinaten ermitteln können. Ein Beispiel finden Sie unter Wolfram – Koordinaten aus Bild abrufen.

Annotierte Zone ausschließen

Verwenden Sie das Flag exclude_annotated_zone im vaictl-Befehl, um die Bewegungserkennung innerhalb oder außerhalb einer Zone zu konfigurieren.
: Boolescher Wert. Standardeinstellung: false.

„Annotierten Bereich ausschließen“ ist eine boolesche Eingabe vom Nutzer, die angibt, ob der Nutzer den mit Anmerkungen versehenen Bereich bei der Bewegungserkennung ausschließen möchte.

  • Wenn der Wert auf true gesetzt ist, fungiert die mit Anmerkungen versehene Zone als negative Zone. Bewegungen in den mit Anmerkungen versehenen Bereichen werden nicht erkannt.

Bewegungserkennungsbereich – Ausschlussoption *Die Bewegungserkennung darf nur außerhalb der Eingabebereiche ausgeführt werden.

  • Wird die Richtlinie auf „false“ gesetzt, fungiert der Bereich als positiver Bereich, in dem die Bewegungserkennung den Schwerpunkt legt.

Bewegungserkennungsbereich – Option einschließen *Bewegungserkennung nur in den Eingabebereichen ausführen.

6. Beispiel für einen Bewegungsfilter mit Bewegungserkennungsbereich

In diesem Beispiel verwenden wir ein Video, bei dem sich im Vordergrund ständig ein Baum bewegt. Bei der regulären Bewegungsfiltereinstellung erzeugt das Video nur ein Bewegungsereignis mit der Dauer des Originalvideos, da der Bewegungsfilter den sich bewegenden Baum als "sich ständig im Video bewegen" erfasst. Mithilfe des Bewegungserkennungsbereichs können wir jedoch die Bewegung des Baumes ordnungsgemäß verbergen und die Bewegungen von Autos und Fußgängern im Blick behalten.

Videovorbereitung

Das Beispielvideo (gs://cloud-samples-data/vertex-ai-vision/dynamic-background-fall.mp4) enthält Bäume, Autos und Fußgänger von www.changedetection.net.

Videonachweis: N. Goyette, P.-M. Jodoin, F. Porikli, J. Konrad und P. Ishwar, changedetection.net: A new change detect benchmark dataset in der Proc. IEEE Workshop on Change Detection (CDW-2012), CVPR-2012, Providence, Rhode, 16.–21. Juni, 2012

Vorbereitung von Umgebungsvariablen

Variablen des Google Cloud-Projekts.

export PROJECT_ID=<Your Google Cloud project ID>
export LOCATION_ID=us-central1
export LOCAL_FILE=street_vehicles_people.mp4

Grundlegende Konfiguration des Bewegungsfilters.

export MOTION_SENSITIVITY=<low or medium or high>
export MIN_EVENT_LENGTH=<0-3600>
export LOOK_BACK_WINDOW=<0-3600>
export COOL_DOWN_PERIOD=<0-3600>

Konfiguration der Bewegungserkennungszone.

Wählen Sie eine der folgenden Optionen aus, um mehr über die verschiedenen Nutzungsarten des Bewegungserkennungsbereichs zu erfahren.

Schließen Sie den Baum für die Bewegungserkennung aus.

export ZONE_ANNOTATION="0:0;680:0;660:70;380:320;100:150"
export EXCLUDE_ANNOTATED_ZONE=true

Bewegungserkennungsbereich: Die Bewegungserkennung wird aus dem mit Anmerkungen versehenen Bereich im Beispielvideo ausgeschlossen. *Die Bewegungserkennung darf nur außerhalb der Eingabebereiche ausgeführt werden.

Die Bewegungserkennung auf die Straße fokussieren.

export ZONE_ANNOTATION="0:300;780:300;780:480;0:480"
export EXCLUDE_ANNOTATED_ZONE=false

Bewegungserkennungsbereich: Führen Sie die Bewegungserkennung aus dem mit Anmerkungen versehenen Bereich aus dem Beispielvideo aus *Die Bewegungserkennung darf nur außerhalb der Eingabebereiche ausgeführt werden.

Videostream mit Bewegungsfilter senden

Bewegungsereignisse an die Cloud Console senden

Sie können vaictl verwenden, um die ausgegebenen Videodaten an die Cloud Console zu streamen. Aktivieren Sie zuerst die Vision AI API in der Cloud Console.

Neuen Stream registrieren

  1. Klicken Sie in Vertex AI Vision im linken Bereich auf den Tab „Streams“.
  2. Klicken Sie auf „Registrieren“.
  3. Geben Sie in den Namen des Streams motion-detection-stream ein.
  4. Geben Sie in der Region "us-central1" ein.
  5. Auf „Registrieren“ klicken

Ergebnisse werden an Stream gesendet

Mit diesem Befehl wird eine Videodatei in einen Stream gestreamt. Mit dem Flag „-loop“ wird das Video so lange in den Stream aufgenommen, bis du den Befehl beendest. Wir führen diesen Befehl als Hintergrundjob aus, damit das Streaming fortgesetzt wird.

Fügen Sie nohup am Anfang und & am Ende hinzu, um den Job als Hintergrundjob zu erstellen.

vaictl -p $PROJECT \
       -l $LOCATION_ID \
       -c application-cluster-0 \
       --service-endpoint visionai.googleapis.com \
  send video-file  --file-path $INPUT_VIDEO \
  applying motion-filter
         --motion-sensitivity=$MOTION_SENSITIVITY \
         --min-event-length=$MIN_EVENT_LENGTH \
         --lookback-length=$LOOK_BACK_WINDOW \
         --cooldown-length=$COOL_DOWN_PERIOD \
         --zone_annotation=ZONE_ANNOTATION \
         --exclude_annotated_zone=$EXCLUDE_ANNOTATED_ZONE \
  to streams motion-detection-stream --loop

Nach dem Start der vaictl-Datenaufnahme kann es etwa 100 Sekunden dauern, bis das Video im Dashboard angezeigt wird.

Sobald die Streamaufnahme verfügbar ist, können Sie den Videofeed im Vertex AI Vision-Dashboard auf dem Tab Streams ansehen. Wählen Sie dazu den Trafficstream-Stream aus.

Zum Tab „Streams“

Ergebnisse an lokalen Speicher senden

Mit diesem Befehl wird eine Videodatei in einen Stream gestreamt. Mit dem Flag „-loop“ wird das Video so lange in den Stream aufgenommen, bis du den Befehl beendest. Wir führen diesen Befehl als Hintergrundjob aus, damit das Streaming fortgesetzt wird.

Fügen Sie nohup am Anfang und & am Ende hinzu, um den Job als Hintergrundjob zu erstellen.

OUTPUT_PATH=<path_to_store_motion_events>

vaictl -p $PROJECT \
       -l $LOCATION_ID \
       -c application-cluster-0 \
       --service-endpoint visionai.googleapis.com \
  send video-file  --file-path $INPUT_VIDEO \
  applying motion-filter
         --motion-sensitivity=$MOTION_SENSITIVITY \
         --min-event-length=$MIN_EVENT_LENGTH \
         --lookback-length=$LOOK_BACK_WINDOW \
         --cooldown-length=$COOL_DOWN_PERIOD \
         --zone_annotation=$ZONE_ANNOTATION \
         --exclude_annotated_zone=$EXCLUDE_ANNOTATED_ZONE \
  to mp4file --mp4-file-path=$OUTPUT_PATH --loop

7. Glückwunsch

Sie haben das Lab abgeschlossen.

Aufräumen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, beenden Sie den Vorgang des vaictl SDK über die Befehlszeile mit ctrl + z.

Ressourcen

https://cloud.google.com/vision-ai/docs/overview

https://cloud.google.com/vision-ai/docs/motion-filtering-model

https://cloud.google.com/vision-ai/docs/create-manage-streams

Feedback

Klicken Sie hier, um Feedback zu geben.

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 nützlich war dieses Codelab?

<ph type="x-smartling-placeholder"></ph> Sehr nützlich Nützlich