Détection d’objet OpenCV – fonction basée

À jour, la vision par ordinateur rend l’ordinateur plus intelligent. Il peut reconnaître n’importe quel objet simple comme une voiture, un bâtiment, une coupe, etc.. Dans ce post, nous voulons expliquer comment faire pour que l’ordinateur reconnaît une boîte. En général, pour la détection d’objet, nous ne pouvons pas utiliser une méthode simple comme couleur de base, forme basé, etc.. Méthode pour détecter objet fondée sur cette utilisation de projet vedette. En particulier, nous utilisons le Scale-invariant feature transform (SIFT) méthode pour détecter la boîte. Avant de parler de la méthode, nous vous montrer une vidéo de démonstration de la détection d’objet automatique. Partie suivante est la préparation du matériel & logiciel. Après cela, nous parler de la mise en œuvre et l’explication de l’algorithme, compiler et exécuter le code. Dans l’autre sens, vous pouvez jeter un oeil pour l’application de détection d’objet pour la robotique. L’article est fermé par notre conclusion.

Démo

Vidéo de démonstration pour la détection d’objet

https://youtu.be/9oGFVLSM-a0

Comme vous le voir dans la vidéo, l’algorithme peut détecter la boîte même nous déplacer n’importe où ou n’importe quelle direction. C’est l’avantage de la méthode SIFT. Dans cette vidéo, vous pouvez voir sur la gauche – le coin en haut à l’image de référence qui considèrent l’objet. Dans le domaine de l’ordinateur de vision, nous appelons l’image de la formation. L’objectif de ce projet est de trouver cet objet sur un environnement réel sur la façade de l’appareil photo. Sur chaque image, lorsque l’objet (formation image) est fondée, un rectangle sera tiré sur la vidéo à la position de l’objet.

Préparation de matériel & Software

  • 1 caméra USB
  • 14.04 Ubuntu
  • OpenCV 2.4.11
  • Bibliothèque C++, marque, etc.

Mise en œuvre et l’explication

La méthode SIFT ou comme intermédiaire de placement déterminée à l’aide de l’objet correspondant normalement est divisé en 3 étapes importantes :

  • Points clés détection (pour les formation image et l’image que nous avons besoin pour Rechercher l’objet)
  • Extraction de descripteur (pour les formation image et l’image que nous avons besoin pour Rechercher l’objet)
  • Correspondance de descripteur

L’étape correspondante de descripteur contribue à notre algorithme pour trouver l’objet. Une fois les descripteurs de 2 images est extrait, nous comparons chaque descripteur d’image d’entraînement sur l’autre image avec tous les descripteurs d’image réelle. Si 2 descripteurs sont les mêmes (ou presque identiques), nous considérons c'est-à-dire que correspondant à des paires.
Dans cet exemple, nous utilisons méthode SIFT pour les fonctionnalités de l’extrait. Mais normalement pour la détection d’objet, vous pouvez également utiliser la méthode autre recommandé comme etc. bref, SURF. Pour comprendre plus en détail sur cette méthode, vous pouvez consulter la page officielle de la méthode SIFT : http://www.cs.ubc.ca/~lowe/keypoints/.
Pour réaliser ce projet, nous devons préparer une image de formation appelé image de capture l’objet que vous voulez détecter (l’image sur la gauche – coin supérieur sur la vidéo est un exemple). L’algorithme va trouver cet objet.

Détecter les points clés de la formation de l’image

    int minHessian = 400 ;
    Détecteur de SiftFeatureDetector (minHessian) ;
    std::Vector<KeyPoint> keypoints_object ;</KeyPoint>
    Detector.Detect (img_object, keypoints_object) ;

Le code ci-dessus permet de précise certaines variantes nécessaires et détecter les points clés. Un point-clé est une fonction, il contient la position sur l’image, échelle, angle et le descripteur. Mais après ce code, nous pouvons détecter uniquement la position, échelle et l’angle. Extrait le descripteur, la méthode se poursuit avec l’étape suivante.

Extrait de descripteur de formation image

    --Étape 2 : calculer les descripteurs (vecteurs de fonctionnalité)
    Extracteur de SiftDescriptorExtractor ;
    Mat descriptors_object ;
    Extractor.Compute (img_object, keypoints_object, descriptors_object) ;

Jusqu’ici l’algorithme pourrait extraire toutes les caractéristiques d’image de la formation. Avec l’image pour trouver l’objet sur (chaque image), nous faisons la même chose. Chaque image de la vidéo (vidéo dans notre projet, nous n’utilisons pas, nous utilisons la caméra streaming), nous obtenir une image, utilisez-le pour détection d’image et d’appliquer des EIPD pour détecter les points clés, extraire des caractéristiques sur cette image. Intermédiaire de placement déterminée est une grande méthode de M. David G. Lowe, nous ne pouvons expliquer ici. Mais nous voulons dire avec cette méthode, l’algorithme détecte tous les points d’intérêt (points clés). Un point-clé est un point sans changé lorsque l’image est redimensionnée, déplacé, redimensionné, etc.. Pour cette raison, notre programme détecte toujours la boîte lorsque nous déplacer n’importe où dans n’importe quelle direction.
OK, tous les points clés est extraite, maintenant nous regardons comment l’algorithme de trouver l’objet sur chaque image de la trame de notre caméra.

Vecteurs de descripteur correspondant

	Matcher FlannBasedMatcher ;
	std::Vector< dmatch=""> </> matches ;
	Matcher.match (descriptors_object, descriptors_scene, allumettes) ;

