Tensorflow verfügt über ein Beispiel, das unter Android ausgeführt wird und auch auf den folgenden Websites vorgestellt wird. https://qiita.com/icchi_h/items/a1df9f27569714edfc5e Hier wird Tensorflow mit der All-Sky-Kamera THETA V betrieben, die mit Android ausgestattet ist.
(2018/8/18: Hinzugefügt durch Integration der Artikel, die in den ersten und zweiten Teil unterteilt wurden. Gehen Sie zu hier am 20.10.2018 Bei der Veranstaltung gibt es ein Kommentarmaterial (PPT).)
Holen Sie sich tensorflow von github und bereiten Sie den Quellcode vor. Hier, Die gegabelte Version von https://github.com/tensorflow/tensorflow (Verpflichtung: 26353f9b51091312e7097143aee9c2d05e2011fd) wurde unter https://github.com/mktshhr/tensorflow-theta platziert und für THETA V aktualisiert. Das Tag "Qiita20180818" ist der Quellcode, der diesem Artikel entspricht. Unter diesen ist https://github.com/mktshhr/tensorflow-theta/tree/Qiita20180818/tensorflow/examples/android der Umfang der Änderungen. Nachdem Sie den Quellcode erhalten haben, können Sie ihn ausprobieren, indem Sie / tensorflow-theta / examples / android in Android Studio öffnen. Die nachfolgend beschriebenen Änderungen wurden bereits übernommen.
git clone https://github.com/mktshhr/tensorflow-theta.git
cd ./tensorflow-theta/examples/android
Öffnen Sie den Android-Ordner in Android Studio. Folgen Sie dem Bildschirm, indem Sie auf "Google Maven-Repository hinzufügen und Projekt synchronisieren" klicken. Schreiben Sie die Zeile 45 von build.gradle von "bazel" in "none" um.
// set to 'bazel', 'cmake', 'makefile', 'none'
def nativeBuildSystem = 'none'
Schreiben Sie in ähnlicher Weise die Zeile 194 von build.gradle von "kompilieren" in "implementieren".
dependencies {
if (nativeBuildSystem == 'cmake' || nativeBuildSystem == 'none') {
implementation 'org.tensorflow:tensorflow-android:+'
}
}
Update mit "Jetzt synchronisieren".
Mit den bisherigen Änderungen funktioniert es auf Android-Smartphones (Moto G5 Plus, Android 7.0). Sie können "Ausführen" - "Debug'TensorflowAndroid '" auswählen, um es auf Ihrem Android-Smartphone zu erstellen und auszuführen. (Bei THETA V schaltet sich die Kamera aus.)
Die TensorFlow-Demo besteht aus vier Aktivitäten (Apps): TF-Klassifizierung, TF-Erkennung, TF-Stilisierung und TF-Sprache.
Geändert, um "com.theta360.plugin.ACTION_MAIN_CAMERA_CLOSE" in der Klasse onCreate of CameraActivity zu senden. Geben Sie die Kameraressourcen von THETA frei und stellen Sie sie in der Tensorflow-App zur Verfügung.
@Override
protected void onCreate(final Bundle savedInstanceState) {
LOGGER.d("onCreate " + this);
sendBroadcast(new Intent("com.theta360.plugin.ACTION_MAIN_CAMERA_CLOSE"));
super.onCreate(null);
Fügen Sie zum Erstellen Folgendes am Anfang der Datei CameraActivity.java hinzu.
import android.content.Intent;
Das Argument onPreviewSizeChosen in der Nähe von Zeile 124 wurde korrigiert. Keine Rotation.
onPreviewSizeChosen(new Size(previewSize.width, previewSize.height), 0);
Um Zeile 99 wie folgt geändert. Hier wird RicMoviePreview1024 eingestellt, aber auch Einstellungen wie RicMoviePreview3840 sind möglich.
//camera.setDisplayOrientation(90);
parameters.set("RIC_SHOOTING_MODE", "RicMoviePreview1024");
Zeile 109 wurde wie folgt geändert. Tauschen Sie die Breite und Höhe aus.
camera.addCallbackBuffer(new byte[ImageUtils.getYUVByteSize(s.width, s.height)]);
textureView.setAspectRatio(s.width, s.height);
Mit den oben genannten Änderungen konnten wir den Betrieb von TF Classify und TF Detect auf Vysor bestätigen. Ich habe es behoben, weil das Display ein Porträtbild wurde, aber während die neue Camera2-API auf dem Android-Smartphone (Moto G5 Plus) verfügbar war, war der Vorgang zwischen dem Smartphone und THETA unterschiedlich, da THETA die ältere Kamera-API verwendet. Es kann sein.
Standardmäßig verwendet TF Detect TF_OD_API (Tensorflow Object Detection API) zur Objekterkennung.
Sobald das Bild in ein 1: 1-Quadratbild konvertiert und der Stil angewendet wurde, wird es geändert, um zu einem zylindrischen 2: 1-Bild mit normalem Abstand zurückzukehren.
Setzen Sie processImage () in der Nähe der Zeile 495 von StylizeActivity.java, damit das Seitenverhältnis beim Erstellen einer FrameToCropTransform-Transformationsmatrix nicht gespeichert wird. Jetzt haben Sie ein 2: 1-> 1: 1-Bild für die Stilkonvertierung.
@Override
protected void processImage() {
if (desiredSize != initializedSize) {
LOGGER.i(
"Initializing at size preview size %dx%d, stylize size %d",
previewWidth, previewHeight, desiredSize);
rgbFrameBitmap = Bitmap.createBitmap(previewWidth, previewHeight, Config.ARGB_8888);
croppedBitmap = Bitmap.createBitmap(desiredSize, desiredSize, Config.ARGB_8888);
frameToCropTransform = ImageUtils.getTransformationMatrix(
previewWidth, previewHeight,
desiredSize, desiredSize,
sensorOrientation, false);
Ändern Sie in Runnable () in der Nähe der Zeile 520 von StylizeActivity.java die Größe mithilfe von Canvas und ändern Sie den Stil des CroppedBitmap-Bilds von 1: 1 auf 2: 1. Erstellt ein gestyltes 2: 1-TexturCopyBitmap-Bild.
runInBackground(
new Runnable() {
@Override
public void run() {
cropCopyBitmap = Bitmap.createBitmap(croppedBitmap);
final long startTime = SystemClock.uptimeMillis();
stylizeImage(croppedBitmap);
lastProcessingTimeMs = SystemClock.uptimeMillis() - startTime;
textureCopyBitmap = Bitmap.createBitmap(previewWidth, previewHeight, Config.ARGB_8888);
final Paint paint = new Paint();
paint.setFilterBitmap(true);
final Canvas canvas = new Canvas(textureCopyBitmap);
canvas.drawBitmap(croppedBitmap, cropToFrameTransform, paint);
if (SAVE_PREVIEW_BITMAP) {
ImageUtils.saveBitmap(textureCopyBitmap, "stylizeImage.png ");
}
requestRender();
readyForNextImage();
}
});
Zu diesem Zeitpunkt funktioniert TF Stylize.
@Override
protected void onCreate(Bundle savedInstanceState) {
// Set up the UI.
super.onCreate(savedInstanceState);
AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); // for THETA
am.setParameters("RicUseBFormat=false"); // for THETA
setContentView(R.layout.activity_speech);
Android.permission.MODIFY_AUDIO_SETTINGS-Berechtigung in AndroidManifest.xml hinzugefügt (unter Zeile 26). Die Standardabtastrate für TF-Sprache betrug 16 kHz und die Standardabtastrate für THETA betrug 44,1 kHz. Es scheint, dass der TF-Sprachfilter bei 44,1 kHz nicht gut funktioniert, also habe ich ihn bei 16 kHz betrieben, aber es scheint notwendig zu sein, die Berechtigung hinzuzufügen, um mit dieser Einstellung zu arbeiten.
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
Mit den oben genannten Änderungen ist es jetzt möglich, Sprache genauso zu erkennen wie ein Smartphone.
Ein Android-Beispiel von Tensorflow wurde auf THETA ausgeführt, um die Bilderkennung und Spracherkennung durchzuführen. TF Classify ist ein Objektklassifizierer, aber es ist leicht, ein Objekt falsch zu identifizieren, da es in einem All-Sky-Bild einen Superweitwinkel aufweist. TF Detect ist ein Objektdetektor, der nach Objekten in einem Bild sucht. Da TF Stylize den Stil nicht gut auf das 2: 1-Bild anwenden konnte, habe ich ihn vermieden, indem ich den Stil einmal auf das 1: 1-Bild angewendet habe. TF Speech kann durch Hinzufügen der Berechtigung MODIFY_AUDIO_SETTINGS ausgeführt werden. Es wird angenommen, dass es noch viel Raum für Einfallsreichtum gibt, beispielsweise die Verbesserung der Erkennungsgenauigkeit für den gesamten Himmel. Die Schlüsselklasse TensorFlowInferenceInterface verwendet trainierte Modelle (.pb-Formatdateien (Protocol Buffers)) unter Assets als Parameter. Sie können verschiedene Lernmodelle ausprobieren, indem Sie sie auf dieselbe Weise anordnen und lesen.
https://codelabs.developers.google.com/codelabs/tensorflow-style-transfer-android/index.html https://api.ricoh/docs/theta-plugin-reference/camera-api/ http://iti.hatenablog.jp/entry/2017/05/25/093328
Recommended Posts