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):

  1. 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、总结

这个是对于官方历程的一个实现。仅供参考。有啥问题,大家可以在下面提,我看到消息会及时回复。

猜你喜欢

转载自blog.csdn.net/qq_40214464/article/details/122414407