介紹
前言
AI (Artificial Intelligence)可謂是最近最熱門的科技技術之一,作為電腦新手,想要應用AI技術其實並不難。皆因現在很多開發公司已經提供了不同版本的API模型。我們只需配置適當開發環境,並安裝相應的模型便可一嘗AI入門技術。因此,就算你沒有相關知識,也可以實現不少AI功能。在是次應用中,我們將會實現物件檢測(object recognition)功能,用到的API是到Google釋出的Tensorflow Object Detection模型。模型效果圖如下,是不是很心動想創造屬於自己的物件檢測程式呢?我們一起動手試下吧!
配置環境
安裝Python
Windows 以及 MacOS 用戶可直接從Python官網下載安裝,建議安裝3.7版本
Linux用戶則可透過從終端機(Terminal)安裝,指令如下
1 | sudo apt-get install python3.7 |
安裝Tensorflow
打開你的終端機(Terminal),並且按照以下指令安裝配置環境。
1 | pip3 install tensorflow |
安裝相關庫
Windows 以及 MacOS 用戶透過從終端機(Terminal)安裝
1 | pip3 install --user Cython |
Ubuntu Linux用戶則可以使用apt安裝其餘的套件
1 | sudo apt-get install protobuf-compiler python-pil python-lxml python-tk |
下載物件識別API
新建資料夾”Tensorflow”,到API的Github官網 https://github.com/tensorflow/models
Clone/下載 models-master資料夾(下載需時請耐心等待),重命名為models,放進Tensorflow內,目錄示意圖如下
1 | TensorFlow |
編譯 Protobuf 函式庫
在使用Tensorflow Object Detection API前,需要先編譯 Protobuf 函式庫
打開終端機,依次進入Tensorflow、models,最終到達research目錄內,方法如下:
1 | cd Tensorflow/models/research |
輸入以下指令,編譯 Protobuf 函式庫
1 | protoc object_detection/protos/*.proto --python_out=. |
輸入以下指令將 models/research 與 models/research/slim 加入 PYTHONPATH 環境變數中
這個步驟在每次使用 Tensorflow Object Detection API 之前都要執行
1 | export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim |
運行範例程式
開啟 Jupyter Notebook
Tensorflow Object Detection API 的原始碼中有附帶一個簡單的入門範例程式,位於 models/research/object_detection/object_detection_tutorial.ipynb,適合初學者來學習如何使用這套 API,這個範例程式是一個 .ipynb 的文件,需要在 IPython Notebook 環境中執行。因此,我們需要開啟並且運行Jupyter Notebook,並找到以下路徑。
運行範例程式
打開object_detection_tutorial.ipynb
點擊”Cell”,選擇”Run All” 運行程式的所有代碼
tf.gfile.GFile 不適用而報錯的解決方法
根據指示,找到 utils/label_map_util.py 檔案,在137行把 tf.gfile.GFile 修改為 tf.io.gfile.GFile ,操作如下:
ImportError: cannot import name ‘string_int_label_map_pb2’報錯解決方法
這個錯誤很大機會出現在MacOS或者Windows系統用戶,因為其系統無法從源文件匯入資料
解決方法如下,來到object_detection/utils資料夾,開啟label_map_util.py修改以下代碼
若問題依舊,需要在終端機 位置(Tensorflow/models/research)運行以下兩句
1 | protoc object_detection/protos/*.proto --python_out=. |
自行加入圖片進行物件識別
最後,我們可以加入圖片測試識別的準確度,這裡我用了 image3.jpg 及image4.jpg
把圖片加入到 models/research/object_detection/test_images 資料夾內,命名圖片為”imageX.jpg”,X為數字。
然後後打開Jupyter Notebook,回到 object_detection_tutorial.ipynb 中,找到 “Detection”功能代碼所在 (122行)
根據圖片名稱,修改其中第六行的range()內的數值,用我上面的例子,我只想檢測圖片image3.jpg 和image4.jpg
因此,我要修改為 range(3, 5),第一個數值是imageX中X的值 = 3,第二個數值則是第二張圖片imageX中的X+1 = 5