tensorflow lite 1---- 移动端部署--object detection 官方历程手把手教程
Posted 行码阁119
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tensorflow lite 1---- 移动端部署--object detection 官方历程手把手教程相关的知识,希望对你有一定的参考价值。
配置过程出 出现了太多问题。而且由于自己是小白,从开始接触tflite到布置成功,走过了很多弯路,这里主要是把自己遇到的问题记下来。以及详细流程。帮助和我一样的小白。(请勿转载哈)
这篇文档适合全新小白
一、下载官方历程:
https://github.com/tensorflow/examples/tree/master/lite/examples/object_detection/android
如果打不开,可能需要翻墙哈。或者也可以这么试试:
百度搜收:tensorflow lite 点进去,然后点击如下即可:
二、环境配置:
我使用的是android studio
我也使用了android studio 3.5.2,没成功,我最后使用的是4.0的版本,安装教程可以百度大同小异。
三、导入模型(关键)
3.1 打开android studio->然后点击open
3.2找到官方历程文件夹,我对应的是:
G:\\example\\examples-master\\examples-master\\lite\\examples\\object_detection\\android
点击ok,即可。
然后你会发现,右下角在下载,如果等他结束,成功了,万幸:
然后这里没报错,那么就是万幸。但是一般感觉都会错,如果错了,就直接 这样处理就可以了:
很奇怪,第一次做的时候一直报错,第二次就不报错了。但是为了怕小白不会,这里还是稍微提一下,一般报错原因就是,gradle,需要翻墙去下载,到底下载速度过慢,于是报错,
Error:Connection timed out: connect
3.2.1首先点击:
然后对应版本:
然后进入:Gradle Distributions,去下载对应的版本。
3.2.2下载了后,先不要解压。进入文件夹:
C:\\Users\\LENOVO\\.gradle\\wrapper\\dists\\gradle-6.8.3-bin\\7ykxq50lst7lb7wx1nijpicxn
我们唯一不一样的可能是:用户和最后的乱码哪里。这个乱码是随机生成的,不用管。进入文件,你会看到:
把一下两个文件删除:
只保留:
然后把你刚刚下载的对应版本,放进来解压:
然后重启Android或则点击:
最后,这个问题就解决了。
3.3 ,在上述的基础上,点击build->make project:
3.3.1 在这里,容易报这样的错:
Connection timed out: connect. If you are behind an HTTP proxy,please configure the proxy settings either in IDE or Gradle.
其实报错也很简单,这个由于是官方的demo,我们刚刚下载的就是官方源码,在建立项目的时候,他就会去下载我们需要对应的tflite和label.txt文件,但是还是那句话,需要翻墙,我翻墙了还是会报错。在这个问题上困扰了很久, 最后修改download_model.gradle:
对应:\\app\\download_model.gradle
task downloadModelFile(type: Download)
src 'https://tfhub.dev/tensorflow/lite-model/ssd_mobilenet_v1/1/metadata/2?lite-format=tflite'
dest project.ext.ASSET_DIR + '/detect.tflite'
overwrite false
preBuild.dependsOn downloadModelFile
src 'https://tfhub.dev/tensorflow/lite-model/ssd_mobilenet_v1/1/metadata/2?lite-format=tflite'
改为(参考:Connect to tfhub.dev:443 [tfhub.dev/216.58.200.238] failed 问题解决_sinat_29217765的博客-CSDN博客_tfhub.dev):
-
src 'https://hub.tensorflow.google.cn/tensorflow/lite-model/ssd_mobilenet_v1/1/metadata/1?lite-format=tflite&hl=zh_cn'
然后运行3.3,报错:
Unknown host '不知道这样的主机。 (www.gstaticcnapps.cn)'. You may need to adjust the proxy settings in Gradle.
Learn about configuring HTTP proxies in Gradle
最终改为:
https://hub.tensorflow.google.cn/tensorflow/lite-model/ssd_mobilenet_v1/1/metadata/1
然后运行3.3,成功!你会发现assent文件夹下多了detect.tflite和labelmap.txt文件:
最后,成功:
3.3 点击ran,然后报错如下:
需要配置一个虚拟手机,或则将自己的手机链接Android即可。
链接自己的手机可以参考:Android studio 如何连接手机_hasfhaiogheiohf的博客-CSDN博客_android studio连接手机
这里讲解链接虚拟手机:
首先知道自己对应的版本,demo要求的是30(这里build成功后,所有的.gradle放置在一起了):
然后点击:
这里虚拟手机可以自己选择,如果不知道怎么选,又害怕报错的,可以参考:
选定,点击next,:然后找到刚刚对应的版本,点击下载:
这里比较大,下载需要一哈哈。
下载结束,然后选择:
然后配置如下条件:
最后点击run。
最后可能啥都识别不大,然后回去点击
发现出现一下错误:The model is not a valid Flatbuffer buffer
E/tflite: The model is not a valid Flatbuffer buffer
E/TaskJniUtils: Error getting native address of native library: task_vision_jni
java.lang.IllegalArgumentException: Error occurred when initializing ObjectDetector: The model is not a valid Flatbuffer buffer
at org.tensorflow.lite.task.vision.detector.ObjectDetector.initJniWithByteBuffer(Native Method)
at org.tensorflow.lite.task.vision.detector.ObjectDetector.access$100(ObjectDetector.java:88)
at org.tensorflow.lite.task.vision.detector.ObjectDetector$3.createHandle(ObjectDetector.java:223)
at org.tensorflow.lite.task.core.TaskJniUtils.createHandleFromLibrary(TaskJniUtils.java:91)
at org.tensorflow.lite.task.vision.detector.ObjectDetector.createFromBufferAndOptions(ObjectDetector.java:219)
at org.tensorflow.lite.examples.detection.tflite.TFLiteObjectDetectionAPIModel.<init>(TFLiteObjectDetectionAPIModel.java:88)
at org.tensorflow.lite.examples.detection.tflite.TFLiteObjectDetectionAPIModel.create(TFLiteObjectDetectionAPIModel.java:82)
at org.tensorflow.lite.examples.detection.DetectorActivity.onPreviewSizeChosen(DetectorActivity.java:99)
at org.tensorflow.lite.examples.detection.CameraActivity.onPreviewFrame(CameraActivity.java:200)
at android.hardware.Camera$EventHandler.handleMessage(Camera.java:1227)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
E/tensorflow: CameraActivity: Exception!
java.lang.IllegalStateException: Error getting native address of native library: task_vision_jni
at org.tensorflow.lite.task.core.TaskJniUtils.createHandleFromLibrary(TaskJniUtils.java:95)
at org.tensorflow.lite.task.vision.detector.ObjectDetector.createFromBufferAndOptions(ObjectDetector.java:219)
at org.tensorflow.lite.examples.detection.tflite.TFLiteObjectDetectionAPIModel.<init>(TFLiteObjectDetectionAPIModel.java:88)
at org.tensorflow.lite.examples.detection.tflite.TFLiteObjectDetectionAPIModel.create(TFLiteObjectDetectionAPIModel.java:82)
at org.tensorflow.lite.examples.detection.DetectorActivity.onPreviewSizeChosen(DetectorActivity.java:99)
at org.tensorflow.lite.examples.detection.CameraActivity.onPreviewFrame(CameraActivity.java:200)
at android.hardware.Camera$EventHandler.handleMessage(Camera.java:1227)
这里错误原因是:我们刚刚下载的detect.tflite出现了问题,这里推荐一个官方的tlite版本供下载:
链接: https://pan.baidu.com/s/1tP1hFljPSnKpNLOf7SDMsw 提取码: fs2t 复制这段内容后打开百度网盘手机App,操作更方便哦
然后放到对应的问价下,再点击run,就可以运行了。没问题! 妥妥的
最后会出现:
(手表移动到手机框框内,然后点击ALT,移动鼠标,视野转到)
4、总结
这个是对于官方历程的一个实现。仅供参考。有啥问题,大家可以在下面提,我看到消息会及时回复。
以上是关于tensorflow lite 1---- 移动端部署--object detection 官方历程手把手教程的主要内容,如果未能解决你的问题,请参考以下文章
终于!谷歌移动端深度学习框架 TensorFlow Lite 正式发布
tensorflow lite 1---- 移动端部署--object detection 官方历程手把手教程
tensorflow lite 1---- 移动端部署--object detection 官方历程手把手教程
谷歌移动端深度学习框架 TensorFlow Lite 正式发布