# 影像辨識訓練模型-傅品柔
關於此app其功能- 校園導覽(辨識校園大樓)
## 1.找到適合的模型
首先我們到Tensorflow Lite的官網上尋找官網提供的各類模型。
找到一個適合運用在辨識大樓的模型。
![](https://i.imgur.com/8dBBzfO.png)
官網提供很多種類的model,可以依照需求去更改內容。
我們使用一個辨識動物種類的model。
利用鏡頭,對準需要辦別的畫面,進行判斷。
找到適合的模型後,我們將模型置入colab上進行照片的訓練。
(以下是我們置入colab中的模型畫面)
![](https://i.imgur.com/ySTO1tM.png)
#### 第一步:
先點選「執行階段」 進入 「變更執行階段類型」
#### 第二步:
將選項改成「GPU」
![](https://i.imgur.com/sD0VlRo.png)
---
![](https://i.imgur.com/hUrHSZk.png)
設定完成後,接下來開始匯入照片。
___________________________________________________
## 2.匯入照片
![](https://i.imgur.com/7sgSgS3.png)
依照上圖提示,可將欲訓練的圖片檔案上傳至模型。
*利用```image_path```建立一個zip檔案,再將所有檔案一次上傳即可。*
```
#_URL = 'https://storage.googleapis.com/mledu-
datasets/cats_and_dogs_filtered.zip'
#path_to_zip = tf.keras.utils.get_file('cats_and_dogs.zip', origin=_URL, extract=True)
這兩行程式碼我們註銷掉,原因是我們使用上傳雲端硬碟的方式一一將照片匯入。
但應該是要直接使用```image_path```,直接上傳zip檔才是最正確的方式。
PATH = os.path.join('Dog')
train_dir = os.path.join(PATH)
#validation_dir = os.path.join(PATH, 'validation')
```
## 3.模型架構
此時匯入的model為 **FlowerModel.tflite**
***基本上主程式碼不需作修改,但如要讓顯示的畫面有所不同,就要調整數據。***
我們將官網範例用來判斷花朵的模型(flowerModel.tfite),先改成判斷貓或狗作測試(TfLite_cat_dog)。取名的部分不要被混淆了
---
> 為了實現這個例子,我們首先需要安裝幾個必需的包。
```
!pip install -q tflite-model-maker
```
![](https://i.imgur.com/fDm2ja3.png)
```
import tensorflow as tf
import os
import matplotlib.pyplot as plt
```
```
#_URL = 'https://storage.googleapis.com/mledu-datasets/cats_and_dogs_filtered.zip'
#path_to_zip = tf.keras.utils.get_file('cats_and_dogs.zip', origin=_URL, extract=True)
PATH = os.path.join('test2')# 此(名稱)=上傳照片的zip檔名
train_dir = os.path.join(PATH)
#validation_dir = os.path.join(PATH, 'validation')
```
```
train_dir
```
> 使用DataLoader類加載數據。
---
至於from_folder()方法,它可以從文件夾中加載數據。假設同一個類的圖像數據在同一個子目錄下,子文件夾名就是類名。目前支持 JPEG的圖像和 PNG的圖像。
```
from tflite_model_maker import ImageClassifierDataLoader
data = ImageClassifierDataLoader.from_folder(train_dir)
train_data, test_data = data.split(0.9)
```
---
以下是可以自訂顯示數據的部分
參考1.[https://vimsky.com/zh-tw/examples/usage/matplotlib-pyplot-xticks-in-python.html](https://)
*```plt.xticks()```與```plt.yticks()```語法意義*
參考2.https://newbedev.com/python-plt-grid-false-code-example
```plt.grid(False)```
參考3.[https://ithelp.ithome.com.tw/articles/10203624](https://)
```Numpy```意義
```
plt.figure(figsize=(10,10))
#其中figsize用來設置圖形的大小,a為圖形的寬, b為圖形的高。
單位為英寸。得知目前為10x10的圖。
for i, (image, label) in enumerate(data.gen_dataset().unbatch().take(25)):
#列舉出偵測到的圖片
plt.subplot(5,5,i+1)
#第一個5參數是子圖的行數,第二個5參數是子圖的列數(等於5行*5列)。
第三個i+1參數是代表第一個子圖,如果想要設置子圖的寬度和高度可以在函數內加入figsize值。
而i+1會隨層級式堆疊新增。
plt.xticks([]) #x行無別名 。舉例經濟供需曲線圖 x為數量y為價格
plt.yticks([]) #y列無別名
plt.grid(False) #是否要顯示網格 此處為否
plt.imshow(image.numpy(), cmap=plt.cm.gray)#iput(照片,準確度)
plt.xlabel(data.index_to_label[label.numpy()])
plt.show()
```
![](https://i.imgur.com/l58024b.png)
執行後畫面(箭頭指處)
---
參考資料1.[https://www.tensorflow.org/tutorials/images/classification](https://)
2.https://www.sciencedirect.com/topics/engineering/image-classification
運用神經網路分類圖像
```
from tflite_model_maker import image_classifier
model = image_classifier.create(train_data)
```
---
評估模型的結果,得到模型的損失和準確率。
```
loss, accuracy = model.evaluate(test_data)
```
顯示畫面示意
![](https://i.imgur.com/uuSn1HI.png)
---
參考資料
[https://www.tensorflow.org/lite/tutorials/model_maker_image_classification](https://)
---