Vam començar amb l'aprenentatge bàsic d'OpenCV i després vam fer alguns processaments bàsics d'imatge i manipulacions d'imatges seguides de segmentacions d'imatges i moltes altres operacions mitjançant OpenCV i llenguatge python. Aquí, en aquesta secció, realitzarem algunes tècniques senzilles de detecció d’objectes mitjançant la concordança de plantilles. Trobarem un objecte en una imatge i després en descriurem les característiques. Les funcions són els atributs habituals de la imatge, com ara cantonades, arestes, etc. També analitzarem alguns algoritmes de detecció d'objectes comuns i populars, com ara SIFT, SURF, FAST, BREIF i ORB.
Tal com es va explicar als tutorials anteriors, OpenCV és Open Source Commuter Vision Library que té interfícies C ++, Python i Java i és compatible amb Windows, Linux, Mac OS, iOS i Android. Per tant, es pot instal·lar fàcilment a Raspberry Pi amb entorns Python i Linux. I Raspberry Pi amb OpenCV i càmera connectada es pot utilitzar per crear moltes aplicacions de processament d’imatges en temps real, com ara detecció de cares, bloqueig de cares, seguiment d’objectes, detecció de matrícules de cotxes, sistema de seguretat domèstica, etc.
La detecció i reconeixement d’objectes constitueixen el cas d’ús més important per a la visió per ordinador, ja que s’utilitzen per fer coses poderoses com ara
- Etiquetatge d'escenes
- Navegació de robots
- Cotxes autònoms
- Reconeixement corporal (Microsoft Kinect)
- Detecció de malalties i càncer
- Reconeixement facial
- Reconeixement d'escriptura a mà
- Identificació d'objectes en imatges de satèl·lit
Reconeixement de la detecció d’objectes
El reconeixement d'objectes és el segon nivell de detecció d'objectes en què l'ordinador és capaç de reconèixer un objecte de diversos objectes d'una imatge i pot identificar-lo.
Ara, realitzarem algunes funcions de processament d’imatges per trobar un objecte a partir d’una imatge.
Trobar un objecte a partir d’una imatge
Aquí utilitzarem la coincidència de plantilles per trobar caràcter / objecte en una imatge, utilitzarem la funció cv2.matchTemplate () d' OpenCV per trobar aquest objecte
importar cv2 importar numpy com a np
Carregueu la imatge d'entrada i converteix-la en gris
image = cv2.imread ('WaldoBeach.jpg') cv2.imshow ('persones', imatge) cv2.waitKey (0) gris = cv2.cvtColor (imatge, cv2.COLOR_BGR2GRAY)
Carregueu la imatge de la plantilla
template = cv2.imread ('waldo.jpg', 0) #resultat de la coincidència de plantilla de l'objecte sobre una imatge result = cv2.matchTemplate (gris, plantilla, cv2.TM_CCOEFF) sin_val, max_val, min_loc, max_loc = cv2.minMaxLoc (resultat)
Crea una caixa delimitadora
top_left = max_loc #increasing the size of bounding rectangle by 50 pixels bottom_right = (top_left + 50, top_left + 50) cv2.rectangle (image, top_left, bottom_right, (0,255,0), 5) cv2.imshow ('object found'), imatge) cv2.waitKey (0) cv2.destroyAllWindows ()


A cv2.matchTemplate (gris, plantilla, cv2.TM_CCOEFF) , introduïu la imatge a escala de grisos per trobar l’objecte i la plantilla. A continuació, apliqueu el mètode de coincidència de plantilles per trobar els objectes de la imatge, aquí s'utilitza cv2.TM_CCOEFF .
Tota la funció retorna una matriu que s'introdueix en el resultat, que és el resultat del procediment de concordança de plantilla.
I després fem servir cv2.minMaxLoc (resultat) , que dóna les coordenades o la caixa delimitadora on s’ha trobat l’objecte en una imatge, i quan aconseguim aquestes coordenades dibuixem un rectangle damunt i estirem una mica les dimensions de la l'objecte pot cabre fàcilment dins del rectangle.
Hi ha una varietat de mètodes per fer coincidències de plantilles i, en aquest cas, estem utilitzant cv2.TM_CCOEFF, que significa coeficient de correlació.

