Merken Sie den Termin vor! Google I / O kehrt vom 18. bis 20. Mai zurück Registrieren Sie sich jetzt
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Objektdetektoren integrieren

Objektdetektoren können identifizieren, welche von einem bekannten Satz von Objekten vorhanden sein könnten, und Informationen über ihre Positionen innerhalb des gegebenen Bildes oder eines Videostreams bereitstellen. Ein Objektdetektor ist darauf trainiert, das Vorhandensein und die Position mehrerer Objektklassen zu erfassen. Beispielsweise kann ein Modell mit Bildern trainiert werden, die verschiedene Fruchtstücke enthalten, zusammen mit einem Etikett , das die Obstklasse angibt, die sie darstellen (z. B. einen Apfel, eine Banane oder eine Erdbeere), und Daten, die angeben, wo jedes Objekt erscheint das Bild. Weitere Informationen zu Objekterkennungen finden Sie in der Einführung zur Objekterkennung .

Verwenden Sie die ObjectDetector API der Aufgabenbibliothek, um Ihre benutzerdefinierten oder vorab geschulten Objektdetektoren in Ihren Modell-Apps bereitzustellen.

Hauptmerkmale der ObjectDetector-API

  • Eingabebildverarbeitung, einschließlich Drehung, Größenänderung und Farbraumkonvertierung.

  • Beschriften Sie das Gebietsschema der Karte.

  • Bewertungsschwelle zum Filtern der Ergebnisse.

  • Top-k-Erkennungsergebnisse.

  • Zulassungsliste und Denyliste beschriften.

Unterstützte Objektdetektormodelle

Die folgenden Modelle sind garantiert mit der ObjectDetector API kompatibel.

Führen Sie Inferenz in Java aus

In der Objekterkennungsreferenz-App finden Sie ein Beispiel für die Verwendung von ObjectDetector in einer Android-App.

Schritt 1: Importieren Sie die Gradle-Abhängigkeit und andere Einstellungen

Kopieren Sie die .tflite Modelldatei in das Assets-Verzeichnis des Android-Moduls, in dem das Modell ausgeführt wird. Geben Sie an, dass die Datei nicht komprimiert werden soll, und fügen Sie die TensorFlow Lite-Bibliothek zur build.gradle Datei des Moduls build.gradle :

android {
    // Other settings

    // Specify tflite file should not be compressed for the app apk
    aaptOptions {
        noCompress "tflite"
    }

}

dependencies {
    // Other dependencies

    // Import the Task Vision Library dependency
    implementation 'org.tensorflow:tensorflow-lite-task-vision:0.1.0'
}

Schritt 2: Verwenden des Modells

// Initialization
ObjectDetectorOptions options = ObjectDetectorOptions.builder().setMaxResults(1).build();
ObjectDetector objectDetector = ObjectDetector.createFromFileAndOptions(context, modelFile, options);

// Run inference
List<Detection> results = objectDetector.detect(image);

Weitere Optionen zum Konfigurieren von ObjectDetector Sie im Quellcode und in ObjectDetector .

Führen Sie Inferenz in C ++ aus

// Initialization
ObjectDetectorOptions options;
options.mutable_model_file_with_metadata()->set_file_name(model_file);
std::unique_ptr<ObjectDetector> object_detector = ObjectDetector::CreateFromOptions(options).value();

// Run inference
const DetectionResult result = object_detector->Detect(*frame_buffer).value();

Weitere Optionen zum Konfigurieren von ObjectDetector Sie im Quellcode .

Beispielergebnisse

Hier ist ein Beispiel für die Erkennungsergebnisse von ssd mobilet v1 von TensorFlow Hub.

Hunde

Results:
 Detection #0 (red):
  Box: (x: 355, y: 133, w: 190, h: 206)
  Top-1 class:
   index       : 17
   score       : 0.73828
   class name  : dog
 Detection #1 (green):
  Box: (x: 103, y: 15, w: 138, h: 369)
  Top-1 class:
   index       : 17
   score       : 0.73047
   class name  : dog

Rendern Sie die Begrenzungsrahmen auf dem Eingabebild:

Erkennungsausgabe

Probieren Sie das einfache CLI-Demo-Tool für ObjectDetector mit Ihren eigenen Modell- und Testdaten aus.

Modellkompatibilitätsanforderungen

Die ObjectDetector API erwartet ein TFLite-Modell mit obligatorischen TFLite-Modellmetadaten .

Die kompatiblen Objektdetektormodelle sollten die folgenden Anforderungen erfüllen:

  • Eingabebildtensor: (kTfLiteUInt8 / kTfLiteFloat32)

    • Bildeingabe der Größe [batch x height x width x channels] .
    • Batch-Inferenz wird nicht unterstützt ( batch muss 1 sein).
    • Es werden nur RGB-Eingänge unterstützt ( channels müssen 3 sein).
    • Wenn der Typ kTfLiteFloat32 ist, müssen NormalizationOptions zur Eingabe-Normalisierung an die Metadaten angehängt werden.
  • Ausgangstensoren müssen die 4 Ausgänge eines DetectionPostProcess Betriebs sein, dh:

    • Ortstensor (kTfLiteFloat32)

      • Tensor der Größe [1 x num_results x 4] , wobei das innere Array Begrenzungsrahmen in der Form [oben, links, rechts, unten] darstellt.

      • BoundingBoxProperties müssen an die Metadaten angehängt werden und müssen type=BOUNDARIES und `koordinate_type = RATIO angeben.

    • Klassentensor (kTfLiteFloat32)

      • Tensor der Größe [1 x num_results] , wobei jeder Wert den ganzzahligen Index einer Klasse darstellt.

      • Optionale (aber empfohlene) Etikettenzuordnungen können als AssociatedFile-s vom Typ TENSOR_VALUE_LABELS angehängt werden, die ein Etikett pro Zeile enthalten. Die erste solche AssociatedFile (falls vorhanden) wird verwendet, um das Feld class_name der Ergebnisse zu füllen. Das display_name Feld wird aus dem AssociatedFile (falls vorhanden) , das gefüllte Gebietsschema entspricht den display_names_locale Bereich der ObjectDetectorOptions bei der Erstellung verwendet ( „en“ standardmäßig, also Englisch). Wenn keines davon verfügbar ist, wird nur das index der Ergebnisse ausgefüllt.

    • Scores Tensor (kTfLiteFloat32)

      • Tensor der Größe [1 x num_results] , wobei jeder Wert die Punktzahl des erkannten Objekts darstellt.
    • Anzahl der Detektionstensoren (kTfLiteFloat32)

      • Ganzzahl num_results als Tensor der Größe [1] .