diff options
author | Andrew Harp <andrewharp@google.com> | 2017-11-03 17:07:50 -0700 |
---|---|---|
committer | TensorFlower Gardener <gardener@tensorflow.org> | 2017-11-03 17:11:55 -0700 |
commit | bfd39838de87cba85f9edf028c1c30bae86da164 (patch) | |
tree | 53ca99d72f13c2b0d62cb1b36ecb16711edb6604 /tensorflow/examples/android | |
parent | f145db3bbd12edd93b18abffb38f78b5f69166c0 (diff) |
Android demo: fix handling of landscape rotation mode in classifier and detector demos. To use the orientation must be changed from "portrait" to "landscape" in AndroidManifest.xml. Resolves #9412 and #10348
Stylization demo is still portrait-only due to the complexity of the UI.
PiperOrigin-RevId: 174534886
Diffstat (limited to 'tensorflow/examples/android')
5 files changed, 29 insertions, 16 deletions
diff --git a/tensorflow/examples/android/src/org/tensorflow/demo/CameraActivity.java b/tensorflow/examples/android/src/org/tensorflow/demo/CameraActivity.java index 7e57c17467..4e45f42d0c 100644 --- a/tensorflow/examples/android/src/org/tensorflow/demo/CameraActivity.java +++ b/tensorflow/examples/android/src/org/tensorflow/demo/CameraActivity.java @@ -37,6 +37,7 @@ import android.os.HandlerThread; import android.os.Trace; import android.util.Size; import android.view.KeyEvent; +import android.view.Surface; import android.view.WindowManager; import android.widget.Toast; import java.nio.ByteBuffer; @@ -426,6 +427,19 @@ public abstract class CameraActivity extends Activity } } + protected int getScreenOrientation() { + switch (getWindowManager().getDefaultDisplay().getRotation()) { + case Surface.ROTATION_270: + return 270; + case Surface.ROTATION_180: + return 180; + case Surface.ROTATION_90: + return 90; + default: + return 0; + } + } + protected abstract void processImage(); protected abstract void onPreviewSizeChosen(final Size size, final int rotation); diff --git a/tensorflow/examples/android/src/org/tensorflow/demo/ClassifierActivity.java b/tensorflow/examples/android/src/org/tensorflow/demo/ClassifierActivity.java index b29fa1546c..e2c394dde9 100644 --- a/tensorflow/examples/android/src/org/tensorflow/demo/ClassifierActivity.java +++ b/tensorflow/examples/android/src/org/tensorflow/demo/ClassifierActivity.java @@ -27,6 +27,7 @@ import android.os.SystemClock; import android.util.Size; import android.util.TypedValue; import android.view.Display; +import android.view.Surface; import java.util.List; import java.util.Vector; import org.tensorflow.demo.OverlayView.DrawCallback; @@ -123,12 +124,8 @@ public class ClassifierActivity extends CameraActivity implements OnImageAvailab previewWidth = size.getWidth(); previewHeight = size.getHeight(); - final Display display = getWindowManager().getDefaultDisplay(); - final int screenOrientation = display.getRotation(); - - LOGGER.i("Sensor orientation: %d, Screen orientation: %d", rotation, screenOrientation); - - sensorOrientation = rotation + screenOrientation; + sensorOrientation = rotation - getScreenOrientation(); + LOGGER.i("Camera orientation relative to screen canvas: %d", sensorOrientation); LOGGER.i("Initializing at size %dx%d", previewWidth, previewHeight); rgbFrameBitmap = Bitmap.createBitmap(previewWidth, previewHeight, Config.ARGB_8888); diff --git a/tensorflow/examples/android/src/org/tensorflow/demo/DetectorActivity.java b/tensorflow/examples/android/src/org/tensorflow/demo/DetectorActivity.java index 3c80a2ae3c..7882d87c1c 100644 --- a/tensorflow/examples/android/src/org/tensorflow/demo/DetectorActivity.java +++ b/tensorflow/examples/android/src/org/tensorflow/demo/DetectorActivity.java @@ -30,6 +30,7 @@ import android.os.SystemClock; import android.util.Size; import android.util.TypedValue; import android.view.Display; +import android.view.Surface; import android.widget.Toast; import java.io.IOException; import java.util.LinkedList; @@ -168,12 +169,8 @@ public class DetectorActivity extends CameraActivity implements OnImageAvailable previewWidth = size.getWidth(); previewHeight = size.getHeight(); - final Display display = getWindowManager().getDefaultDisplay(); - final int screenOrientation = display.getRotation(); - - LOGGER.i("Sensor orientation: %d, Screen orientation: %d", rotation, screenOrientation); - - sensorOrientation = rotation + screenOrientation; + sensorOrientation = rotation - getScreenOrientation(); + LOGGER.i("Camera orientation relative to screen canvas: %d", sensorOrientation); LOGGER.i("Initializing at size %dx%d", previewWidth, previewHeight); rgbFrameBitmap = Bitmap.createBitmap(previewWidth, previewHeight, Config.ARGB_8888); diff --git a/tensorflow/examples/android/src/org/tensorflow/demo/env/ImageUtils.java b/tensorflow/examples/android/src/org/tensorflow/demo/env/ImageUtils.java index 5629f179c4..a3c694cddc 100644 --- a/tensorflow/examples/android/src/org/tensorflow/demo/env/ImageUtils.java +++ b/tensorflow/examples/android/src/org/tensorflow/demo/env/ImageUtils.java @@ -300,6 +300,10 @@ public class ImageUtils { final Matrix matrix = new Matrix(); if (applyRotation != 0) { + if (applyRotation % 90 != 0) { + LOGGER.w("Rotation of %d % 90 != 0", applyRotation); + } + // Translate so center of image is at origin. matrix.postTranslate(-srcWidth / 2.0f, -srcHeight / 2.0f); diff --git a/tensorflow/examples/android/src/org/tensorflow/demo/tracking/MultiBoxTracker.java b/tensorflow/examples/android/src/org/tensorflow/demo/tracking/MultiBoxTracker.java index aae0a4b62a..2fe2ba539e 100644 --- a/tensorflow/examples/android/src/org/tensorflow/demo/tracking/MultiBoxTracker.java +++ b/tensorflow/examples/android/src/org/tensorflow/demo/tracking/MultiBoxTracker.java @@ -161,15 +161,16 @@ public class MultiBoxTracker { } public synchronized void draw(final Canvas canvas) { - // TODO(andrewharp): This may not work for non-90 deg rotations. + final boolean rotated = sensorOrientation % 180 == 90; final float multiplier = - Math.min(canvas.getWidth() / (float) frameHeight, canvas.getHeight() / (float) frameWidth); + Math.min(canvas.getHeight() / (float) (rotated ? frameWidth : frameHeight), + canvas.getWidth() / (float) (rotated ? frameHeight : frameWidth)); frameToCanvasMatrix = ImageUtils.getTransformationMatrix( frameWidth, frameHeight, - (int) (multiplier * frameHeight), - (int) (multiplier * frameWidth), + (int) (multiplier * (rotated ? frameHeight : frameWidth)), + (int) (multiplier * (rotated ? frameWidth : frameHeight)), sensorOrientation, false); for (final TrackedRecognition recognition : trackedObjects) { |