1. 程式人生 > >在android手機上執行自己訓練的MobileNet模型識別手勢數字,通過修改官方例程app實現

在android手機上執行自己訓練的MobileNet模型識別手勢數字,通過修改官方例程app實現

使用MoblieNet訓練了一個識別數字手勢的模型,先看看識別效果。


下面是教程:

首先要從git上下載官方的例程,https://github.com/tensorflow/tensorflow

之後分為兩步,

第一步蒐集足夠多的樣本圖片,使用官方例程中的tensorflow/examples/image_retraining訓練出自己的模型。

由於找不到合適的手勢圖片集,我使用手機的連拍功能,找了幾個小夥伴,一起拍了大概三千張照片,製作了一個簡單的手勢圖片集。


之後再image_retraining目錄下建立一個資料夾,將圖片放入,在子資料夾中分類,子資料夾名稱就是類別名稱。

之後執行retrain.py指令碼

python retrain.py     --image_dir hands   --architecture mobilenet_1.0_224 --output_labels hands_labels.txt --output_graph hands_graph.pb 
image_dir 是圖片資料夾名
architecture 是所選用的模型
output_labels 是輸出的模型名
output_graph 是模型對應的label檔案

其中label和graph檔案使我們需要的兩個檔案,成功生成這兩個檔案後可以進行第二步。

第二步是修改tensorflow/examples/android這個程式。

先安裝android studio,然後選擇open project,開啟tensorflow/examples/android,編譯執行,中間需要什麼庫就安裝什麼庫。執行成功後手機上會安裝四個demo app,挺有意思,大家可以玩玩。

我們通過修改其中的TF classify,在其中執行我們剛剛訓練的自己的模型。

首先將剛剛生成的pb和txt檔案放入tensorflow/examples/android/asset資料夾內

修改tensorflow/examples/android/src/org/tensorflow/demo/ClassifierActivity.java中的

	private static final int INPUT_SIZE = 224;   
	private static final int IMAGE_MEAN = 128;
	private static final float IMAGE_STD = 128 ;
	private static final String INPUT_NAME = "input";
	private static final String OUTPUT_NAME = "final_result";

	private static final String MODEL_FILE = "file:///android_asset/hands_graph.pb";   (改成自己的pb)
	private static final String LABEL_FILE =
	    "file:///android_asset/hands_labels.txt";(改成自己的txt檔名)
編譯執行,之後就會發現TF classify中已經變成了自己的模型。