Raspberry Pi搭配Google Coral USB Accelerator實作Edge AI影像識別

一. 前言

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 runtimePyCoral 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會使用到的功能:

  1. flip():圖像翻轉(cv2.flip(影像, args))。
  2. resize():圖像縮放(cv2.resize(影像, 寬, 高))。
  3. cvtColor():色彩空間轉換(cv2.cvtColor(影像, cv2.COLOR_BGR2RGB))。
  4. rectangle():繪製方框(cv2.rectangle(影像, 頂點座標, 對向頂點座標, 顏色, 線條寬度))。
  5. putText():繪製文字(cv2.putText(影像, 文字, 座標, 字型, 大小, 顏色, 線條寬度, 線條種類))。
  6. imshow():顯示影像(cv2.imshow(窗口名, 影像))。
  7. VideoCapture():視訊的讀取與顯示。
  8. 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影像辨識功能,若有問題歡迎在下方留言一起討論,我們下次見!

 

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論