2016-12-26 5 views
0

私はOdroidに取り組んでおり、openCV pythonを使って顔検出を実行しています。しかし、カメラには余りにも遅れがあります。私は多くのことを試しましたが、遅れを取り除くことはできませんでした。どうすれば遅れを取り除くことができますかをお勧めします。私は高解像度の画像が必要であるために少なくとも15フィートから顔を検出したいが、高解像度の画像はより遅れを生じさせる。現在、フレーム間に2秒の遅れがあります。提案がある場合は、共有してください。オープンCVで、pythonどのようにカメラの遅れを取り除くことができます

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)にはフレームあたり15ミリ秒かかることがあります。 –

答えて

0

あなたは物事を、以下の(私の経験に基づいて、これらの領域)
1画像の解像度を下げるか、画像からROIを選択を試すことができます。
2. detectMultiscale Factorを大きくする。それを増やすと正確さに悪影響を与えるので、調整する必要があります。
3. HOGのnlevelsパラメータを設定すると、デフォルトでは64に設定されていますが、8に減らすと精度にほとんど影響はありませんが、速度は25-30%向上します。

+0

私はリアルタイムで顔を検出する必要があるため、私は3番目のフレームごとに検出を実行しています。カメラの解像度を下げることによって、私は必要とするより大きな距離から検出することができません。第二に、豚を使用していない私はhaarカスケードを使用しています....何か私は理解していません...私は実際に新しいcvを開くので、 –

関連する問題