2013-05-11 8 views
6

私は一般的なテーマが正しいと確信していますが、私は顔を見つけることはできません。私のコードは、コンピュータのビデオカメラであるc=cv2.VideoCapture(0)から読み取ります。私は次に、顔がどこにあるかを明らかにするために以下の設定を行います。ご覧のとおり、私はさまざまなscaleFactorsとminNeighborsをループしていますが、rectは常に空に戻ります。また、opencv/data/haarcascadesパッケージに含まれている4種類のhaarascade xmlファイルを試しました。OpenCV detectMultiScaleを使用して私の顔を見つける

ヒント?

while(1): 
    ret, frame = c.read() 
    rects = find_face_from_img(frame) 

def detect(img, cascade): 
    for scale in [float(i)/10 for i in range(11, 15)]: 
     for neighbors in range(2,5): 
      rects = cascade.detectMultiScale(img, scaleFactor=scale, minNeighbors=neighbors, 
              minSize=(20, 20), flags=cv2.cv.CV_HAAR_SCALE_IMAGE) 
      print 'scale: %s, neighbors: %s, len rects: %d' % (scale, neighbors, len(rects)) 

def find_face_from_img(img): 
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
    gray = cv2.equalizeHist(gray) 
    rects = detect(gray, cascade) 

答えて

6

私のPC上で動作させるためにコードを少し変更しました。このようになると私は実行 は私が得る結果

import cv2 
import cv2.cv as cv 
import getopt, sys 

def detect(img, cascade): 
    for scale in [float(i)/10 for i in range(11, 15)]: 
     for neighbors in range(2,5): 
      rects = cascade.detectMultiScale(img, scaleFactor=scale, minNeighbors=neighbors, 
              minSize=(20, 20), flags=cv2.cv.CV_HAAR_SCALE_IMAGE) 

      print 'scale: %s, neighbors: %s, len rects: %d' % (scale, neighbors, len(rects)) 


def find_face_from_img(img): 
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
    gray = cv2.equalizeHist(gray) 
    rects = detect(gray, cascade) 


if __name__ == '__main__': 

    args, video_src = getopt.getopt(sys.argv[1:], '', ['cascade=', 'nested-cascade=']) 
    try: video_src = video_src[0] 
    except: video_src = 0 
    args = dict(args) 


    cascade_fn = args.get('--cascade', "cascades/haarcascade_frontalface_alt.xml") 
    cascade = cv2.CascadeClassifier(cascade_fn) 

    c=cv2.VideoCapture(0) 
    while(1): 
     ret, frame = c.read() 
     rects = find_face_from_img(frame) 
     if 0xFF & cv2.waitKey(5) == 27: 
       break 

出力:

scale: 1.2, neighbors: 2, len rects: 1 
scale: 1.2, neighbors: 3, len rects: 1 
scale: 1.2, neighbors: 4, len rects: 1 
scale: 1.3, neighbors: 2, len rects: 1 
scale: 1.3, neighbors: 3, len rects: 1 
scale: 1.3, neighbors: 4, len rects: 0 
scale: 1.4, neighbors: 2, len rects: 1 
scale: 1.4, neighbors: 3, len rects: 0 
scale: 1.4, neighbors: 4, len rects: 0 
scale: 1.1, neighbors: 2, len rects: 1 
scale: 1.1, neighbors: 3, len rects: 1 
scale: 1.1, neighbors: 4, len rects: 1 
scale: 1.2, neighbors: 2, len rects: 1 
scale: 1.2, neighbors: 3, len rects: 1 
scale: 1.2, neighbors: 4, len rects: 1 
scale: 1.3, neighbors: 2, len rects: 1 

いくつかのアドバイスを:あなたに、minSizeを選択しないでください低すぎる...他のすべての小項目になります顔に似ています検出された。

これらのパラメータをすべて実行して、最適なものを見つけるとします。私はminNeighorsが高すぎるべきではないことを知っていました。

カスケードXMLファイルが正しくリンクされていることを確認してください。それが見つからなければ、エラーは出ません。顔が見つからないだけです。

+0

リファクタリングを除いて、投稿されたコードがどこから違うのかわかりませんが、これをお試しいただきありがとうございます。ファイルの場所が正しい - 私はそれをコピーすることができます、それをcatし、完全なxmlファイルが印刷されます。 – user592419

+0

私はあなたの2つの機能について何も変更しませんでした。私はちょうどメインを変更しました。あなたは直腸を手に入れませんか? – Ojtwist

+0

驚いたことに。私はひげを持っていますが、それは私の友人を引っ張っていません。 – user592419

関連する問題