diff options
Diffstat (limited to 'tensorflow/examples/android/src/org/tensorflow/demo/StylizeActivity.java')
-rw-r--r-- | tensorflow/examples/android/src/org/tensorflow/demo/StylizeActivity.java | 155 |
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); |