Aquí els punts clau són coordenades (X, Y) que s’extreuen amb el detector de tamís i es dibuixen sobre la imatge mitjançant la funció de punts clau de dibuix cv2.
SURF
importa cv2 importa numpy com np image = cv2.imread ('paris.jpg') gris = cv2.cvtColor (imatge, cv2.COLOR_BGR2GRAY)
Creeu l'objecte SURF Feature Detector, aquí establim el llindar de hessian a 500
surf = cv2.xfeatures2d.SURF_create (500) punts clau, descriptors = surf.detectAndCompute (gris, Cap) imprimir ("Nombre de punts clau detectats:", len (punts clau))
Dibuixeu punts clau rics a la imatge d'entrada
image = cv2.drawKeypoints (imatge, punts clau, Cap, banderes = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Mètode de funció - SURF', imatge) cv2.waitKey () cv2.destroyAllWindows ()
Sortida de la consola:

RÀPID
importa cv2 importa numpy com np image = cv2.imread ('paris.jpg') gris = cv2.cvtColor (imatge, cv2.COLOR_BGR2GRAY)
Creeu un objecte FAST Detector
fast = cv2.FastFeatureDetector_create () # Obtenir punts clau, per defecte, la supressió no màxima està activada # per desactivar el conjunt fast.setBool ('nonmaxSuppression', fals) keypoints = fast.detect (gris, Cap) imprimir ("Nombre de punts clau Detectat: ", len (punts clau))
Dibuixeu punts clau rics a la imatge d'entrada
image = cv2.drawKeypoints (imatge, punts clau, Cap, banderes = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Mètode de funcions - RÀPID', imatge) cv2.waitKey () cv2.destroyAllWindows ()
Sortida de la consola:

BREU
importa cv2 importa numpy com np image = cv2.imread ('paris.jpg') gris = cv2.cvtColor (imatge, cv2.COLOR_BGR2GRAY)
Crea un objecte detector FAST
brief = cv2.xfeatures2d.BriefDescriptorExtractor_create ()
Creeu un objecte extractor BREU
#brief = cv2.DescriptorExtractor_create ("BREU") # Determinar punts clau punts clau = fast.detect (gris, Cap)
Obteniu descriptors i nous punts clau finals utilitzant BREU
punts clau, descriptors = breu.compute (gris, punts clau) imprimeix ("Nombre de punts clau detectats:", len (punts clau))
Dibuixeu punts clau rics a la imatge d'entrada
image = cv2.drawKeypoints (imatge, punts clau, Cap, indicadors = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Mètode de funcions - BREU', imatge) cv2.waitKey () cv2.destroyAllWindows ()
Sortida de la consola:

ORB
importa cv2 importa numpy com np image = cv2.imread ('paris.jpg') gris = cv2.cvtColor (imatge, cv2.COLOR_BGR2GRAY)
Creeu un objecte ORB, podem especificar el nombre de punts clau que desitgem
orb = cv2.ORB_create () # Determinar punts clau punts clau = orb.detect (gris, Cap)
Obteniu els descriptors
punts clau, descriptors = orb.compute (gris, punts clau) imprimeix ("Nombre de punts clau detectats:", len (punts clau))
Dibuixeu punts clau rics a la imatge d'entrada
image = cv2.drawKeypoints (imatge, punts clau, Cap, banderes = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Mètode de funció - ORB', imatge) cv2.waitKey () cv2.destroyAllWindows ()
Sortida de la consola:

Podem especificar el nombre de punts clau que té un límit màxim de 5.000, però el valor per defecte és 500, és a dir, ORB detectaria automàticament els millors 500 punts clau si no s’especifica cap valor de punts clau.
Així és com es fa la detecció d’objectes a OpenCV, els mateixos programes també es poden executar a l’OpenCV instal·lat Raspberry Pi i es poden utilitzar com a dispositiu portàtil com els telèfons intel·ligents que tenen Google Lens.
Aquest article es remet a Master Computer Vision ™ OpenCV4 a Python amb el curs Deep Learning sobre Udemy, creat per Rajeev Ratan, subscriviu-lo per obtenir més informació sobre Computer Vision i Python.
