[PYTHON] Echtzeit-Bilderkennung auf Mobilgeräten mithilfe des TensorFlow-Lernmodells

Der Titel ist wie ein Papier geschrieben, aber der Punkt ist, dass die TensorFlow-Seite besagt, dass er auf Android / iOS ausgeführt werden kann, also habe ich so etwas versucht. Als ich es ausprobierte, konnte ich es sowohl auf Android als auch auf iOS erstellen, daher möchte ich die Prozedur usw. schreiben.

Android

Zuerst aus der Android-Version. https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android Grundsätzlich folgen Sie hier. Nach der Erstellung wird eine TF-Erkennung basierend auf der TF-Klassifizierung und der skalierbaren Objekterkennung mithilfe von Deep Neural Networks mithilfe des Inception-Modells von Google erstellt. Außerdem wurde anscheinend auch TF Stylize implementiert, das den Stil konvertiert ... Also habe ich versucht, in der folgenden Umgebung erneut zu erstellen.

Erstellen Sie TensorFlow

Zunächst werde ich die neueste Version klonen. Es scheint, dass TensorFlow jetzt r0.12 war.

git clone --recurse-submodules https://github.com/tensorflow/tensorflow.git

Installieren Sie dann das Build Tool Bazel.

brew install bazel

Sie benötigen ein NDK, um Ihren C / C ++ - Code zu kompilieren. https://developer.android.com/ndk/guides/index.html Suchen Sie entsprechend in den Einstellungen nach sdk und öffnen Sie die Registerkarte "SDK-Tools". Hier

Sie können es installieren, indem Sie das Kontrollkästchen aktivieren und sich bewerben. Das SDK kann von den benachbarten "SDK-Plattformen" installiert werden, und alle Android 5.0 und höher wurden installiert. new_screen_shot.png

Bearbeiten Sie dann die Datei / tensorflow / WORKSPACE. Korrigieren Sie den auskommentierten Teil in Ihren eigenen Einstellungen.

 Uncomment and update the paths in these entries to build the Android demo.
-#android_sdk_repository(
-#    name = "androidsdk",
-#    api_level = 23,
-#    build_tools_version = "23.0.1",
-#    # Replace with path to Android SDK on your system
-#    path = "<PATH_TO_SDK>",
-#)
-#
-#android_ndk_repository(
-#    name="androidndk",
-#    path="<PATH_TO_NDK>",
-#    api_level=21)

+android_sdk_repository(
+    name = "androidsdk",
+    api_level = 25,
+    build_tools_version = "25.0.2",
+    # Replace with path to Android SDK on your system
+    path = "/Users/user-name/Library/Android/sdk/",
+)
+
+android_ndk_repository(
+    name="androidndk",
+    path="/Users/user-name/Library/Android/sdk/ndk-bundle/",
+    api_level=21)

Im Folgenden wird das TensorFlow-Trainingsmodell abgelegt und an der richtigen Stelle platziert. Sie können sehen, dass das Modell im Assets-Verzeichnis abgelegt werden sollte. Die Grafik des Trainingsmodells: tensorflow_inception_graph.pb betrug 53,9 MB. Außerdem scheint das Diagramm des Erkennungsmodells: "multibox_model.pb" 18,6 MB zu betragen.

$ curl -L https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip -o /tmp/inception5h.zip
$ curl -L https://storage.googleapis.com/download.tensorflow.org/models/mobile_multibox_v1.zip -o /tmp/mobile_multibox_v1.zip

$ unzip /tmp/inception5h.zip -d tensorflow/examples/android/assets/
$ unzip /tmp/mobile_multibox_v1.zip -d tensorflow/examples/android/assets/

Jetzt, da Sie zum Erstellen bereit sind, erstellen Sie bazel im Stammverzeichnis (wo sich WORKSPACE befindet).

$ bazel build -c opt //tensorflow/examples/android:tensorflow_demo

