Tensorflow在手机端的部署——官方demo的直接运行(1)

Tensorflow在手机端的部署——官方demo的直接运行(1)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/c20081052/article/details/82865830

开篇话:

许久没有写些什么了,最近在研究深度学习训练的网络模型在移动设备端的部署问题,针对完全白纸一张的我准备写点资料记录下趟过的坑,期间看了些技术博客,修补个各种bug,怕日后再遇到,因此准备写下来。

准备写个系列篇:就叫Tensorflow在手机端(移动设备)的部署;本文为该系列的第一篇,主要是讲解如何将官网提供的轻量级模型转为安卓端的apk文件,以便手机安装。


首先,我尝试成功的环境是:

win10-64位系统;    

Android Studio: 3.2.0        下载链接:Android Studio下载链接

Android SDK: 

Android NDK:                  (先别急着下载)下载链接:Android NDK下载链接

Tensorflow:                        下载链接:tensorflow下载链接

预训练的mobilenet v1 轻量化模型文件:mobilenet_quant_v1_224.tflite 和 labels_mobilenet_quant_v1_224.txt

模型下载链接:量化模型下载


step1:安装Android Studio

去上面提供的官方链接去下载你系统对应的版本,我下载的是:android-studio-ide-181.5014246-windows.exe

 提供一个国内镜像下载地址https://github.com/inferjay/AndroidDevTools

下载完之后,如果是安装包,可以直接安装即可;如果是解压包,可以解压后,直接运行(安装目录下的studio.exe文件)

我是直接去的官网下载的。

安装过程 如下:

点击Next

勾选Android Virtual Device 点击Next

选择安装目录, 默认是在C盘,强调下安装目录最好是英文的,不要出现中文;

点击Install就可以开始安装了。

安装完成点击Next

点击 Finish

选择Do not import setting后点击OK

提示无法载入Android SDK,没关系,之后下载,此处点击Cancel;

上图点击Next

上图选择Custom自定义(主要是为了更改页面风格,非必须),点击Next

推荐选择Darcula 这个风格,保护视力。点击Next

选择一个SDK安装下载的路径,建议路径不要有空格,最好英文的路径。采用默认路径 风格,要不然后面会提示SDK路径丢失问题。点击Next;

它会在路径目录下下载相应版本的SDK文件。

点击Finish

点击Configure中的SDK Manager

选择SDK Platforms,找到你想下载的安卓版本,现在安卓设备系统几乎都4.0以上,针对自己手机或其他设备进行版本下载,默认是9.0,我还选择了8.1,因为我的设备是这个版本。

选择SDK Tools,勾选NDK进行下载;

上述两步选择完后,点击Apply,然后Accept,点击Next进行下载。


Step2: 用Android Studio打开工程文件

然后用安卓Studio打开现有的一个项目。这个项目我选择的是tensorflow下的一个demo,首先你按照我最上面提供的tensorflow网站下载tensorflow-master文件,我将其解压到桌面,然后将Desktop\tensorflow-master\tensorflow\contrib\lite\java 目录下的demo文件夹拷贝一份放在桌面,用Android Studio打开如下。它会进行同步Sync操作,然后会有事件log提示一些存在的错误。

接下来就事各种披荆斩棘的坑需要填了,总之log中提示需要安装什么,你就点击安装,期间安装过程可能很漫长,一定要耐心,不过也有可能是卡机,可以试着关闭工程,然后重新打开工程,如此反复知道它提示同步完成,如下:

Sync完成后接下来就是Build,期间也是漫长的等待,参考上面的方法可以重新开启工程(因为优势不确定是不是卡机),这也和网速很有关系。如果Build没问题,会提示如下,


Step3:将下载的预先训练的轻量化模型放入目录

 

将下载的mobilenet_quant_v1_224.tflite以及对应的标签labels_mobilenet_quant_v1_224.txt放到

demo\app\src\main\assets 这个 文件夹下。之后就可以build和run了。

这个模型训练的类别涵盖1000种,包括背景的话1001种。可以选择线程数量,会取前几个概率大的类别进行显示。


点击Run'app',该过程也有可能有错误产生。你需要将手机连接电脑, 

手机设置成开发者模式。我的手机是小米的,安卓系统8.1

然后会自动下载安装APP到你手机端。

然后手机端会安装了一个叫TfLite Cam的APP,测试结果如下:

我最后SDK Tools下载的情况如下:其中遇到过NDK版本问题(下述问题4),因此参考网上一个解决方法,选了个版本较低的;

 


可能遇到的错误如下:

1:Could not find com.android.tools.build:gradle:3.0.1

参考:https://blog.csdn.net/m00123456789/article/details/78917629

https://blog.csdn.net/qq_22703355/article/details/79713363

https://blog.csdn.net/qq_28336351/article/details/74178349

提示找不到gradle:3.0.1 
在顶层build.gradle 中,可以看到build.gradle的配置:

  1.  
    buildscript {
  2.  
    repositories {
  3.  
    jcenter()
  4.  
    }
  5.  
    dependencies {
  6.  
    classpath 'com.android.tools.build:gradle:3.0.1'
  7.  
     
  8.  
    // NOTE: Do not place your application dependencies here; they belong
  9.  
    // in the individual module build.gradle files
  10.  
    }
  11.  
    }

将其修改为:

  1.  
    buildscript {
  2.  
    repositories {
  3.  
    jcenter()
  4.  
    maven {
  5.  
    url 'https://maven.google.com'
  6.  
    }
  7.  
    }
  8.  
    dependencies {
  9.  
    classpath 'com.android.tools.build:gradle:3.0.1'
  10.  
     
  11.  
    // NOTE: Do not place your application dependencies here; they belong
  12.  
    // in the individual module build.gradle files
  13.  
    }
  14.  
    }

2:Could not find com.android.support.constraint:constraint-layout:1.0.2错误的解决

出现这个问题是因为Android Studio需要安装插件才可以运行这个包。 

解决方法是:

Tools-Android-SDK Manager-选择SDK Tools标签-选中Show Package Details-找到Support Repository-ConstraintLayout for Android

-安装当前系统需要的版本即可。

 

3:your android sdk is missing, out of date or corrupted

解决方法:

your android sdk is missing, out of date or corrupted,修改Android SDK Location 默认位置,重新安装,(原因是我把原先的sdk全删了),大概等个5~10分钟(据网络不同),直到Android sdk is up to date, -> finish 

 

4:Android Studio 报错显示 mips64el-linux-android-strip 找不到

Sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/linux-x86_64/bin/mips64el-linux-android-strip 找不到, 导致编译报错

也就是说在Sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/linux-x86_64/ 路径下找不到 mips64el-linux-android-strip
如果ndk版本在r17版, 很有可能出现这个问题. 我的解决方案是:

  1. 先清除 Sdk/ndk-bundle/ 下的内容
  2. 从 https://developer.android.google.cn/ndk/downloads/older_releases 下载16b版本的ndk到本地, 并解压说, 将解压缩后的所有文件拷贝到Sdk/ndk-bundle/ 目录下
  3. 重新build工程

参考:https://blog.csdn.net/bylaven/article/details/80331345


AS安装方法参考:

https://www.cnblogs.com/yangfengwu/p/9065406.html

https://www.cnblogs.com/yanglh6-jyx/p/Android_AS_Configuration.html  (这个写的很细)

部署参考(TF部署到Android):

https://www.bilibili.com/video/av32170223/?p=2

https://blog.csdn.net/dy_guox/article/details/80192343

posted on 2019-11-25 14:50  曹明  阅读(1055)  评论(0编辑  收藏  举报