web-dev-qa-db-fra.com

Paramètres de detectMultiScale dans OpenCV en utilisant Python

Je ne parviens pas à comprendre les paramètres passés pour detectMultiScale. Je sais que la syntaxe générale est detectMultiScale (image, throwLevels, levelWeights) Cependant, que signifient les paramètres rejetLevels et levelWeights? Et quelles sont les valeurs optimales utilisées pour détecter des objets?

Je veux l'utiliser pour détecter la pupille de l'œil

9
vss

Un exemple de code peut être trouvé ici: http://docs.opencv.org/3.1.0/d7/d8b/tutorial_py_face_detection.html#gsc.tab=

Concernant les descriptions des paramètres, vous avez peut-être cité d'anciennes définitions de paramètres, en fait vous pouvez être confronté aux paramètres suivants:

  • scaleFactor: paramètre spécifiant la réduction de la taille de l'image à chaque échelle d'image.
  • minNeighbors: paramètre spécifiant le nombre de voisins que chaque rectangle candidat doit avoir pour le conserver

Vous trouverez ici une explication intéressante sur ces paramètres: http://www.bogotobogo.com/python/OpenCV_Python/python_opencv3_Image_Object_Detection_Face_Detection_Haar_Cascade_Classifiers.php

Assurez-vous d'obtenir des ensembles de classificateurs pré-formés appropriés pour les visages et les yeux tels que

  • haarcascade_frontalface_default.xml
  • haarcascade_eye.xml
6
tfv

Parmi ces paramètres, vous devez accorder plus d'attention à quatre d'entre eux:

  • scaleFactor - Paramètre spécifiant la réduction de la taille de l'image à chaque échelle d'image.

Fondamentalement, le facteur d'échelle est utilisé pour créer votre pyramide d'échelle. Plus d'explication, votre modèle a une taille fixe définie pendant la formation, qui est visible dans le XML. Cela signifie que cette taille du visage est détectée dans l'image si elle est présente. Cependant, en redimensionnant l'image d'entrée, vous pouvez redimensionner un visage plus grand en un plus petit, le rendant détectable par l'algorithme.

1.05 est une bonne valeur possible pour cela, ce qui signifie que vous utilisez un petit pas pour le redimensionnement, c'est-à-dire que vous réduisez la taille de 5%, vous augmentez les chances qu'une taille correspondante avec le modèle de détection soit trouvée. Cela signifie également que l'algorithme fonctionne plus lentement car il est plus approfondi. Vous pouvez l'augmenter jusqu'à 1,4 pour une détection plus rapide, avec le risque de manquer complètement certains visages.

  • minNeighbors - Paramètre spécifiant le nombre de voisins que chaque rectangle candidat doit avoir pour le conserver.

Ce paramètre affectera la qualité des visages détectés. Une valeur plus élevée entraîne moins de détections mais avec une qualité supérieure. 3 ~ 6 est une bonne valeur pour cela.

  • minSize - Taille minimale possible de l'objet. Les objets plus petits que cela sont ignorés.

Ce paramètre détermine la petite taille que vous souhaitez détecter. Vous décidez! Habituellement, [30, 30] est un bon début pour la détection des visages.

  • maxSize - Taille maximale possible de l'objet. Les objets plus gros que cela sont ignorés.

Ce paramètre détermine la taille que vous souhaitez détecter. Encore une fois, vous décidez! Habituellement, vous n'avez pas besoin de le définir manuellement, la valeur par défaut suppose que vous souhaitez détecter sans limite supérieure la taille du visage.

3
Rajshah

Documents de liste de classes OpenCV fournit les descriptions de tous les C++ et Python.

Voici celui pour cv :: CascadeClassifier detectMultiScale :

detectMultiScale

Python :

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

Paramètres :

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.

Remarque

  • (Python) Un exemple de détection de visage utilisant des classificateurs en cascade peut être trouvé dans opencv_source_code/samples/python/facesetect.py

Comme indiqué, un exemple d'utilisation est disponible dans le code source OpenCV . Vous pouvez transmettre chaque paramètre documenté en tant que mot clé.

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