web-dev-qa-db-ja.com

Pythonを使用したOpenCVのdetectMultiScaleのパラメーター

DetectMultiScaleに渡されるパラメーターを理解できません。一般的な構文はdetectMultiScale(image、rejectLevels、levelWeights)であることは知っていますが、パラメーターrejectLevelsおよびlevelWeightsはどういう意味ですか?そして、オブジェクトを検出するために使用される最適値は何ですか?

これを使って目の瞳孔を検出したい

9
vss

コード例はここにあります: http://docs.opencv.org/3.1.0/d7/d8b/tutorial_py_face_detection.html#gsc.tab=0

パラメータの説明に関しては、古いパラメータ定義を引用している可能性がありますが、実際には次のパラメータに直面している可能性があります。

  • scaleFactor:各画像スケールで画像サイズをどれだけ縮小するかを指定するパラメーター。
  • minNeighbors:各候補長方形が保持する必要のある近傍の数を指定するパラメーター

ここでは、これらのパラメーターに関する素晴らしい説明を見つけることができます: http://www.bogotobogo.com/python/OpenCV_Python/python_opencv3_Image_Object_Detection_Face_Detection_Haar_Cascade_Classifiers.php

次のような顔と目の適切な事前学習済み分類子セットを取得してください

  • haarcascade_frontalface_default.xml
  • haarcascade_eye.xml
6
tfv

これらのパラメータのうち、4つのパラメータにさらに注意を払う必要があります。

  • scaleFactor –各画像スケールで画像サイズをどれだけ縮小するかを指定するパラメーター。

基本的に、スケールファクターはスケールピラミッドの作成に使用されます。さらに説明すると、モデルにはトレーニング中に定義された固定サイズがあり、XMLに表示されます。これは、顔のこのサイズが存在する場合、画像で検出されることを意味します。ただし、入力画像のサイズを変更することで、大きな顔を小さな顔にサイズ変更して、アルゴリズムで検出できるようにすることができます。

1.05がこれに適した値です。つまり、サイズ変更に小さなステップを使用します。つまり、サイズを5%縮小すると、検出用のモデルと一致するサイズが見つかる可能性が高くなります。これは、アルゴリズムがより徹底的であるため、アルゴリズムの動作が遅くなることも意味します。検出を高速化するために、最大1.4に増やすことができますが、一部の顔を完全に見失う危険があります。

  • minNeighbors –各候補長方形が保持する必要のある近傍の数を指定するパラメーター。

このパラメーターは、検出された顔の品質に影響します。値が大きいほど検出結果は少なくなりますが、品質は高くなります。 3〜6が良い値です。

  • minSize –可能な最小オブジェクトサイズ。それより小さいオブジェクトは無視されます。

このパラメータは、検出するサイズを決定します。あなたが決める!通常、[30、30]は顔検出の良いスタートです。

  • maxSize –可能な最大オブジェクトサイズ。これより大きいオブジェクトは無視されます。

このパラメーターは、検出するサイズを決定します。もう一度、あなたはそれを決めます!通常、手動で設定する必要はありません。デフォルト値では、顔のサイズに上限なしで検出することを想定しています。

3
Rajshah

OpenCV Class List docs は、すべてのC++およびPythonメソッドの説明です。

cv :: CascadeClassifier detectMultiScale の場合は次のようになります。

detectMultiScale

Python

objects = cv.CascadeClassifier.detectMultiScale(image[, scaleFactor[, minNeighbors[, flags[, minSize[, maxSize]]]]]

パラメータ

image            Matrix of the type CV_8U containing an image where objects
                 are detected.  

objects          Vector of rectangles where each rectangle contains the  
                 detected object, the rectangles may be partially outside  
                 the original image.  

scaleFactor      Parameter specifying how much the image size is reduced 
                 at each image scale.  

minNeighbors     Parameter specifying how many neighbors each candidate  
                 rectangle should have to retain it.

flags            Parameter with the same meaning for an old cascade as in  
                 the function cvHaarDetectObjects. It is not used for a  
                 new cascade.

minSize          Minimum possible object size. Objects smaller than that  
                 are ignored.  

maxSize          Maximum possible object size. Objects larger than that  
                 are ignored. If maxSize == minSize model is evaluated  
                 on single scale.

  • (Python)カスケード分類子を使用した顔検出の例は、opencv_source_code/samples/python/facedetect.pyにあります。

前述のように、サンプルの使用法は OpenCVソースコード から入手できます。文書化された各パラメーターをキーワードとして渡すことができます。

rects = cascade.detectMultiScale(img, 
                                 scaleFactor=1.3, 
                                 minNeighbors=4, 
                                 minSize=(30, 30),
                                 flags=cv.CASCADE_SCALE_IMAGE)
1
Gino Mempin