新手也會用AI | 物件識別 | TensorFlow

介紹

前言

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
2
3
4
5
6
pip3 install --user Cython
pip3 install --user contextlib2
pip3 install --user pillow
pip3 install --user lxml
pip3 install --user jupyter
pip3 install --user matplotlib

Ubuntu Linux用戶則可以使用apt安裝其餘的套件

1
2
3
4
5
sudo apt-get install protobuf-compiler python-pil python-lxml python-tk
pip3 install --user Cython
pip3 install --user contextlib2
pip3 install --user jupyter
pip3 install --user matplotlib

下載物件識別API

新建資料夾”Tensorflow”,到API的Github官網 https://github.com/tensorflow/models
Clone/下載 models-master資料夾(下載需時請耐心等待),重命名為models,放進Tensorflow內,目錄示意圖如下

1
2
3
4
5
6
TensorFlow
└─ models
├── official
├── research
├── samples
└── tutorials

編譯 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
2
protoc object_detection/protos/*.proto --python_out=.
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim



自行加入圖片進行物件識別

最後,我們可以加入圖片測試識別的準確度,這裡我用了 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



運行成功,看看識別結果!


即使不熟電腦/AI的你,也能嘗試使用AI技術

文章作者: icthk
文章鏈接: https://icthk.github.io/2_ObjectReconition.html
版權聲明: 本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 ICTHK Blog