From 67c19f42b3384c1e6a0b8fbfe9a386d3ea8151d7 Mon Sep 17 00:00:00 2001 From: huangweiqi Date: Sat, 26 May 2018 01:42:01 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=95=B4=E7=90=86=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 3 +- app/src/main/AndroidManifest.xml | 10 +- .../Classifier.java | 6 +- .../ImageClassifier.java} | 12 +- .../MainActivity.java | 116 ++++++++---------- app/src/main/res/layout/activity_main.xml | 2 +- app/src/main/res/values/strings.xml | 3 +- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 20 +-- 9 files changed, 70 insertions(+), 104 deletions(-) rename app/src/main/java/com/mindorks/{tensorflowexample => tensorflow}/Classifier.java (97%) rename app/src/main/java/com/mindorks/{tensorflowexample/TensorFlowImageClassifier.java => tensorflow/ImageClassifier.java} (96%) rename app/src/main/java/com/mindorks/{tensorflowexample => tensorflow}/MainActivity.java (62%) diff --git a/app/build.gradle b/app/build.gradle index e73348b..8aa2e32 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - apply plugin: 'com.android.application' android { @@ -44,4 +43,6 @@ dependencies { testCompile 'junit:junit:4.12' compile 'org.tensorflow:tensorflow-android:1.2.0' compile 'com.wonderkiln:camerakit:0.13.1' + implementation 'com.jakewharton:butterknife:8.8.1' + annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0c9d6b3..482c795 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -14,24 +14,22 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License. --> - + package="com.mindorks.tensorflow"> - + - - \ No newline at end of file + diff --git a/app/src/main/java/com/mindorks/tensorflowexample/Classifier.java b/app/src/main/java/com/mindorks/tensorflow/Classifier.java similarity index 97% rename from app/src/main/java/com/mindorks/tensorflowexample/Classifier.java rename to app/src/main/java/com/mindorks/tensorflow/Classifier.java index 91dc4f1..bee9451 100644 --- a/app/src/main/java/com/mindorks/tensorflowexample/Classifier.java +++ b/app/src/main/java/com/mindorks/tensorflow/Classifier.java @@ -14,17 +14,13 @@ * limitations under the License. */ -package com.mindorks.tensorflowexample; +package com.mindorks.tensorflow; import android.graphics.Bitmap; import android.graphics.RectF; import java.util.List; -/** - * Created by amitshekhar on 06/03/17. - */ - /** * Generic interface for interacting with different recognition engines. */ diff --git a/app/src/main/java/com/mindorks/tensorflowexample/TensorFlowImageClassifier.java b/app/src/main/java/com/mindorks/tensorflow/ImageClassifier.java similarity index 96% rename from app/src/main/java/com/mindorks/tensorflowexample/TensorFlowImageClassifier.java rename to app/src/main/java/com/mindorks/tensorflow/ImageClassifier.java index 78b6971..a49a7fe 100644 --- a/app/src/main/java/com/mindorks/tensorflowexample/TensorFlowImageClassifier.java +++ b/app/src/main/java/com/mindorks/tensorflow/ImageClassifier.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.mindorks.tensorflowexample; +package com.mindorks.tensorflow; import android.content.res.AssetManager; import android.graphics.Bitmap; @@ -32,14 +32,10 @@ import java.util.PriorityQueue; import java.util.Vector; -/** - * Created by amitshekhar on 06/03/17. - */ - /** * A classifier specialized to label images using TensorFlow. */ -public class TensorFlowImageClassifier implements Classifier { +public class ImageClassifier implements Classifier { private static final String TAG = "ImageClassifier"; @@ -65,7 +61,7 @@ public class TensorFlowImageClassifier implements Classifier { private boolean runStats = false; - private TensorFlowImageClassifier() { + private ImageClassifier() { } /** @@ -91,7 +87,7 @@ public static Classifier create( String inputName, String outputName) throws IOException { - TensorFlowImageClassifier c = new TensorFlowImageClassifier(); + ImageClassifier c = new ImageClassifier(); c.inputName = inputName; c.outputName = outputName; diff --git a/app/src/main/java/com/mindorks/tensorflowexample/MainActivity.java b/app/src/main/java/com/mindorks/tensorflow/MainActivity.java similarity index 62% rename from app/src/main/java/com/mindorks/tensorflowexample/MainActivity.java rename to app/src/main/java/com/mindorks/tensorflow/MainActivity.java index 036e7a2..d84488e 100644 --- a/app/src/main/java/com/mindorks/tensorflowexample/MainActivity.java +++ b/app/src/main/java/com/mindorks/tensorflow/MainActivity.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.mindorks.tensorflowexample; +package com.mindorks.tensorflow; import android.graphics.Bitmap; import android.os.Bundle; @@ -36,84 +36,52 @@ import java.util.concurrent.Executor; import java.util.concurrent.Executors; -public class MainActivity extends AppCompatActivity { +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.OnClick; + +public class MainActivity extends AppCompatActivity implements CameraKitEventListener { private static final int INPUT_SIZE = 224; private static final int IMAGE_MEAN = 117; private static final float IMAGE_STD = 1; + private static final String INPUT_NAME = "input"; private static final String OUTPUT_NAME = "output"; - private static final String MODEL_FILE = "file:///android_asset/tensorflow_inception_graph.pb"; - private static final String LABEL_FILE = - "file:///android_asset/imagenet_comp_graph_label_strings.txt"; + private static final String LABEL_FILE = "file:///android_asset/imagenet_comp_graph_label_strings.txt"; private Classifier classifier; private Executor executor = Executors.newSingleThreadExecutor(); - private TextView textViewResult; - private Button btnDetectObject, btnToggleCamera; - private ImageView imageViewResult; - private CameraView cameraView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - cameraView = (CameraView) findViewById(R.id.cameraView); - imageViewResult = (ImageView) findViewById(R.id.imageViewResult); - textViewResult = (TextView) findViewById(R.id.textViewResult); - textViewResult.setMovementMethod(new ScrollingMovementMethod()); - - btnToggleCamera = (Button) findViewById(R.id.btnToggleCamera); - btnDetectObject = (Button) findViewById(R.id.btnDetectObject); - - cameraView.addCameraKitListener(new CameraKitEventListener() { - @Override - public void onEvent(CameraKitEvent cameraKitEvent) { - - } - @Override - public void onError(CameraKitError cameraKitError) { - - } - - @Override - public void onImage(CameraKitImage cameraKitImage) { - - Bitmap bitmap = cameraKitImage.getBitmap(); - - bitmap = Bitmap.createScaledBitmap(bitmap, INPUT_SIZE, INPUT_SIZE, false); + @BindView(R.id.textViewResult) + TextView textViewResult; - imageViewResult.setImageBitmap(bitmap); + @BindView(R.id.imageViewResult) + ImageView imageViewResult; - final List results = classifier.recognizeImage(bitmap); + @BindView(R.id.cameraView) + CameraView cameraView; - textViewResult.setText(results.toString()); - - } - - @Override - public void onVideo(CameraKitVideo cameraKitVideo) { - - } - }); + @BindView(R.id.btnDetectObject) + Button btnDetectObject; - btnToggleCamera.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - cameraView.toggleFacing(); - } - }); + @OnClick(R.id.btnToggleCamera) void cameraOnClick() { + cameraView.toggleFacing(); + } - btnDetectObject.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - cameraView.captureImage(); - } - }); + @OnClick(R.id.btnDetectObject) void detectOnClick() { + cameraView.captureImage(); + } + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); initTensorFlowAndLoadModel(); + ButterKnife.bind(this); + textViewResult.setMovementMethod(new ScrollingMovementMethod()); + cameraView.addCameraKitListener(this); } @Override @@ -139,12 +107,36 @@ public void run() { }); } + @Override + public void onEvent(CameraKitEvent cameraKitEvent) { + + } + + @Override + public void onError(CameraKitError cameraKitError) { + + } + + @Override + public void onImage(CameraKitImage cameraKitImage) { + Bitmap bitmap = cameraKitImage.getBitmap(); + bitmap = Bitmap.createScaledBitmap(bitmap, INPUT_SIZE, INPUT_SIZE, false); + imageViewResult.setImageBitmap(bitmap); + final List results = classifier.recognizeImage(bitmap); + textViewResult.setText(results.toString()); + } + + @Override + public void onVideo(CameraKitVideo cameraKitVideo) { + + } + private void initTensorFlowAndLoadModel() { executor.execute(new Runnable() { @Override public void run() { try { - classifier = TensorFlowImageClassifier.create( + classifier = ImageClassifier.create( getAssets(), MODEL_FILE, LABEL_FILE, diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 303639e..cd66852 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -23,7 +23,7 @@ android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" - tools:context="com.mindorks.tensorflowexample.MainActivity"> + tools:context="com.mindorks.tensorflowexample.com.mindorks.tensorflow.MainActivity"> - - AndroidTensorFlowMachineLearningExample + TensorFlowSample Toggle Camera Detect Object diff --git a/build.gradle b/build.gradle index ca2e520..0c7d839 100644 --- a/build.gradle +++ b/build.gradle @@ -25,7 +25,7 @@ buildscript { } } dependencies { - classpath 'com.android.tools.build:gradle:2.2.0' + classpath 'com.android.tools.build:gradle:3.0.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e762e84..f6bb4ba 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,22 +1,6 @@ -# -# Copyright (C) 2017 MINDORKS NEXTGEN PRIVATE LIMITED -# -# 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. -# - -#Mon Dec 28 10:00:20 PST 2015 +#Sat May 26 01:12:12 HKT 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip From 245cc457ea4be873cbe2e427882cc097166e5452 Mon Sep 17 00:00:00 2001 From: huangweiqi Date: Sat, 26 May 2018 01:58:02 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=95=B4=E7=90=86=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/activity_main.xml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index cd66852..b9c020f 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -23,7 +23,7 @@ android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" - tools:context="com.mindorks.tensorflowexample.com.mindorks.tensorflow.MainActivity"> + tools:context="com.mindorks.tensorflow.MainActivity"> - @@ -55,25 +54,24 @@ android:scrollbars="vertical" android:gravity="center" android:textColor="@android:color/black" /> - -