2015-08-09 47 views
0

我想編寫我的intel伽利略第2代,以便它顯示網絡攝像頭前面的人臉數量並簡單地將其打印在外殼上(使用opencv)。我的代碼正在工作,但問題是處理速度非常慢。它每15秒打印一次數字。這樣我也無法檢查數字是否正確。有什麼辦法或有人做過嗎? 這裏是代碼..在opencv和intel伽利略gen2上進行慢速人臉檢測

import cv2 
import sys 
import time 

cascPath = '/media/mmcblk0p1/haarcascade_frontalface_default.xml' 
faceCascade = cv2.CascadeClassifier(cascPath) 

video_capture = cv2.VideoCapture(0) 

while True: 
    # Capture frame-by-frame 
    ret, frame = video_capture.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 
    ) 

    print len(faces) 

    time.sleep(0.033) 
+0

這是一個很慢的處理器。您可以嘗試降低攝像頭的分辨率,因爲這有助於縮短處理時間。 (如果分辨率是x * y,如果將其更改爲x/4 * y/4,理想情況下應該降低到大約1秒的處理時間。)您當前使用的攝像頭分辨率是多少? –

回答

2

雖然這是一個Intel的CPU,有沒有那麼多的資源(400MHz的CPU,256MB RAM),英特爾伽利略先進的計算機視覺算法(如人臉檢測)。

我注意到的第一件事是你沒有設置捕捉維度。 我不知道相機的規格是什麼,但我猜你是以全分辨率打開相機。我建議以較低的分辨率打開相機,例如320x240甚至160x120,因爲處理的像素會少得多。

HAAR級聯也有點密集(特別是在像英特爾Galileo Gen2這樣的系統上)。我建議查看本地二進制模式(LBP)。 這些已經在OpenCV中實現,您可以查看LBP c++ sample here。應該很容易將其適用於Python API或找到Python API示例。 LBP級聯應該比HAAR級聯更快。

雖然標準較差,但取決於您的相機,您可能會有較低級別的訪問權限。如果您直接檢索灰度圖像,或者原始顏色流爲YUV格式,則只檢索Y通道。由於您不再轉換顏色空間,因此這應該會有小幅提升,但只有在控制相機很容易(或者您有足夠的時間和資源才能進行部分增強)時才能實現。

儘管原型比使用Python慢​​,但您可能還想嘗試使用native c或C++,並檢查是否存在可儘可能利用CPU的編譯器優化標誌。

注:你可以找到一個c++ face detection sample for Intel Galileo here