5

プロジェクト: 顔検出

説明:画像内の顔を検出してトリミングしたいと考えています。画像はウェブカメラでキャプチャされ、画像ごとに 1 つの顔のみがキャプチャされます。OpenCV 顔検出器を使用しましたが、トリミングに満足できませんでした。そこで、STASM (http://www.milbo.users.sonic.net/stasm/) 顔ランドマーク検出器を使用して画像をトリミングし始めました。STASM は OpenCV 顔検出器を使用して画像内の顔を検出し、STASM は顔の中のランドマークを見つけます。照明条件が悪い場合、顔のみを正確に検出していないため、STASM からトリミングされた画像は適切ではありません。

1) 顔検出のためのより良いアルゴリズムを知りたいです。私の主な目的は、画像から顔を切り取ることです。

2) 現在、クロッピングに STASM を使用しています。照明条件が悪い場合や、画像内で顔全体または顔全体 (額からあごまで) がキャプチャされていない場合、STASM トリミングは信頼できません (出力は目または唇のみになります)。私のアプリケーションでは、stasm から適切な出力がない場合、または顔が適切にトリミングされていない場合は、画像を拒否する必要があります。どうやってするか?そのため、目を見つけることで画像内の顔を検証することを計画しています。私のアプローチが正しければ、トリミングされた画像から目を検出する方法は?

4

2 に答える 2

3

提供された例のドンのように、ネストされたカスケード分類器で顔の目を検出することにより、私のプロジェクトの 1 つでかなり良い結果が得られています。しかし、次に追加のトリックを使用します。nestedCascade.detectMultiScale() の minNeighbors パラメータを 0 に下げます。

つまり、多くの結果を得ることができます。片目は何度も認識されます。次に、顔の左右のどこに結果が集まっているかを確認します。収集ポイントは実際の目の位置です。

次に、最初の画像を回転させます。Rotation-center は私が見つけた顔の中心で、rotation-angle は検出された目の間の天使です。次に、回転した画像で別の顔検出を行い、nestedCascade.detectMultiScale() のパラメーターで非常に低い倍率を使用するようにします。

その結果、ほとんどの場合、完全に正規化された顔画像が得られます。もちろん、成功するかどうかは、雷の状態が実際にどれだけ悪いかにかかっています。

于 2013-01-22T04:09:45.693 に答える
1

OpenCV の Eye Detector を使用してみてください。そして、目の位置に基づいて顔のボックスを調整します。

于 2012-12-22T00:57:41.993 に答える