与TensorFlow初见,竟如此虐心。【Tensorflow Lite 0.1.7 for Android】

最近做的项目前期阶段做的差不多了,主管让跑下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的变量 tflite

1 个错误


最后分析发现,是调用的setNumThreads(int)方法在org.tensorfow:tensorflow-lite-0.1.7中

interpreter.class中没有被定义导致的。但我又不相信官方代码会存在代码问题,所以就没想过动.Java代码。但后来再三尝试,解决了其他所有问题后,还是绕不开这个问题。最后废了九牛二虎之力,找到了另一个Tensorflow-Lite版本,核对Java代码块,发现之前的并没有这个函数,所以就注释了ImageClassifier.java中的这段代码。

同样,还有Camera2BasicFragment.java中的:


至此,编译成功。亲测。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值