Es dauert ungefähr 20 Minuten, also lassen Sie es uns mit Espresso extrahieren. Wenn es erfolgreich ist, werde ich es tatsächlich auf dem Terminal installieren und ausprobieren.

$ adb install -r bazel-bin/tensorflow/examples/android/tensorflow_demo.apk

Wenn der folgende Fehler angezeigt wird, sollten Sie ihn aktualisieren. Wenn Sie ihn befolgen, können Sie ihn ordnungsgemäß erstellen.

$ adb install -r bazel-bin/tensorflow/examples/android/tensorflow_demo.apk
It appears you do not have 'Android SDK Platform-tools' installed.
Use the 'android' tool to install them:
    android update sdk --no-ui --filter 'platform-tools'
new_screen_shot.png

Letzte Woche hatte ich den Eindruck, dass es ziemlich schleimig war, aber als ich es wieder aufbaute, schien es etwas schwerer zu sein ... vielleicht wegen meines Verstandes. Sie sollten auch die Anwendung Scalable Object Detection installiert haben. Und die Stilkonvertierung war sehr gut gemacht, es gab ein Beispielbild am unteren Rand des Bildschirms und es war eine Benutzeroberfläche, in der Sie auswählen konnten, wie viel als Stil verwendet werden soll. Die Auflösung kann zwischen 32 und 1024 gewählt werden, und obwohl sie sich ab etwa 192 nicht in Echtzeit dreht, konnte sie Bilder erzeugen.

new_screen_shot.png

Als ich mir die Quellcode-Commits ansah, war ich überrascht zu sehen, dass "StylizeActivity.java" und "TensorFlowYoloDetector.java" in nur einer Woche zunahmen.

iOS

Als nächstes kommt iOS. Grundsätzlich https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/ios_examples Folgen Sie den TensorFlow iOS-Beispielen in. Ich brauchte Xcode 7.3 oder höher und hatte iOS gestartet, also habe ich Xcode aktualisiert und konnte in der folgenden Umgebung bauen.

Erstellen Sie TensorFlow

Als allererstes https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/makefile Ich bitte Sie, TensorFlow gemäß dem iOS-Abschnitt von zu erstellen.

xcode-select --install
brew install automake
brew install libtool

Installieren. Es scheint, dass Sie mit einem Schuss mit der folgenden Shell bauen können.

tensorflow/contrib/makefile/build_all_ios.sh

Dies scheint "Tensorflow / Contrib / Makefile / Gen / Lib / Libtensorflow-Core.a" zu erzeugen. Es scheint, dass Sie dies mit dem Xcode-Projekt verknüpfen können. Es dauert ungefähr 20 Minuten, also lassen Sie uns Kaffee kochen. Wenn Sie versuchen, anstelle dieser Shell eine nach der anderen zu generieren, laden Sie zuerst die Abhängigkeiten herunter.

tensorflow/contrib/makefile/download_dependencies.sh

Als nächstes kompilieren Sie protobuf für iOS.

tensorflow/contrib/makefile/compile_ios_protobuf.sh 

Und machen Sie das Targeting für iOS.

make -f tensorflow/contrib/makefile/Makefile \
 TARGET=IOS \
 IOS_ARCH=ARM64

Laden Sie das Inception-Modell herunter und führen Sie das Projekt aus

Führen Sie im Stammverzeichnis des TensorFlow-Verzeichnisses den folgenden oder Link aus, um Inception v1 zu modellieren Herunterladen und entpacken.

mkdir -p ~/graphs
curl -o ~/graphs/inception5h.zip \
 https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip \
 && unzip ~/graphs/inception5h.zip -d ~/graphs/inception5h
