在安卓平台使用tensorflow
最近更新 2017.6.7
添加了app预览如下,更详细请到github
分类预览1:
拍照分类:
程序启动:
自动分类为相册:
最近更新 2017.3.7
注意
最近有几个小伙伴询问移动端平台怎样使用自己的模型以及其他相关问题,我对部分问题做了总结,相关的内容在另外一篇博客中,点这里查看。另外大家要使用自己的模型请直接到上述博客中查看,本博客的所用的tf版本太旧,移植自己的模型可能会出现问题。
另外我做的用0.12版本tf做了一个图片分类相册应用(android),tf部分已经可以正常使用了,大家可以到我的github查看
前言
最近在Android平台上需要用到图片分类的技术,tensorflow是谷歌发布的一个开源的机器学习的框架,可以在pc端以及移动端使用。虽然官方提供了一个Android的demo我也成功安装到手机上运行了,但是对于之前没有接触过安卓开发的我来说,将tensorflow移植到我的项目并且在android studio上继续开发仍然很困难…。走了好多条弯路后,我终于成功将它运行到我写的app上了,下面分享一下怎样将tensorflow移植到android上。
开始
首先我们先从github克隆tensorflow的demo,需要注意的是这个demo不是官方的demo,而且也不是基于最新的0.12版本,只是0.10版本。克隆这个的原因是这个项目已经将官方的demo移植android studio上了,不用我再配置编译。克隆后从studio打开,建立虚拟机模拟运行
问题1:
无法运行报错:INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113
原因是安卓模拟器是x86构架的,然而这个项目中使用的tensorflow的动态链接库是arm的,因此无法在这个模拟机中模拟。首先我想到该怎样编译一个x86的动态链接库,然而不好意思,我折腾了一天也没成功。后来用在studio中新建了一款arm的模拟器,虽然能跑了,但是实在是太慢了,可是我又没有android手机,所以只能这样用了。不过虽然这个虚拟机在开机的时候需要将近10分钟,但是开机之后速度会快一点,虽然赶不上x86的模拟器,但是对于小任务量的任务也能凑合用
解决方案:新建一个arm的模拟器,开机时间很长,开机后速度还能忍;有能力的可以自行编译x86的动态链接库
分析源码
在Android中 native修饰的就是使用动态链接库中的接口,对于这个图片分类的demo,看了这写java代码,我们可以找到tensorflow的3个接口如下
// load the tensorflow
public native int initializeTensorFlow(
AssetManager assetManager,
String model,
String labels,
int numClasses,
int inputSize,