【教學/測試】OpenCV on UP Board 測試
Last Updated on 2022 年 8 月 23 日 by 小編
內容目錄
UP Board 開箱與安裝可參考下列幾篇文章
UP Board 測試說明
由於 UP Board 所使用的 CPU 為 Intel Atom x5-Z8350,在 Intel 網站的規格為 64 位元 4 核心,時脈可達 1.92 GHz。乍看之下是比 Raspberry Pi 3 的處理速度快上不少,但 ARM 和 X86 是不同架構,而且操作上的反應速度除了和時脈有關,不同的執行條件也會有差異。
我們使用 Python OpenCV 測試。只要輸入 sudo apt-get install python-opencv
就可以安裝有 Python binding 的 OpenCV。
UVC(USB Video Class)就是 USB device class 視訊裝置在不需要安裝任何的驅動程式下隨插即用,包括網路攝影機(Webcam)、數位攝影機(Digital Camcorders)、類比影像轉換器(Transcoders)、電視卡(TV Receiver Card)等。而在 Linux 上如果有一個支援 UVC 的 Webcam 插到 USB,就會向 Kernel 註冊為 Webcam 設備,裝置節點為 /dev/videoX
。
V4L2(Video4Linux 2nd)是一套 Linux 針對視訊設備(例如 Webcam)所定義好的 Userspace API,因此硬體廠商只要能實做 API 的功能,就能讓使用者透過統一的介面控制硬體。如此一來上層的使用者就即使不知道硬體的廠牌與底層的實做方法,只要知道呼叫相同的函式就能得到相同的結果,如下圖。
Haar Cascades Face Detect 範例程式
在 Raspberry Pi 上使用 Webcam 偵測人臉的程式(camera_face_detect.py)如下。需先下載 haarcascade_frontalface_default.xml 後和 camera_face_detect.py 一起執行,例如 python camera_face_detect.py haarcascade_frontalface_default.xml
#!/usr/bin/python #+-+-+-+-+-+-+-+-+-+-+-+-+-+ #|P|i|e|P|i|e|.|c|o|m|.|t|w| #+-+-+-+-+-+-+-+-+-+-+-+-+-+ # # camera_face_detect.py # Face detect from camera # # Date : 06/22/2014 # Usage : python camera_face_detect.py haarcascade_frontalface_default.xml import cv2 import sys import time cascPath = sys.argv[1] faceCascade = cv2.CascadeClassifier(cascPath) cap = cv2.VideoCapture(0) cap.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 640) cap.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, 480) while True: # Capture frame-by-frame before = time.time() ret, frame = cap.read() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces = faceCascade.detectMultiScale( gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30), flags=cv2.cv.CV_HAAR_SCALE_IMAGE ) after = time.time() print "Found {0} faces!, fps= {1}".format(len(faces), round(1/(after-before), 1)) # Draw a rectangle around the faces for (x, y, w, h) in faces: cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) # Display the resulting frame cv2.imshow("preview", frame) if cv2.waitKey(1) & 0xFF == ord("q"): break # When everything is done, release the capture cap.release() cv2.destroyAllWindows()
UP Board 和 Raspberry Pi 3B 測試與比較
在沒有硬體加速的情況下,視訊從 Webcam 取得後就完全由 CPU 處理。程式中的 cv2.VideoCapture(0)
表示從 /dev/video0
取得 VideoCapture
物件,之後就可以透過 .set
或是 .read
等標準的 V4L2 API 存取 Webcam。
而人臉偵測在 OpenCV 中最常使用的方法為 Haar Feature-based Cascade Classifier,原理與使用可參考 Raspberry Pi Camera + Python 的介紹。
這次用的是 Microsoft LifeCam VX-800(圖右),動態攝影解析度為 30 萬像素(640×480 pixels)。產品規格書下載。
每個從 Webcam 取回的 frame 都會用 faceCascade.detectMultiScale
做人臉偵測的判斷,如果有找到則會用 cv2.rectangle
將人臉標示出來,並印出找到幾個人臉與 FPS(Frame per Second)。
架設的環境如下,左邊綠色的 pi-topCEED負責播影片,而 UP Board 接上 LifeCam VX-800 就執行人臉偵測,為了能即時顯示找到的人臉,就接上給奇創造的 On-Lap 1002 攜帶式螢幕。
測試的結果,在 640×480 的解析度下,使用 UP Board 做人臉辨識大概為 3-4 FPS。當然如果不將結果畫出來或是沒有啟動 X-Window 的情況下一定會有更好的結果。
相同的測試條件在 Pi 3 大概只剩下 1 FPS。
結論
由 UP Board 跑 OpenCV 的影片和在 Pi 3 跑 OpenCV 的影片,可看出在這個情境下 UP Board 的處理速度大概是 Pi 3 的四倍左右。
不考慮功耗和週邊產品支援度的話,UP Board 是一個不錯的選項。
發佈留言