Nous avons commencé par apprendre les bases d'OpenCV, puis effectué un traitement d'image de base et des manipulations sur des images, suivis de segmentations d'images et de nombreuses autres opérations en utilisant OpenCV et le langage python. Ici, dans cette section, nous allons effectuer quelques techniques simples de détection d'objets en utilisant la correspondance de modèles. Nous trouverons un objet dans une image puis nous décrirons ses caractéristiques. Les caractéristiques sont les attributs communs de l'image tels que les coins, les bords, etc. Nous examinerons également certains algorithmes de détection d'objets courants et populaires tels que SIFT, SURF, FAST, BREIF & ORB.
Comme indiqué dans les didacticiels précédents, OpenCV est une bibliothèque Open Source Commuter Vision qui a des interfaces C ++, Python et Java et prend en charge Windows, Linux, Mac OS, iOS et Android. Il peut donc être facilement installé dans Raspberry Pi avec l'environnement Python et Linux. Et Raspberry Pi avec OpenCV et caméra connectée peut être utilisé pour créer de nombreuses applications de traitement d'image en temps réel telles que la détection de visage, le verrouillage du visage, le suivi d'objet, la détection de plaque d'immatriculation de voiture, le système de sécurité domestique, etc.
La détection et la reconnaissance d'objets constituent le cas d'utilisation le plus important de la vision par ordinateur, ils sont utilisés pour faire des choses puissantes telles que
- Étiquetage des scènes
- Navigation de robot
- Voitures autonomes
- Reconnaissance corporelle (Microsoft Kinect)
- Détection des maladies et du cancer
- La reconnaissance faciale
- Reconnaissance de l'écriture manuscrite
- Identification des objets dans les images satellites
Détection d'objets VS Reconnaissance
La reconnaissance d'objets est le deuxième niveau de détection d'objets dans lequel l'ordinateur est capable de reconnaître un objet à partir de plusieurs objets dans une image et peut être capable de l'identifier.
Maintenant, nous allons exécuter certaines fonctions de traitement d'image pour trouver un objet à partir d'une image.
Recherche d'un objet à partir d'une image
Ici, nous allons utiliser la correspondance de modèle pour trouver un caractère / objet dans une image, utiliser la fonction cv2.matchTemplate () d' OpenCV pour trouver cet objet
importer cv2 importer numpy en tant que np
Chargez l'image d'entrée et convertissez-la en gris
image = cv2.imread ('WaldoBeach.jpg') cv2.imshow ('personnes', image) cv2.waitKey (0) gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Charger l'image du modèle
template = cv2.imread ('waldo.jpg', 0) #résultat de la correspondance de modèle d'objet sur une image result = cv2.matchTemplate (gray, template, cv2.TM_CCOEFF) sin_val, max_val, min_loc, max_loc = cv2.minMaxLoc (résultat)
Créer un cadre de délimitation
top_left = max_loc #augmentation de la taille du rectangle englobant de 50 pixels bottom_right = (top_left + 50, top_left + 50) cv2.rectangle (image, top_left, bottom_right, (0,255,0), 5) cv2.imshow ('objet trouvé', image) cv2.waitKey (0) cv2.destroyAllWindows ()
Dans cv2.matchTemplate (gray, template, cv2.TM_CCOEFF) , saisissez l'image en niveaux de gris pour trouver l'objet et le modèle. Appliquez ensuite la méthode de mise en correspondance des modèles pour rechercher les objets à partir de l'image, ici cv2.TM_CCOEFF est utilisé.
La fonction entière renvoie un tableau qui est entré dans result, qui est le résultat de la procédure de correspondance de modèle.
Et puis nous utilisons cv2.minMaxLoc (result) , qui donne les coordonnées ou la boîte englobante où l'objet a été trouvé dans une image, et lorsque nous obtenons ces coordonnées, dessinez un rectangle dessus, et étirez un peu les dimensions de la boîte pour que le l'objet peut facilement s'adapter à l'intérieur du rectangle.
Il existe une variété de méthodes pour effectuer une correspondance de modèles et dans ce cas, nous utilisons cv2.TM_CCOEFF qui signifie coefficient de corrélation.
Ici, les points clés sont des coordonnées (X, Y) extraites à l'aide du détecteur de tamisage et dessinées sur l'image à l'aide de la fonction de point-clé cv2 draw.
LE SURF
import cv2 import numpy as np image = cv2.imread ('paris.jpg') gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Créer un objet détecteur de fonction SURF, ici nous définissons le seuil de jute à 500
surf = cv2.xfeatures2d.SURF_create (500) points clés, descripteurs = surf.detectAndCompute (gris, aucun) print ("Nombre de points clés détectés:", len (points clés))
Dessinez des points clés riches sur l'image d'entrée
image = cv2.drawKeypoints (image, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - SURF', image) cv2.waitKey () cv2.destroyAllWindows ()
Sortie de la console:
VITE
import cv2 import numpy as np image = cv2.imread ('paris.jpg') gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Créer un objet FAST Detector
fast = cv2.FastFeatureDetector_create () # Obtain Key points, par défaut la suppression non max est On # pour désactiver set fast.setBool ('nonmaxSuppression', False) keypoints = fast.detect (gray, None) print ("Number of keypoints Détecté: ", len (points clés))
Dessinez des points clés riches sur l'image d'entrée
image = cv2.drawKeypoints (image, points clés, Aucun, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - FAST', image) cv2.waitKey () cv2.destroyAllWindows ()
Sortie de la console:
BREF
import cv2 import numpy as np image = cv2.imread ('paris.jpg') gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Créer un objet détecteur FAST
bref = cv2.xfeatures2d.BriefDescriptorExtractor_create ()
Créer un objet extracteur BRIEF
#brief = cv2.DescriptorExtractor_create ("BRIEF") # Déterminer les points clés points clés = fast.detect (gris, Aucun)
Obtenez des descripteurs et de nouveaux points clés finaux à l'aide de BRIEF
points clés, descripteurs = bref.compute (gris, points clés) print ("Nombre de points clés détectés:", len (points clés))
Dessinez des points clés riches sur l'image d'entrée
image = cv2.drawKeypoints (image, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - BRIEF', image) cv2.waitKey () cv2.destroyAllWindows ()
Sortie de la console:
ORBE
import cv2 import numpy as np image = cv2.imread ('paris.jpg') gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Créer un objet ORB, nous pouvons spécifier le nombre de points clés que nous désirons
orb = cv2.ORB_create () # Déterminer les points clés points clés = orb.detect (gris, Aucun)
Obtenez les descripteurs
points-clés, descripteurs = orb.compute (gris, points-clés) print ("Nombre de points-clés détectés:", len (points-clés))
Dessinez des points clés riches sur l'image d'entrée
image = cv2.drawKeypoints (image, points-clés, Aucun, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - ORB', image) cv2.waitKey () cv2.destroyAllWindows ()
Sortie de la console:
Nous pouvons spécifier le nombre de points clés dont la limite maximale est de 5000, mais la valeur par défaut est 500, c'est-à-dire que ORB détecte automatiquement les 500 meilleurs points clés s'il n'est spécifié pour aucune valeur de points clés.
C'est ainsi que la détection d'objet a lieu dans OpenCV, les mêmes programmes peuvent également être exécutés dans OpenCV installé Raspberry Pi et peuvent être utilisés comme un appareil portable comme les Smartphones équipés de Google Lens.
Cet article est issu du cours Master Computer Vision ™ OpenCV4 en Python avec Deep Learning sur Udemy, créé par Rajeev Ratan, abonnez-vous pour en savoir plus sur Computer Vision et Python.