使用 Tensorflow 开发花朵种类辨识 App

原文:https://tigercosmos.xyz/post/2017/07/ai/tensorflow-flower/index.html

前言

最近机器学习、人工智慧、深度学习等等名词非常夯,本篇用深度学习简单实作一个可以辨识不同种类花朵的 Android App。第一部分是训练图片的模型,这时已经可以在电脑上作辨识了。第二部分是将第一部份训练的模型放进 Android 里面,实作手机辨识的部分。

第一部分

环境设定

Anaconda

Anaconda 可以建立虚拟环境来跑 Python,好处是可以建立很多种不同的环境来测试,并且使用 Anaconda 时 pip 不用 root 权限。

$ wget https://repo.continuum.io/archive/Anaconda3-4.4.0-Linux-x86_64.sh$ bash Anaconda3-4.4.0-Linux-x86_64.sh

Python & Tensorflow

建立一个虚拟环境,因为我用 python2.7 搭配 tensorflow1.1 所以环境名称取为py2t1.1

$ conda create -n py2t1.1 python=2.7

安装好环境后,要进入虚拟环境,启用是用 activate

 $ source activate py2t1.1 (py2t1.1)$  # 会显示成这样

而取消启用是用 deactivate

 $ source deactivate

接着要安装 tensorflow,我这边版本是用 tensorflow1.1 python2.7 CPU 版本,有其他需求可以在这里找其他版本。

 (py2t1.1)$ pip install --ignore-installed --upgrade \ https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.1.0-cp27-none-linux_x86_64.whl

这样就把环境设置好了。

训练模型

前置作业

这时候可以在虚拟环境里,也可以不在。只有当要使用 python 跑 tensorflow 时才一定要进入设置好的虚拟环境。

建个资料夹

$ mkdir flower_classification$ cd flower_classification

取得花朵照片

curl -O http://download.tensorflow.org/example_images/flower_photos.tgztar xzf flower_photos.tgz

取得 retrain.py,这是使用 Inception v3 训练好的图片辨识模型,并在最后加上新的一层网络,然后重新训练一次模型来辨识照片。

$ curl -O https://raw.githubusercontent.com/tensorflow/tensorflow/r1.1/tensorflow/examples/image_retraining/retrain.py

开始训练

先进入环境

$ source activate py2t1.1
$ python retrain.py \  --bottleneck_dir=bottlenecks \  --model_dir=inception \  --learning_rate=0.5 \  --summaries_dir=training_summaries/long \  --output_graph=retrained_graph.pb \  --output_labels=retrained_labels.txt \  --image_dir=flower_photos

训练完之后会产生 retrained_graph.pbretrained_labels.txt,这两个档案可以拿来分析新的照片。

辨识照片

取得 label_image.py 这是辨识的程式码

$ curl -L https://goo.gl/3lTKZs > label_image.py

执行辨识

$ python label_image.py 要辨识的花朵照片.jpeg

结果大概会像这样

daisy (score = 0.99071)sunflowers (score = 0.00595)dandelion (score = 0.00252)roses (score = 0.00049)tulips (score = 0.00032)

第二部分

前置作业

tensorflow-for-poets-2 是 googlecodelab 的範例 Andriod App 专案

$ cd ~/$ git clone https://github.com/googlecodelabs/tensorflow-for-poets-2$ cd tensorflow-for-poets-2

将刚刚训练好的花朵辨识整个资料夹 flower_classification 複製进去

$ cp -r ~/flower_classification .

处理模型

优化

$ python -m tensorflow.python.tools.optimize_for_inference \  --input=flower_classification/retrained_graph.pb \  --output=flower_classification/optimized_graph.pb \  --input_names="Cast" \  --output_names="final_result"

压缩

$ python -m scripts.quantize_graph \  --input=flower_classification/optimized_graph.pb \  --output=flower_classification/rounded_graph.pb \  --output_node_names=final_result \  --mode=weights_rounded

rounded_graph.pbretrained_labels.txt 放进 android/assets 资料夹

$ cp flower_classification/rounded_graph.pb flower_classification/retrained_labels.txt android/assets/ 

安装 AndroidStudio

https://developer.android.com/studio/index.html

开启 Android 专案

打开 AndroidStudio,选择 "Open an existing Android Studio project",选择资料夹 tensorflow-for-poets-2/android。 然后它会问是否用 gradle,选择"ok"。 等 gradle 更新好之后,就可以 build 了。最后再把 APK 安装到手机上。

参考资料

https://codelabs.developers.google.com/codelabs/tensorflow-for-poets/index.html#0
https://codelabs.developers.google.com/codelabs/tensorflow-for-poets-2/#0


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章