2016-12-26 34 views
0

我正在使用Odroid和使用openCV python運行人臉檢測。但是相機有太多滯後。我嘗試了很多東西,但無法消除滯後。請建議我如何消除滯後。我想要從至少15英尺的高度檢測臉部,因爲我需要高分辨率圖像,但高分辨率圖像會導致更多滯後。目前我在兩幀之間有2秒的延遲。如果有建議請分享。在公開簡歷,蟒蛇我怎麼能消除相機滯後

import cv2, sys, numpy, os 
import json 
size = 3 
fn_haar = 'haarcascade_frontalface_default.xml' 
fn_haareye = 'haarcascade_eye.xml' 
(im_width, im_height) = (112, 92) 
haar_cascade = cv2.CascadeClassifier(fn_haar) 
eye_cascade = cv2.CascadeClassifier(fn_haareye) 
webcam = cv2.VideoCapture(0) 
while True: 
    (rval, frame) = webcam.read() 
    frame=cv2.flip(frame,1,0) 
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
    mini = cv2.resize(gray, (gray.shape[1]/size, gray.shape[0]/size)) 
    faces = haar_cascade.detectMultiScale(mini,scaleFactor=1.05, minNeighbors=3, minSize=(20, 20), flags = cv2.cv.CV_HAAR_SCALE_IMAGE) 
    for i in range(len(faces)): 
     face_i = faces[i] 
     (x, y, w, h) = [v * size for v in face_i] 
     face = gray[y:y + h, x:x + w] 
     face_resize = cv2.resize(face, (im_width, im_height)) 
     eyes = eye_cascade.detectMultiScale(face) 
     for (ex,ey,ew,eh) in eyes: 
      cv2.rectangle(face_resize ,(ex,ey),(ex+ew,ey+eh),(0,255,0),2) 
    cv2.imshow('OpenCV', frame) 
    key = cv2.waitKey(10) 
    if key == 27: 
     break 
+0

在detectMultiScale函數中增加scaleFactor。如果你有選擇,然後嘗試選擇ROI,以儘量減少你必須做臉部檢測的區域 –

+0

@ Optimus1072如果我增加比例因子,它能夠檢測15英尺的臉部嗎? –

+0

scaleFactor = 1.2,圖像分辨率爲360 * 288,我可以在我的機器上(I5)每幀處理15ms。 –

回答

0

你可以試試下面的事情
1.(根據我的經驗,這些區)降低了圖像的分辨率或選擇從圖像中的投資回報率。
2.增加detectMultiscale因子。你將不得不調整它,因爲增加它會對精度產生不利影響。
3.設置HOG的nlevels參數,默認情況下設置爲64,在我的情況下將其降爲8,對精度幾乎沒有影響,但速度提高25-30%。

+0

我需要實時檢測臉部,這就是爲什麼我每運行3幀時都會檢測到臉部。通過降低相機的分辨率,我無法從我需要的較大距離中檢測到。其次,我不使用豬我正在使用哈爾瀑布....有什麼我不瞭解...我實際上是新的打開簡歷,所以如果我沒有得到正確的東西,以便幫助。 –