Eine mobile Objekterkennungs-iOS-Anwendung schreiben

Erfahren Sie, wie Sie eine iOS-Objekterkennungs-App mit ONNX Runtime erstellen. Diese Anwendung erkennt kontinuierlich Objekte in den von der Rückkamera Ihres iOS-Geräts aufgenommenen Bildern und zeigt

  • die Klasse (den Typ) der erkannten Objekte an
  • die Begrenzungsrahmen der erkannten Objekte an
  • die Inferenz-Konfidenz an

Die Anwendung verwendet das vortrainierte, quantisierte MobileNet SSD V1-Modell.

Dieses Beispiel basiert stark auf Google Tensorflow Lite - Objekterkennungsbeispiele

Hier ist ein Beispiel-Screenshot der App

Screenshot showing iOS objection detection app

Inhalt

Voraussetzungen

  • Xcode 12.5 und höher (vorzugsweise die neueste Version)
  • Eine gültige Apple Developer ID
  • Ein echtes iOS-Gerät mit Kamera (vorzugsweise iPhone 12 / iPhone 12 Pro)
  • Xcode-Befehlszeilentools xcode-select --install
  • Klonen Sie das Quellcode-Repository onnxruntime-inference-examples

Vorbereitung des Modells für die mobile Bereitstellung

  1. Erstellen Sie eine separate Python-Umgebung, damit die Abhängigkeiten dieser App von anderen Python-Projekten getrennt sind.

    conda create -n ios-app Python=3.8
    conda activate ios-app
    
  2. Python-Abhängigkeiten installieren

    cd <onnxruntime-inference-example-root>/mobile/examples/object_detection/ios/ORTObjectDetection
    pip install -r ./prepare_model.requirements.txt
    

    Die Anforderungen-Datei enthält die Python-Pakete onnxruntime, tf2onnx und tensorflow, die für die Modellkonvertierung im nächsten Schritt erforderlich sind.

  3. Modell herunterladen und in ORT-Format konvertieren

    ./prepare_model.sh
    

    Das Skript

    • lädt das ursprüngliche tflite-Modell zusammen mit den Modelldaten labelmap.txt herunter
    • konvertiert es in das ONNX-Format
    • konvertiert es weiter in das ORT-Format, das vom ONNX Mobile Runtime ausgeführt werden kann

    Das Skript gibt ein Verzeichnis ModelsAndData aus, das das ORT-Format-Modell, ssd_mobilenet_v1.all.ort, und die Modelletikett-Datendatei, labelmap.txt, enthält.

    Die Konvertierung dieses Modells ist ein zweistufiger Prozess. Das ursprüngliche Modell liegt im tflite-Format vor. Dieses wird zunächst mit dem tf2onnx-Konverter in das ONNX-Format konvertiert.

    Anschließend wird das Modell mit dem onnx-zu-ort-Konverter in das ORT-Format konvertiert.

    Zusätzlich zur Generierung des Modells im ORT-Format gibt das Konvertierungsskript auch eine Operator-Konfigurationsdatei aus.

iOS-Anwendung erstellen

  1. CocoaPods installieren

    sudo gem install cocoapods
    
  2. Abhängigkeiten installieren und Workspace-Datei generieren

    cd <onnxruntime-inference-example-root>/mobile/examples/object_detection/ios/
    pod install
    

    Die Datei Podfile enthält die Abhängigkeit onnxruntime-objc, welche der Pod ist, der die Objective-C-API enthält.

    Am Ende dieses Schritts sollten Sie eine Datei namens ORTObjectDetection.xcworkspace im Verzeichnis mobile/examples/object_detection/ios sehen.

    Dieses Tutorial verwendet eines der vorkompilierten Pakete für ONNX Runtime Mobile. Sie können auch Ihre eigene benutzerdefinierte Runtime erstellen, wenn die Anforderungen Ihrer Zielumgebung dies erfordern. Um die benutzerdefinierte ONNX Runtime-Build in Ihre iOS-App einzubinden, siehe Benutzerdefiniertes iOS-Paket

  3. Projekt erstellen

    Öffnen Sie <onnxruntime-inference-example-root>/mobile/examples/object_detection/ios/ORTObjectDetection.xcworkspace in Xcode.

    Wählen Sie Ihr Development Team in den Signing & Capabilities Workspace-Einstellungen aus.

    Klicken Sie auf Product -> Build for Running, um die Anwendung zu kompilieren.

  4. Anwendung ausführen

    Verbinden Sie Ihr iOS-Gerät und führen Sie die App aus. Sie müssen Berechtigungen erteilen, damit die App die Kamera des Geräts verwenden kann.

    Sie sollten eine App mit dem ONNX Runtime-Logo auf Ihrem Gerät sehen. Wenn Sie die App ausführen, öffnet sich Ihre Kamera und führt Objekterkennung durch. «Screenshot einfügen»