31

イメージ プレーンで回転した顔を検出するためのライブラリはありますか? または、opencvで直立顔検出にカスケードを使用してそれを行う方法はありますか?

4

8 に答える 8

16

これは私がPython cv2で書いた簡単なものです

これは最も効率的な方法ではなく、etarion によって提案された素朴な方法を使用しますが、通常の頭の傾きにはかなりうまく機能します (-40 から 40 の頭の傾きを検出します。これは、頭を傾けることができるおおよその角度です)。直立しています。

import cv2
from math import sin, cos, radians

camera =  cv2.VideoCapture(0)
face = cv2.CascadeClassifier("haarcascade_frontalface_alt2.xml")

settings = {
    'scaleFactor': 1.3, 
    'minNeighbors': 3, 
    'minSize': (50, 50), 
    'flags': cv2.cv.CV_HAAR_FIND_BIGGEST_OBJECT|cv2.cv.CV_HAAR_DO_ROUGH_SEARCH
}

def rotate_image(image, angle):
    if angle == 0: return image
    height, width = image.shape[:2]
    rot_mat = cv2.getRotationMatrix2D((width/2, height/2), angle, 0.9)
    result = cv2.warpAffine(image, rot_mat, (width, height), flags=cv2.INTER_LINEAR)
    return result

def rotate_point(pos, img, angle):
    if angle == 0: return pos
    x = pos[0] - img.shape[1]*0.4
    y = pos[1] - img.shape[0]*0.4
    newx = x*cos(radians(angle)) + y*sin(radians(angle)) + img.shape[1]*0.4
    newy = -x*sin(radians(angle)) + y*cos(radians(angle)) + img.shape[0]*0.4
    return int(newx), int(newy), pos[2], pos[3]

while True:
    ret, img = camera.read()

    for angle in [0, -25, 25]:
        rimg = rotate_image(img, angle)
        detected = face.detectMultiScale(rimg, **settings)
        if len(detected):
            detected = [rotate_point(detected[-1], img, -angle)]
            break

    # Make a copy as we don't want to draw on the original image:
    for x, y, w, h in detected[-1:]:
        cv2.rectangle(img, (x, y), (x+w, y+h), (255,0,0), 2)

    cv2.imshow('facedetect', img)

    if cv2.waitKey(5) != -1:
        break

cv2.destroyWindow("facedetect")
于 2013-04-14T08:27:05.930 に答える
2

単純な方法:

  • 角度のリストを生成します (たとえば、-170 から 180 まで 10 度刻みで)
  • nリスト内の 各角度について:
    • 画像をn度単位で回転
    • 回転した画像で顔検出器を実行する
    • 元の画像で検出された顔の位置を計算します (回転を元に戻します)
  • すべての角度から結合された結果に対して非最大抑制を実行します (隣接する角度から複数の検出が得られる可能性があります)。
于 2011-02-16T14:21:44.233 に答える
1

AAM、ASMメソッドを制約するbag of words/bag of featuresメソッドを使用できます。しかし、それらは最適解を与えず、大域的最大値に収束しないこともあります。

また、haar-like-features は単なる機能のコレクションであり、回転不変機能を使用して、adaboost 分類器に入れることができます。

于 2012-08-10T11:47:31.677 に答える
0

mtcnnはうまく機能します。顔が 90 度または 180 度に非常に近い場合にのみ問題があるようです。SO 通常の検出に失敗した場合は、画像を 45 度回転させて、もう一度試してください。画像に顔がある場合、これはそれを検出する必要があります。

顔が正確に 90 度回転または反転 (180 度回転) している場合に mtcnn が失敗するのはなぜですか?

于 2020-03-05T00:48:45.783 に答える
-1

色ヒストグラムに基づく顔検出の方法は、顔の向きに依存しません。

于 2011-02-25T08:37:36.867 に答える