2

そこで、顔を追跡する小さなスクリプトを作成し、次に 2 つの目を検索し、次に左右の目をそれぞれ検索しました。

問題は、左右でも両方が重なってしまうことです。

i = Camera().getImage()
face = i.findHaarFeatures("face.xml")
if face != None:
    face =  face[0].boundingBox()
    face = i.crop(face)
    twoeyes = face.findHaarFeatures("two_eyes_big.xml")
    if twoeyes != None:
        righteye = face.findHaarFeatures('right_eye.xml')
        lefteye = face.findHaarFeatures('lefteye.xml')
        if righteye != None and lefteye != None:
            print righteye,lefteye
            righteye = righteye[0].draw()
            lefteye = lefteye[0].draw()
            face.show()

findHaarFeatures 重なり合う 2 つの目

プリントは次のことを示しています。

[SimpleCV.Features.Detection.HaarFeature at (61,67)] [SimpleCV.Features.Detection.HaarFeature at (60,65)]

face.boundingBox(twoeyes) で顔をトリミングしようとしましたが、左と右を検索しましたが、常に (None, None) が表示されます。

また、findHaarFeatures("face.xml") で複数の顔が得られると問題が発生します。リストの最初の顔を選択するだけでこれを克服できますが、最大のものを選択したいと思います。 2 つのフィーチャーのサイズを比較できますか?

最後に、crop と if ステートメント 'something != None' を使用する代わりに、other 内の機能を検索するより良い方法はありますか?

ところで、私はカメラからの生の画像を使用していますが、特徴をよりよく見つけるために、コントラスト、彩度、検出エッジなどで処理する方が良いですか?

4

1 に答える 1

0

次のコードは、ROI (関心領域) が縮小された顔である目を検出するために機能します。

私もクロッピング技術を使用してROIを小さくしています。

img = Camera().getImage()
face = img.findHaarFeatures("face.xml")

    if face: #checks for non empty feature set
        face = face.sortArea() #sorting all detected faces by area
        face = face[-1] #picking the largest face
        face = img.crop(face) #crops face from the image

        leftEye = face.findHaarFeatures("lefteye.xml")
        leftEye.draw()

        rightEye = face.findHaarFeatures("right_eye.xml")
        rightEye.draw()
        face.show()

右目と左目の両方を検出すると、どちらも右目と左目の両方を検出することになるため、両方の結果が重複します。

これを有効に利用するには、両方の結果の平均をとって 1 組の目を作成します。

ウェブカメラからの生のビデオ ストリームで上記を試してみましたが、未処理のストリームでまともな結果が得られました。

于 2014-08-14T20:38:20.177 に答える