aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/examples/android/src/org/tensorflow/demo/StylizeActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'tensorflow/examples/android/src/org/tensorflow/demo/StylizeActivity.java')
-rw-r--r--tensorflow/examples/android/src/org/tensorflow/demo/StylizeActivity.java155
1 files changed, 56 insertions, 99 deletions
diff --git a/tensorflow/examples/android/src/org/tensorflow/demo/StylizeActivity.java b/tensorflow/examples/android/src/org/tensorflow/demo/StylizeActivity.java
index 7afe2bf541..58dd5c6069 100644
--- a/tensorflow/examples/android/src/org/tensorflow/demo/StylizeActivity.java
+++ b/tensorflow/examples/android/src/org/tensorflow/demo/StylizeActivity.java
@@ -28,6 +28,7 @@ import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Rect;
import android.graphics.Typeface;
+import android.hardware.Camera;
import android.media.Image;
import android.media.Image.Plane;
import android.media.ImageReader;
@@ -58,6 +59,8 @@ import org.tensorflow.demo.OverlayView.DrawCallback;
import org.tensorflow.demo.env.BorderedText;
import org.tensorflow.demo.env.ImageUtils;
import org.tensorflow.demo.env.Logger;
+
+// Explicit import needed for internal Google builds.
import org.tensorflow.demo.R;
/**
@@ -97,10 +100,6 @@ public class StylizeActivity extends CameraActivity implements OnImageAvailableL
private int previewWidth = 0;
private int previewHeight = 0;
- private byte[][] yuvBytes;
- private int[] rgbBytes = null;
- private Bitmap rgbFrameBitmap = null;
- private Bitmap croppedBitmap = null;
private final float[] styleVals = new float[NUM_STYLES];
private int[] intValues;
@@ -108,18 +107,13 @@ public class StylizeActivity extends CameraActivity implements OnImageAvailableL
private int frameNum = 0;
- private Bitmap cropCopyBitmap;
private Bitmap textureCopyBitmap;
- private boolean computing = false;
-
private Matrix frameToCropTransform;
private Matrix cropToFrameTransform;
private BorderedText borderedText;
- private long lastProcessingTimeMs;
-
private TensorFlowInferenceInterface inferenceInterface;
private int lastOtherStyle = 1;
@@ -363,9 +357,8 @@ public class StylizeActivity extends CameraActivity implements OnImageAvailableL
@Override
public void onPreviewSizeChosen(final Size size, final int rotation) {
- final float textSizePx =
- TypedValue.applyDimension(
- TypedValue.COMPLEX_UNIT_DIP, TEXT_SIZE_DIP, getResources().getDisplayMetrics());
+ final float textSizePx = TypedValue.applyDimension(
+ TypedValue.COMPLEX_UNIT_DIP, TEXT_SIZE_DIP, getResources().getDisplayMetrics());
borderedText = new BorderedText(textSizePx);
borderedText.setTypeface(Typeface.MONOSPACE);
@@ -393,7 +386,6 @@ public class StylizeActivity extends CameraActivity implements OnImageAvailableL
grid = (GridView) findViewById(R.id.grid_layout);
grid.setAdapter(adapter);
grid.setOnTouchListener(gridTouchAdapter);
-
setStyle(adapter.items[0], 1.0f);
}
@@ -455,78 +447,42 @@ public class StylizeActivity extends CameraActivity implements OnImageAvailableL
}
}
- @Override
- public void onImageAvailable(final ImageReader reader) {
- Image image = null;
-
- try {
- image = reader.acquireLatestImage();
-
- if (image == null) {
- return;
- }
-
- if (computing) {
- image.close();
- return;
- }
-
- if (desiredSize != initializedSize) {
- LOGGER.i(
- "Initializing at size preview size %dx%d, stylize size %d",
- previewWidth, previewHeight, desiredSize);
- rgbBytes = new int[previewWidth * previewHeight];
- rgbFrameBitmap = Bitmap.createBitmap(previewWidth, previewHeight, Config.ARGB_8888);
- croppedBitmap = Bitmap.createBitmap(desiredSize, desiredSize, Config.ARGB_8888);
-
- frameToCropTransform =
- ImageUtils.getTransformationMatrix(
- previewWidth, previewHeight,
- desiredSize, desiredSize,
- sensorOrientation, true);
-
- cropToFrameTransform = new Matrix();
- frameToCropTransform.invert(cropToFrameTransform);
-
- yuvBytes = new byte[3][];
-
- intValues = new int[desiredSize * desiredSize];
- floatValues = new float[desiredSize * desiredSize * 3];
- initializedSize = desiredSize;
- }
-
- computing = true;
-
- Trace.beginSection("imageAvailable");
-
- final Plane[] planes = image.getPlanes();
- fillBytes(planes, yuvBytes);
+ private void resetPreviewBuffers() {
+ croppedBitmap = Bitmap.createBitmap(desiredSize, desiredSize, Config.ARGB_8888);
- final int yRowStride = planes[0].getRowStride();
- final int uvRowStride = planes[1].getRowStride();
- final int uvPixelStride = planes[1].getPixelStride();
+ frameToCropTransform = ImageUtils.getTransformationMatrix(
+ previewWidth, previewHeight,
+ desiredSize, desiredSize,
+ sensorOrientation, true);
- ImageUtils.convertYUV420ToARGB8888(
- yuvBytes[0],
- yuvBytes[1],
- yuvBytes[2],
- previewWidth,
- previewHeight,
- yRowStride,
- uvRowStride,
- uvPixelStride,
- rgbBytes);
+ cropToFrameTransform = new Matrix();
+ frameToCropTransform.invert(cropToFrameTransform);
+ yuvBytes = new byte[3][];
+ intValues = new int[desiredSize * desiredSize];
+ floatValues = new float[desiredSize * desiredSize * 3];
+ initializedSize = desiredSize;
+ }
- image.close();
- } catch (final Exception e) {
- if (image != null) {
- image.close();
- }
- LOGGER.e(e, "Exception!");
- Trace.endSection();
- return;
+ protected void processImageRGBbytes(int[] rgbBytes ) {
+ 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, true);
+
+ cropToFrameTransform = new Matrix();
+ frameToCropTransform.invert(cropToFrameTransform);
+ yuvBytes = new byte[3][];
+ intValues = new int[desiredSize * desiredSize];
+ floatValues = new float[desiredSize * desiredSize * 3];
+ initializedSize = desiredSize;
}
-
rgbFrameBitmap.setPixels(rgbBytes, 0, previewWidth, 0, 0, previewWidth, previewHeight);
final Canvas canvas = new Canvas(croppedBitmap);
canvas.drawBitmap(rgbFrameBitmap, frameToCropTransform, null);
@@ -536,24 +492,24 @@ public class StylizeActivity extends CameraActivity implements OnImageAvailableL
ImageUtils.saveBitmap(croppedBitmap);
}
- 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(croppedBitmap);
-
- requestRender();
- computing = false;
- }
- });
-
- Trace.endSection();
+ 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(croppedBitmap);
+ requestRender();
+ computing = false;
+ if (postInferenceCallback != null) {
+ postInferenceCallback.run();
+ }
+ }
+ });
+ if (desiredSize != initializedSize) {
+ resetPreviewBuffers();
+ }
}
private void stylizeImage(final Bitmap bitmap) {
@@ -584,6 +540,7 @@ public class StylizeActivity extends CameraActivity implements OnImageAvailableL
}
// Copy the input data into TensorFlow.
+ LOGGER.i("Width: %s , Height: %s",bitmap.getWidth(),bitmap.getHeight());
inferenceInterface.feed(
INPUT_NODE, floatValues, 1, bitmap.getWidth(), bitmap.getHeight(), 3);
inferenceInterface.feed(STYLE_NODE, styleVals, NUM_STYLES);