Objektdetektoren einbinden

Objektdetektoren können erkennen, welche aus einer bekannten Menge von Objekten vorhanden sein könnten, und Informationen über ihre Positionen innerhalb des gegebenen Bildes oder eines Videostreams liefern. Ein Objektdetektor ist darauf trainiert, das Vorhandensein und den Standort mehrerer Klassen von Objekten zu erkennen. Zum Beispiel könnte ein Modell mit Bildern ausgebildet werden , die verschiedene Fruchtstücke enthalten, zusammen mit einem Label, der angibt , die Klasse der Frucht , die sie repräsentieren (beispielsweise ein Apfel, Banane oder eine Erdbeere), und Daten spezifizieren , wobei jedes Objekt erscheint in das Bild. Siehe die Einführung von Objekterkennung für weitere Informationen über Objektdetektoren.

Verwenden Sie die Taskbibliothek ObjectDetector API Ihre benutzerdefinierten Objektdetektoren oder vortrainierter diejenigen in Ihre mobilen Anwendungen zu implementieren.

Hauptmerkmale der ObjectDetector-API

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

  • Gebietsschema der Karte beschriften.

  • Score-Schwellenwert zum Filtern der Ergebnisse.

  • Top-k-Erkennungsergebnisse.

  • Zulassungsliste und Verweigerungsliste beschriften.

Unterstützte Objektdetektormodelle

Folgende Modelle sind garantiert mit dem kompatibel sein ObjectDetector API.

Inferenz in Java ausführen

Siehe die Objekterkennung Referenz App für ein Beispiel dafür , wie die Verwendung ObjectDetector in einem Android - App.

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

Kopieren Sie die .tflite Modell - Datei in das Vermögen Verzeichnis des Android Modul , in dem das Modell ausgeführt wird. Gibt an, dass die Datei nicht komprimiert werden soll, und fügen Sie die TensorFlow Lite - Bibliothek zu den wichtigsten Modul build.gradle Datei:

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.2.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);

Siehe den Quellcode und javadoc für mehr Optionen zu konfigurieren ObjectDetector .

Inferenz in C++ ausführen

// Initialization
ObjectDetectorOptions options;
options.mutable_base_options()->mutable_model_file()->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();

Siehe den Quellcode für mehr Optionen zu konfigurieren ObjectDetector .

Beispielergebnisse

Hier ist ein Beispiel der Erfassungsergebnisse von ssd MobileNet 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 das Eingabebild:

Erkennungsausgang

Versuchen Sie, die einfach aus CLI - Demo - Tool für ObjectDetector mit Ihren eigenen Modell und Testdaten.

Anforderungen an die Modellkompatibilität

Die ObjectDetector API erwartet einen TFLite Modell mit verbindlichen TFLite Modell Metadaten . Siehe Beispiele für das Erstellen von Metadaten für Objektdetektoren , die mit TensorFlow Lite Metadaten Writer - API .

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 erforderlich ist 1 zu sein).
    • nur RGB - Eingänge werden unterstützt ( channels erforderlich sind 3 zu sein).
    • Wenn type kTfLiteFloat32 ist, müssen NormalizationOptions an die Metadaten für die Eingabenormalisierung angehängt werden.
  • Ausgabe Tensoren müssen die 4 Ausgänge eines sein DetectionPostProcess op, das heißt:

    • Standorttensor (kTfLiteFloat32)

      • Tensor Größe [1 x num_results x 4] , wobei die innere Anordnung darstellt Begrenzungskästen in der Form [oben, links, rechts, unten].

      • BoundingBoxProperties sind erforderlich , um die Metadaten angebracht werden und müssen angeben , type=BOUNDARIES und `coordinate_type = RATIO.

    • Klassentensor (kTfLiteFloat32)

      • Tensor Größe [1 x num_results] , wobei jeder Wert des ganzzahligen Index einer Klasse repräsentiert.

      • optionale (aber empfohlene) Labelmap(s) können als AssociatedFile-s vom Typ TENSOR_VALUE_LABELS angehängt werden, die ein Label pro Zeile enthalten. Siehe das Beispiel Etikettendatei . Die erste derartige AssociatedFile (falls vorhanden) verwendet , um die zu füllen class_name Feld der Ergebnisse. 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 keine von diesen zur Verfügung stehen, wird nur der index wird Feld der Ergebnisse gefüllt werden.

    • Score-Tensor (kTfLiteFloat32)

      • Tensor Größe [1 x num_results] , wobei jeder Wert die Punktzahl des erfassten Objekt darstellt.
    • Nummer des Erkennungstensors (kTfLiteFloat32)

      • integer NUM_RESULTS als Tensor Größe [1] .