最近做的项目前期阶段做的差不多了,主管让跑下Tensorflow-Lite的Demo,看下效率兼容性什么的。谁知道这个17年11月刚出的技能,对我一个还在校的小白来说,AndroidStudio中编译个demo都遇到了一堆问题。由于技术较新,网上资料帖子有限,不能解决所有的bug. 最后,在各种巧合下终于跑成功了。先将效果图展示如下:
接下来记录下加载流程及一部分编译运行中遇到的问题。
github链接如下:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite/java/demo
用的是官方文档中的这个方法:
Build in Android Studio with TensorFlow Lite AAR from JCenter
Use Android Studio to try out changes in the project code and compile the demo app:
- Install the latest version of Android Studio.
- Make sure the Android SDK version is greater than 26 and NDK version is greater than 14 (in the Android Studio settings).
- Import the
tensorflow/contrib/lite/java/demo
directory as a new Android Studio project.- Install all the Gradle extensions it requests.
To get a model, either:
- Download the quantized Mobilenet TensorFlow Lite model and unzip and copy
mobilenet_quant_v1_224.tflite
to the assets directory:tensorflow/contrib/lite/java/demo/app/src/main/assets/
.- Or, download the floating point Inception-v3 model and unzip and copy
inceptionv3_non_slim_2015.tflite
to the assets directory. Change the chosen classifier in Camera2BasicFragment.java
from:classifier = new ImageClassifierQuantizedMobileNet(getActivity());
to:classifier = new ImageClassifierFloatInception(getActivity());
.Now you can build and run the demo app.
(以上方法复制粘贴,注意版本号!!!我用的AndroidStudio3.0.1,SDK 26,NDK 15. 文档链接https://github.com/tensorflow/tensorflow/blob/master/tensorflow/docs_src/mobile/tflite/demo_android.md)
1. 导入工程。
2. 根据提示更新gradle,SDK,NDK等
3. 各种依赖、插件的版本网上都可以找到。只要版本没问题就可以,但是下边这个错误,让我真是煞费苦心。
由于之前未接触过Tensorflow,并不了解代码细节。实在不想看到这个错误, 错误: 找不到符号
tflite.setNumThreads(num_threads);
^
符号: 方法 setNumThreads(int)
位置: 类型为Interpreter的变量 tflite1 个错误
最后分析发现,是调用的setNumThreads(int)方法在org.tensorfow:tensorflow-lite-0.1.7中
interpreter.class中没有被定义导致的。但我又不相信官方代码会存在代码问题,所以就没想过动.Java代码。但后来再三尝试,解决了其他所有问题后,还是绕不开这个问题。最后废了九牛二虎之力,找到了另一个Tensorflow-Lite版本,核对Java代码块,发现之前的并没有这个函数,所以就注释了ImageClassifier.java中的这段代码。
同样,还有Camera2BasicFragment.java中的:
至此,编译成功。亲测。