Le code ci-dessus est pour la correspondance des points clés de 2 images. L’élément principal de point clé pour la correspondance est descripteur, nous n’utilisons pas autre élément. Chaque descripteur SIFT contient 128 élément (vous devez lire l’article du Dr D.Lowe pour le détail). Vous utilisez peut-être une méthode pour l’étape correspondante. Mais OpenCV fournit 2 méthode intéressante : le matcher Brute-Force et FLANN Matcher. Chaque méthode a avantage et désavantage. Nous vous suggérons de readit pour comprendre et a choisi la bonne méthode pour votre affaire http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_matcher/py_matcher.html. Dans ce projet, nous utilisons le matcher FLANN.

Filtrer la correspondance

En plus des 3 étapes précédentes, nous pourrions ajouter quelques étapes facultatives. Dans ce projet, nous ajoutons le filtre étape les paires correspondantes. Cette étape nous permet d’ignorer les mauvais appariement. En particulier, nous utilisons l’algorithme RANSAC. Ne vous inquiétez pas, cet algorithme est également implémenté dans OpenCV. Si vous voulez quelque chose de simple, vous pouvez utiliser autre méthode pour filtre les paires correspondantes telles que de la distance la plus courte. Nous avions utilisé et le résultat n’est pas si mal. Cependant, nous utilisons l’algorithme RANSAC en raison de ses avantages : https://en.wikipedia.org/wiki/Random_sample_consensus

FindhomoGraphy aide à trouver la transformation entre les points clés correspondants qui est appelée matrice Affine.

	Tapis H = findHomography (obj, scene, CV_RANSAC) ;

Basé sur la matrice Affine et des 4 coins de l’objet, nous pouvons calculer la position de chaque coins sur l’image de l’image par une transformation Affine. Mais pour simple, OpenCV fourni pour nous d’une fonction nommée perspectiveTransform qui permet de calculer l’objet mappé dans la scène (à la carte les points).

	perspectiveTransform (obj_corners, scene_corners, H) ;

	-Tracer des lignes reliant les angles (l’objet mappé dans la scène - image_2)
	ligne (img_matches, scene_corner[0]s + Point2f (img_object.cols, 0), scene_corners [1]+ Point2f (img_object.cols, 0), scalaire (0, 255, 0), 4) ;
	ligne (img_matches, scene_corner[1]s + Point2f (img_object.cols, 0), scene_corners[2] + Point2f (img_object.cols, 0), scalaire (0, 255, 0), 4) ;
	ligne (img_matches, scene_corner[2]s + Point2f (img_object.cols, 0), scene_corners[3] + Point2f (img_object.cols, 0), scalaire (0, 255, 0), 4) ;
	ligne (img_matches, scene_corner[3]s + Point2f (img_object.cols, 0), scene_corners[0] + Point2f (img_object.cols, 0), scalaire (0, 255, 0), 4) ;

Lorsque les quatre coins de l’objet sont fondés sur l’image de trame, nous dessiner un rectangle pour connecter 4 coins. La partie intérieure du rectangle est l’objet que nous voulons détecter. La position de l’objet est le centre du rectangle.

Utilisation du code

Pour plus facile pour démarrer votre projet, vous pouvez avoir un coup d’oeil à notre code source tout d’abord. Ensuite, vous pouvez créer votre propre code ou modifie la nôtre.
Vérifiez notre Github
git clone https://github.com/Booppey/object_detection.git
Ensuite, ouvrez votre terminal, naviguez jusqu’au dossier du projet et du type :

     g ++ -o object_detection object_detection.cpp-L/home/user_name/opencv-2.4.11/build/install/lib-lopencv_core-lopencv_imgproc-lopencv_highgui-lopencv_features2d-lopencv_flann-lopencv_nonfree-lopencv_calib3d
     . / object_detection

Voilà les commandes que j’ai utilisé dans mon cas. Peut-être vous avez besoin de changer quelque chose pour faire fonctionner dans votre cas. Si vous avez des difficultés ou la question, ne soyez pas timide pour nous le faire savoir par laissez un commentaire.

Autres applications de détection d’objet

Application vidéo ce module de suivi d’objets perroquet Bebop Drone :

Dans cette vidéo, le drone Parrot Bebop suit la boîte jusqu'à ce que la boîte est dans le centre de la caméra du drone. Ce drone peut tourner, aller vers le haut, vers le bas, vers l’avant et vers l’arrière. Lorsque l’objet de la boîte est hors de l’écran de la caméra, drone tournera autour pour chercher la boîte.
Pour cette application, nous avons utilisé l’algorithme que nous l’avons expliqué ci-dessus, mais nous avons changé l’architecture. Nous avons utilisé le client – architecture serveur. Partie de l’algorithme de traitement d’image s’exécute côté serveur. Le téléphone android et le robot fournissent le côté client.
En plus des 2 applications comme indiqué ci-dessus, vous pouvez voir nos autre application à
https://youtu.be/Wb1P36c3G6s
Et
https://youtu.be/27UeRg_-IbI

Conclusion

Approche de fonctionnalité basée comme SIFT, SURF… sont généralement considérées comme dans l’affaire l’image de la formation a des caractéristiques fortement. L’approche peut aussi s’avérer plus utile si le match à l’image de la recherche peut-être être transformé en quelque sorte. Dans le cas de l’image de la formation sans caractéristiques fortement, nous pourrions appliquer autre approche comme : couleur d’image avec la couleur simple, modèle basé peut être efficace avec l’image sans modifier la taille, etc..

Share This:

Leave a Reply

Your email address will not be published. Required fields are marked *