Google開發的Coral USB Accelerator是一款能夠滿足Edge AI的USB硬體裝置,讓現有系統能夠擴充機器學習推論的功能,適用於Linux、Mac和Windows系統。透過USB端口接入Edge TPU輔助處理器,即可進行AI推論,模型可以使用Google提供的現成模型,如果需要自行訓練模型,使用者可以TensorFlow Lite進行訓練模型,再將模型移入至專案內就可以使用Edge TPU進行推論,本篇博文主要講解如何在Raspberry Pi上使用OpenCV搭配Google Coral USB Accelerator及USB Camera進行物品辨識。
二. 樹莓派上安裝Edge TPU runtime與PyCoral library
首先,開始使用Google Coral USB Accelerator之前,須先在樹莓派上安裝Edge TPU runtime及PyCoral library。Coral官方網站中:「Get started with the USB Accelerator」針對Google Coral USB Accelerator做出一連串的介紹及設定。
樹莓派上開啟終端機,輸入以下指令下載Coral Edge TPU套件:
echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update
下載完成後,輸入下方指令安裝Edge TPU runtime:
sudo apt-get install libedgetpu1-std
接下來,輸入下方指令安裝PyCoral:
sudo apt-get install python3-pycoral
三. 介紹模型及安裝
較常使用的TensorFlow Lite的模型為「物件偵測(Object detection)」及「圖片分類(Image classification)」。而在TensorFlow官網上提供object_detection介紹,透過Video Stream與物件偵測模型結合,該模型可以判斷鏡頭前的物品並標示物品名稱。
首先在終端機上執行以下指令,複製資源庫至樹莓派中:
mkdir google-coral && cd google-coral
git clone https://github.com/google-coral/tflite --depth 1
安裝detection相關資料:
cd tflite/python/examples/detection
./install_requirements.sh
安裝完成後,在/home/pi/google-coral/tflite/python/examples/detection/models中找到「ssd_mobilenet_v2_coco_quant_postprocess_edgetpu.tflite」模型,此模型為物件偵測所使用,/home/pi/google-coral/tflite/python/examples/detection/models中找到「coco_labels.txt」文字檔,內容包含89項物品的文字,而/home/pi/google-coral/tflite/python/examples/detection中可以看到“detect_image.py”檔案,為實現靜態圖片辨識,在第五章節的部分會教大家如何修改範例程式碼,如此可以實現動態影像識別,接下來先教導大家如何安裝在動態影像識別中需要用到的模組。
四. 安裝OpenCV模組
OpenCV全稱為Open Source Computer Vision Library,是一個跨平台的電腦視覺庫,來源:https://zh.wikipedia.org/wiki/OpenCV。本篇文章需要使用OpenCV取得Camera影像並做圖像顏色轉換,所以須在樹莓派上安裝OpenCV模組。
安裝流程操考這篇文章「Raspberry Pi安裝OpenCV_安裝篇」:
首先開啟終端機,更新已安裝的軟體:
$ sudo apt_get update
$ sudo apt_get upgrate
安裝OpenCV編譯相關套件:
$ sudo apt-get install cmake build-essential pkg-config git
安裝常用圖像和視頻格式的相關套件:
$ sudo apt_get install libjpeg-dev libtiff-dev libjasper-dev libpng-dev libwebp-dev libopenexr-dev
$ sudo apt_get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libdc1394-22-eev libgstreamer-plugins-base1.0-dev libgstramer1.0-dev
安裝OpenCV介面所需的相關套件:
$ sudo apt-get install libgtk-3-dev libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5
安裝提高OpenCV運行速度的相關套件:
$ sudo apt-get install libatlas-base-dev liblapacke-dev gfortran
安裝HDF5軟體:
$ sudo apt-get install libhdf5-dev libhdf5-103
安裝Python3-dev
$ sudo apt-get install python3-dev py
五. 修改detect_image.py檔案
detect_image.py檔案是單純使用現有照片進行推論,而要使用Camera進行連續推論的話需要修改程式碼,前往/home/pi/google-coral/tflite/python/examples/detection路徑,並選取檔案匣內的detect_image.py檔案,將檔案複製並重新命名為「detect_face_opencv.py」。
以下介紹opencv: cv2會使用到的功能:
- flip():圖像翻轉(cv2.flip(影像, args))。
- resize():圖像縮放(cv2.resize(影像, 寬, 高))。
- cvtColor():色彩空間轉換(cv2.cvtColor(影像, cv2.COLOR_BGR2RGB))。
- rectangle():繪製方框(cv2.rectangle(影像, 頂點座標, 對向頂點座標, 顏色, 線條寬度))。
- putText():繪製文字(cv2.putText(影像, 文字, 座標, 字型, 大小, 顏色, 線條寬度, 線條種類))。
- imshow():顯示影像(cv2.imshow(窗口名, 影像))。
- VideoCapture():視訊的讀取與顯示。
- namedWindow():顯示窗口。
開啟「detect_face_opencv.py」,匯入cv2套件:
import cv2
在if __name__ == ‘__main__’:函式內新增以下程式碼,主要是使用OpenCV取得USB Camera的影像,並且使用cv2.namedWindow(“FRAME”)開啟視窗用於顯示處理後的圖像方便做查看。
camera = cv2.VideoCapture(0) //視訊讀取與顯示
cv2.namedWindow(“FRAME”) //顯示窗口,命名為FRAME
main()
於def main()函式內編譯camera(將image = Image.open(args.input)這行程式碼刪除,並且加入以下程式碼),主要是開啟Camera功能,並取得camera內的影像,將影像大小縮成800x600,並調整影像的顏色:
while(camera.isOpened()):
(grabbed, frame) = camera.read()
frame = cv2.flip(frame, 1) // 圖像翻轉
frame = cv2.resize(frame, (800, 600)) // 圖像縮放
image = Image.fromarray(cv2.cvtColoer(frame, cv2.COLOR_BGR2RGB)) // 色彩轉換
“for obj in objs:”迴圈內增加以下程式碼,主要將收到推論後的objs資訊進行解析,內容包含方匡的座標位置及物件id,物件id對應於labels內的位置,這樣就可以顯示推論出的物件名稱:
bbox = obj.bbox
cv2.rectangle(frame, (bbox.xmin, bbox.ymin), (bbox.xmax, bbox.ymax), (0, 255, 0), 2) // 繪製方框
cv2.putText(frame, labels.get(obj.id, obj.id), (bbox.xmin + 10, bbox.ymin + 10, cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 2)
// 繪製文字
cv2.imshow(“Frame”, frame) // 顯示影像
key = cv2.waitKey(1) // 監聽鍵盤事件
if(key==113):
sys.exit(0)
樹莓派4裝上Google Coral USB Accelerator及USB Camera
開啟終端機,編譯路徑至detection資料夾,並且執行修改後的detect_face_opencv.py檔,使用Google 提供的ssd_mobilenet_v2_coco_quant_postprocess_edgetpu_tflite模型及coco_labels.txt文字檔(顯示物品文字):
pi@raspberrypi:~ $ cd/home/pi/google-coral/tflite/python/exmaples/detection
pi@raspberrypi:~/google-coral/tflite/python/examples/detection $
python3 detect_face_opencv.py –model models/ssd_mobilenet_v2_coco_quant_postprocess_edgetpu_tflite –label models/coco_labels.txt
終端機上呈現的結果:
七. 小結
透過本篇修改步驟講解,相信大家已經了解如何透過Raspberry Pi搭配Google Coral USB Accelerator及USB Camera進行AI影像辨識功能,若有問題歡迎在下方留言一起討論,我們下次見!
評論