tensorflow移植到Android端,实现物体检测自动拍照
发布时间:2024-10-14
摘要: tensorflow移植到Android端实现物体检测1.tensorflow是什么:是谷歌基于DistBelief进行研发的第二代人工智能学习系统。2.为什么要使用tensorflow在手机端进行物体检测:??前一篇博客中讲到,将o
tensorflow移植到Android端实现物体检测

1. tensorflow是什么:

是谷歌基于DistBelief进行研发的第二代人工智能学习系统。

2. 为什么要使用tensorflow在手机端进行物体检测:

? ? 前一篇博客中讲到,将opencv移植到android中,检测到指定物体自动拍照,虽然说是功能确实可以实现,但是opencv毕竟比较落后了,识别的错误率还是很大的,于是便引入了tensorflow进行物体分类检测,在很大程度上提高了识别率以及正确率。

本篇博客主要讲解一下,tensorflow是怎样移植到手机端的,以及自定义的模型是怎样训练的。

1. 下载tensorflow项目(地址:https://github.com/tensorflow/tensorflow)

2. python环境(我是用的是python3.5的)

3. tensorflow安装(有两个版本,cpu版,gpu版,显然gpu训练模型时要快很多,这个视电脑配置而定吧,一般安装anaconda,直接执行:conda install tensorflow安装即可,我使用了tensorflow-gpu版本,需要nvidia显卡支持,命令:conda install tensorflow-gpu)

4. Android Studio (我使用了2.3.3版本)

5. 下载?libtensorflow_inference.so 以及?libandroid_tensorflow_inference_java.jar文件,(这两个文件可以使用源码进行编译生成),链接:https://pan.baidu.com/s/1tN_nNqfy6JC272J17VaWTg 密码:boat

1. 准备数据集

使用tensorflow训练模型,该分类的类别数必须大于等于2的(没有背景这一类别),举例:

如果需要进行识别人和狗两种类别,那么:需要准备图片(只有狗在里面的)100来张,放入dogs文件夹,同时准备图片(只有人在里面的)100来张,放入peoples文件夹,图片越多训练出来的模型越精确,每个类别100来张只能说勉强够用,

将两个类别的文件夹放置:

tensorflow_master/tensorflow/examples/image_retraining/data/train 中

data/train文件夹没有的话,自行新建

2. 准备预训练模型

训练模型需要用到imagenet预训练权重,4个文件(classify_image_graph_def.pb,imagenet_2012_challenge_label_map_proto.pbtxt,imagenet_synset_to_human_label_map.txt,inception-2015-12-05.tgz),下载链接:链接:https://pan.baidu.com/s/1JlDbYy4NHD7qy3Or5lDtSg 密码:i3jo

提前下载拷贝至 model文件夹下,没有该文件夹请自行新建,否则会自动下载很慢的

3. 开始训练

cd 进入tensorflow_master ensorflow\examples\image_retraining文件夹:

执行命令:

 

执行完毕会在tensorflow_master ensorflow\examples\image_retraining文件夹下生成两个文件:

output_graph.pb ?以及output_labels.txt

4. 上一步骤中生成的模型不能直接放置到Android中,需要一步转化:官方的解释:

 

cd 进入tensorflow_master ensorflow\python ools文件夹,将上步中生成的 output_graph.pb 文件复制到改目录下,执行命令:

 

即可在改目录下生成 output.pb 文件。

至此,模型训练完毕。

1. 新建项目后,在\app\src\main目录下 新建assets以及jniLibs两个目录,将之前生成的 output.pb 以及 output_labels.txt文件拷贝至assets文件夹下

2. 在jniLibs文件夹下新建armeabi-v7a 文件夹,将?libtensorflow_inference.so 拷贝至 jniLibs\armeabi-v7a 文件夹下

3. 将libandroid_tensorflow_inference_java.jar 添加至项目中,不会的直接搜索 Android Studio添加jar。

4. 新建一个类(Classifier.Java):

5. 新建识别实现类 ( 
TensorFlowImageClassifier.Java) 
 


5. 在识别的Activity中

定义一些变量:

 


添加初始化 tensorflow 方法:

 


这里的图片官方说法是使用299 * 299的,其他规格大小试了几个都有问题,有的大了,有的提示不是2048的倍数,总之不想一直纠结,可以将图片裁剪一下,一句话代码:

 

开始识别,直接调用即可:

 

返回的 results 是一个List集合,存放有预测物体的名称,以及预测的准确率

可以发现比之前的opencv 准确多了。

Android程序截图如下,与之前的Android项目类似,只是替换了识别地方的代码:

?


最后附上Android源码的下载地址(由于项目过大,因此不含tensorflow的模型):

https://download.csdn.net/download/qq_27063119/10346591






标签:文件,id,in,训练

平台注册入口