cp ~/graphs/inception5h/* tensorflow/contrib/ios_examples/benchmark/data/
cp ~/graphs/inception5h/* tensorflow/contrib/ios_examples/camera/data/
cp ~/graphs/inception5h/* tensorflow/contrib/ios_examples/simple/data/

Wenn Sie sich das ansehen, sehen Sie, dass es drei Beispiel-Apps gibt: "Benchmark", "Kamera" und "Einfach". Natürlich ist es die "Kamera", die Bilder erkennt. Es scheint, dass das Inception-Modell unter dem Datenverzeichnis jeder Anwendung abgelegt werden sollte. Sobald dies erledigt ist, müssen Sie nur noch die Datei camera_example.xcodeproj im Verzeichnis öffnen und ausführen. IMG_0155.PNG

Im Gegensatz zur Android-Version gab es eine Funktion zum Stoppen der Bildaufnahme am unteren Bildschirmrand. Es funktioniert schleimig auf Ihrem iPhone SE. http://qiita.com/shu223/items/ce190ea6669b2636a8a7 Dem Artikel zufolge gab es auf dem iPhone 6 eine Verzögerung von einigen Sekunden. War das Modell selbst also kleiner als es war, oder unterstützte es die im Artikel Accelerate.framework unter iOS 10 erwähnte GPU Accelerated? Wird das BNNS hinzugefügt (Ist es immer noch so, weil das Problem nicht geschlossen ist ...) Im Gegenteil, wenn es nicht implementiert ist und es diese Geschwindigkeit ist, scheint es nicht möglich zu sein, fps mehr zu erhöhen, wenn es sich um ein iPhone 6s oder höher handelt.

Zusammenfassung

Ich habe ein Beispiel erstellt, das das TensorFlow-Lernmodell auf Mobilgeräten ausführt. Es ist sowohl auf Android als auch auf iOS ziemlich schleimig und ich frage mich, wie schwer das Modell sein kann.

Recommended Posts

Echtzeit-Bilderkennung auf Mobilgeräten mithilfe des TensorFlow-Lernmodells
Deep Learning Bilderkennung 2 Modellimplementierung
Bilderkennungsmodell mit Deep Learning im Jahr 2016
Deep Learning Bilderkennung 3 nach der Modellerstellung
Bilderkennung mit Caffe Model Chainer Yo!
Implementierung eines Deep Learning-Modells zur Bilderkennung
Bilderkennung mit Keras
[kotlin] Erstelle eine Echtzeit-Bilderkennungs-App auf Android
Versuchen Sie es mit TensorFlow
Deep Learning Bilderkennung 1 Theorie
Bilderkennung mit Keras + OpenCV
Fordern Sie die Bildklassifizierung mit TensorFlow2 + Keras 4 heraus. ~ Lassen Sie uns mit dem trainierten Modell ~ vorhersagen
Fordern Sie die Bildklassifizierung mit TensorFlow2 + Keras 9 heraus. Lernen, Speichern und Laden von Modellen
Grundlagen der Echtzeit-Bildverarbeitung mit opencv
Passen Sie Modell / Ebene / Metrik mit TensorFlow an
Versuchen Sie es mit TensorFlow Part 2
Führen Sie das Docker-Image von TensorFlow unter Python3 aus
Verwenden Sie Tensorflow 2.1.0 mit Anaconda unter Windows 10!
Validieren Sie das Trainingsmodell mit Pylearn2
Lassen Sie uns ein Bilderkennungsmodell mit Ihren eigenen Daten erstellen und spielen!
Versuchen Sie die Objekterkennung in Echtzeit mit YOLOv2 (TensorFlow).
[kotlin] Bilder auf Android sortieren (Pytorch Mobile)
Maschinelles Lernen mit Pytorch in Google Colab
Ich habe mit Jupyter eine einfache Bilderkennung versucht
Probieren Sie TensorFlows RNN mit einem Basismodell aus
Ich habe ein Bildklassifizierungsmodell erstellt und versucht, es auf dem Handy zu verschieben
Ich habe versucht, eine einfache Bilderkennungs-API mit Fast API und Tensorflow zu erstellen