Permalink
Browse files

Keep only the ClassifierActivity for demo purposes

  • Loading branch information...
Nilhcem committed Mar 11, 2017
1 parent d608cad commit 52f5e72b53701d7337df1c8b1b8857e5c186f8e2
@@ -37,24 +37,6 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
-
- <activity android:name="org.tensorflow.demo.DetectorActivity"
- android:screenOrientation="portrait"
- android:label="@string/activity_name_detection">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
-
- <activity android:name="org.tensorflow.demo.StylizeActivity"
- android:screenOrientation="portrait"
- android:label="@string/activity_name_stylize">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
</application>
</manifest>
@@ -1,360 +0,0 @@
-/*
- * Copyright 2016 The TensorFlow Authors. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.tensorflow.demo;
-
-import android.graphics.Bitmap;
-import android.graphics.Bitmap.Config;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Matrix;
-import android.graphics.Paint;
-import android.graphics.Paint.Style;
-import android.graphics.RectF;
-import android.graphics.Typeface;
-import android.media.Image;
-import android.media.Image.Plane;
-import android.media.ImageReader;
-import android.media.ImageReader.OnImageAvailableListener;
-import android.os.SystemClock;
-import android.os.Trace;
-import android.util.Size;
-import android.util.TypedValue;
-import android.view.Display;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Vector;
-import org.tensorflow.demo.OverlayView.DrawCallback;
-import org.tensorflow.demo.env.BorderedText;
-import org.tensorflow.demo.env.ImageUtils;
-import org.tensorflow.demo.env.Logger;
-import org.tensorflow.demo.tracking.MultiBoxTracker;
-import org.tensorflow.demo.R;
-
-/**
- * An activity that uses a TensorFlowMultiBoxDetector and ObjectTracker to detect and then track
- * objects.
- */
-public class DetectorActivity extends CameraActivity implements OnImageAvailableListener {
- private static final Logger LOGGER = new Logger();
-
- // Configuration values for the prepackaged multibox model.
- private static final int MB_INPUT_SIZE = 224;
- private static final int MB_IMAGE_MEAN = 128;
- private static final float MB_IMAGE_STD = 128;
- private static final String MB_INPUT_NAME = "ResizeBilinear";
- private static final String MB_OUTPUT_LOCATIONS_NAME = "output_locations/Reshape";
- private static final String MB_OUTPUT_SCORES_NAME = "output_scores/Reshape";
- private static final String MB_MODEL_FILE = "file:///android_asset/multibox_model.pb";
- private static final String MB_LOCATION_FILE =
- "file:///android_asset/multibox_location_priors.txt";
-
- // Configuration values for tiny-yolo-voc. Note that the graph is not included with TensorFlow and
- // must be manually placed in the assets/ directory by the user.
- // Graphs and models downloaded from http://pjreddie.com/darknet/yolo/ may be converted e.g. via
- // DarkFlow (https://github.com/thtrieu/darkflow). Sample command:
- // ./flow --model cfg/tiny-yolo-voc.cfg --load bin/tiny-yolo-voc.weights --savepb --verbalise=True
- private static final String YOLO_MODEL_FILE = "file:///android_asset/graph-tiny-yolo-voc.pb";
- private static final int YOLO_INPUT_SIZE = 416;
- private static final String YOLO_INPUT_NAME = "input";
- private static final String YOLO_OUTPUT_NAMES = "output";
- private static final int YOLO_BLOCK_SIZE = 32;
-
- // Default to the included multibox model.
- private static final boolean USE_YOLO = false;
-
- private static final int CROP_SIZE = USE_YOLO ? YOLO_INPUT_SIZE : MB_INPUT_SIZE;
-
- // Minimum detection confidence to track a detection.
- private static final float MINIMUM_CONFIDENCE = USE_YOLO ? 0.25f : 0.1f;
-
- private static final boolean MAINTAIN_ASPECT = USE_YOLO;
-
- private static final boolean SAVE_PREVIEW_BITMAP = false;
- private static final float TEXT_SIZE_DIP = 10;
-
- private Integer sensorOrientation;
-
- private Classifier detector;
-
- private int previewWidth = 0;
- private int previewHeight = 0;
- private byte[][] yuvBytes;
- private int[] rgbBytes = null;
- private Bitmap rgbFrameBitmap = null;
- private Bitmap croppedBitmap = null;
-
- private boolean computing = false;
-
- private long timestamp = 0;
-
- private Matrix frameToCropTransform;
- private Matrix cropToFrameTransform;
-
- private Bitmap cropCopyBitmap;
-
- private MultiBoxTracker tracker;
-
- private byte[] luminance;
-
- private BorderedText borderedText;
-
- private long lastProcessingTimeMs;
-
- @Override
- public void onPreviewSizeChosen(final Size size, final int rotation) {
- final float textSizePx =
- TypedValue.applyDimension(
- TypedValue.COMPLEX_UNIT_DIP, TEXT_SIZE_DIP, getResources().getDisplayMetrics());
- borderedText = new BorderedText(textSizePx);
- borderedText.setTypeface(Typeface.MONOSPACE);
-
- tracker = new MultiBoxTracker(getResources().getDisplayMetrics());
-
- if (USE_YOLO) {
- detector =
- TensorFlowYoloDetector.create(
- getAssets(),
- YOLO_MODEL_FILE,
- YOLO_INPUT_SIZE,
- YOLO_INPUT_NAME,
- YOLO_OUTPUT_NAMES,
- YOLO_BLOCK_SIZE);
- } else {
- detector =
- TensorFlowMultiBoxDetector.create(
- getAssets(),
- MB_MODEL_FILE,
- MB_LOCATION_FILE,
- MB_IMAGE_MEAN,
- MB_IMAGE_STD,
- MB_INPUT_NAME,
- MB_OUTPUT_LOCATIONS_NAME,
- MB_OUTPUT_SCORES_NAME);
- }
-
- 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;
-
- LOGGER.i("Initializing at size %dx%d", previewWidth, previewHeight);
- rgbBytes = new int[previewWidth * previewHeight];
- rgbFrameBitmap = Bitmap.createBitmap(previewWidth, previewHeight, Config.ARGB_8888);
- croppedBitmap = Bitmap.createBitmap(CROP_SIZE, CROP_SIZE, Config.ARGB_8888);
-
- frameToCropTransform =
- ImageUtils.getTransformationMatrix(
- previewWidth, previewHeight,
- CROP_SIZE, CROP_SIZE,
- sensorOrientation, MAINTAIN_ASPECT);
-
- cropToFrameTransform = new Matrix();
- frameToCropTransform.invert(cropToFrameTransform);
- yuvBytes = new byte[3][];
-
- trackingOverlay = (OverlayView) findViewById(R.id.tracking_overlay);
- trackingOverlay.addCallback(
- new DrawCallback() {
- @Override
- public void drawCallback(final Canvas canvas) {
- tracker.draw(canvas);
- if (isDebug()) {
- tracker.drawDebug(canvas);
- }
- }
- });
-
- addCallback(
- new DrawCallback() {
- @Override
- public void drawCallback(final Canvas canvas) {
- if (!isDebug()) {
- return;
- }
- final Bitmap copy = cropCopyBitmap;
- if (copy == null) {
- return;
- }
-
- final int backgroundColor = Color.argb(100, 0, 0, 0);
- canvas.drawColor(backgroundColor);
-
- final Matrix matrix = new Matrix();
- final float scaleFactor = 2;
- matrix.postScale(scaleFactor, scaleFactor);
- matrix.postTranslate(
- canvas.getWidth() - copy.getWidth() * scaleFactor,
- canvas.getHeight() - copy.getHeight() * scaleFactor);
- canvas.drawBitmap(copy, matrix, new Paint());
-
- final Vector<String> lines = new Vector<String>();
- if (detector != null) {
- final String statString = detector.getStatString();
- final String[] statLines = statString.split("\n");
- for (final String line : statLines) {
- lines.add(line);
- }
- }
- lines.add("");
-
- lines.add("Frame: " + previewWidth + "x" + previewHeight);
- lines.add("Crop: " + copy.getWidth() + "x" + copy.getHeight());
- lines.add("View: " + canvas.getWidth() + "x" + canvas.getHeight());
- lines.add("Rotation: " + sensorOrientation);
- lines.add("Inference time: " + lastProcessingTimeMs + "ms");
-
- borderedText.drawLines(canvas, 10, canvas.getHeight() - 10, lines);
- }
- });
- }
-
- OverlayView trackingOverlay;
-
- @Override
- public void onImageAvailable(final ImageReader reader) {
- Image image = null;
-
- ++timestamp;
- final long currTimestamp = timestamp;
-
- try {
- image = reader.acquireLatestImage();
-
- if (image == null) {
- return;
- }
-
- Trace.beginSection("imageAvailable");
-
- final Plane[] planes = image.getPlanes();
- fillBytes(planes, yuvBytes);
-
- tracker.onFrame(
- previewWidth,
- previewHeight,
- planes[0].getRowStride(),
- sensorOrientation,
- yuvBytes[0],
- timestamp);
- trackingOverlay.postInvalidate();
-
- // No mutex needed as this method is not reentrant.
- if (computing) {
- image.close();
- return;
- }
- computing = true;
-
- final int yRowStride = planes[0].getRowStride();
- final int uvRowStride = planes[1].getRowStride();
- final int uvPixelStride = planes[1].getPixelStride();
- ImageUtils.convertYUV420ToARGB8888(
- yuvBytes[0],
- yuvBytes[1],
- yuvBytes[2],
- rgbBytes,
- previewWidth,
- previewHeight,
- yRowStride,
- uvRowStride,
- uvPixelStride,
- false);
-
- image.close();
- } catch (final Exception e) {
- if (image != null) {
- image.close();
- }
- LOGGER.e(e, "Exception!");
- Trace.endSection();
- return;
- }
-
- rgbFrameBitmap.setPixels(rgbBytes, 0, previewWidth, 0, 0, previewWidth, previewHeight);
- final Canvas canvas = new Canvas(croppedBitmap);
- canvas.drawBitmap(rgbFrameBitmap, frameToCropTransform, null);
-
- // For examining the actual TF input.
- if (SAVE_PREVIEW_BITMAP) {
- ImageUtils.saveBitmap(croppedBitmap);
- }
-
- if (luminance == null) {
- luminance = new byte[yuvBytes[0].length];
- }
- System.arraycopy(yuvBytes[0], 0, luminance, 0, luminance.length);
-
- runInBackground(
- new Runnable() {
- @Override
- public void run() {
- final long startTime = SystemClock.uptimeMillis();
- final List<Classifier.Recognition> results = detector.recognizeImage(croppedBitmap);
- lastProcessingTimeMs = SystemClock.uptimeMillis() - startTime;
-
- cropCopyBitmap = Bitmap.createBitmap(croppedBitmap);
- final Canvas canvas = new Canvas(cropCopyBitmap);
- final Paint paint = new Paint();
- paint.setColor(Color.RED);
- paint.setStyle(Style.STROKE);
- paint.setStrokeWidth(2.0f);
-
- final List<Classifier.Recognition> mappedRecognitions =
- new LinkedList<Classifier.Recognition>();
-
- for (final Classifier.Recognition result : results) {
- final RectF location = result.getLocation();
- if (location != null && result.getConfidence() >= MINIMUM_CONFIDENCE) {
- canvas.drawRect(location, paint);
-
- cropToFrameTransform.mapRect(location);
- result.setLocation(location);
- mappedRecognitions.add(result);
- }
- }
-
- tracker.trackResults(mappedRecognitions, luminance, currTimestamp);
- trackingOverlay.postInvalidate();
-
- requestRender();
- computing = false;
- }
- });
-
- Trace.endSection();
- }
-
- @Override
- protected int getLayoutId() {
- return R.layout.camera_connection_fragment_tracking;
- }
-
- @Override
- protected int getDesiredPreviewFrameSize() {
- return CROP_SIZE;
- }
-
- @Override
- public void onSetDebug(final boolean debug) {
- detector.enableStatLogging(debug);
- }
-}
Oops, something went wrong.

0 comments on commit 52f5e72

Please sign in to comment.