Am început cu învățarea elementelor de bază ale OpenCV și apoi am făcut câteva prelucrări de bază ale imaginilor și manipulări ale imaginilor, urmate de segmentări de imagini și multe alte operații folosind OpenCV și limbaj python. Aici, în această secțiune, vom efectua câteva tehnici simple de detectare a obiectelor folosind potrivirea șabloanelor. Vom găsi un obiect într-o imagine și apoi îi vom descrie caracteristicile. Caracteristicile sunt atributele comune ale imaginii, cum ar fi colțuri, margini etc. Vom arunca, de asemenea, o privire asupra unor algoritmi de detectare obișnuiți și obișnuiți, cum ar fi SIFT, SURF, FAST, BREIF și ORB.
După cum am spus în tutorialele anterioare, OpenCV este Open Source Commuter Vision Library care are interfețe C ++, Python și Java și acceptă Windows, Linux, Mac OS, iOS și Android. Deci, poate fi instalat cu ușurință în Raspberry Pi cu mediul Python și Linux. Și Raspberry Pi cu OpenCV și cameră atașată poate fi folosit pentru a crea multe aplicații de procesare a imaginilor în timp real, cum ar fi detectarea feței, blocarea feței, urmărirea obiectelor, detectarea plăcilor de înmatriculare a mașinii, sistemul de securitate la domiciliu etc.
Detectarea și recunoașterea obiectelor reprezintă cel mai important caz de utilizare pentru viziunea computerizată, acestea sunt utilizate pentru a face lucruri puternice, cum ar fi
- Etichetarea scenelor
- Navigare robot
- Mașini cu conducere automată
- Recunoașterea corpului (Microsoft Kinect)
- Depistarea bolilor și a cancerului
- Recunoastere faciala
- Scris de mana recunoscut
- Identificarea obiectelor din imaginile din satelit
Detectarea obiectelor VS Recunoașterea
Recunoașterea obiectelor este al doilea nivel de detectare a obiectelor în care computerul este capabil să recunoască un obiect din mai multe obiecte dintr-o imagine și poate să îl poată identifica.
Acum, vom efectua câteva funcții de procesare a imaginii pentru a găsi un obiect dintr-o imagine.
Găsirea unui obiect dintr-o imagine
Aici vom folosi potrivirea șablonului pentru găsirea caracterului / obiectului într-o imagine, folosim funcția cv2.matchTemplate () a OpenCV pentru găsirea acelui obiect
import cv2 import numpy ca np
Încărcați imaginea de intrare și convertiți-o în gri
image = cv2.imread ('WaldoBeach.jpg') cv2.imshow ('people', image) cv2.waitKey (0) gri = cv2.cvtColor (imagine, cv2.COLOR_BGR2GRAY)
Încărcați imaginea șablonului
template = cv2.imread ('waldo.jpg', 0) #rezultatul potrivirii șablonului obiectului asupra unei imagini rezultat = cv2.matchTemplate (gri, șablon, cv2.TM_CCOEFF) sin_val, max_val, min_loc, max_loc = cv2.minMaxLoc (rezultat)
Creați o casetă de delimitare
top_left = max_loc # mărirea dimensiunii dreptunghiului de delimitare cu 50 pixeli bottom_right = (top_left + 50, top_left + 50) cv2.rectangle (image, top_left, bottom_right, (0,255,0), 5) cv2.imshow ('object found'), imagine) cv2.waitKey (0) cv2.destroyAllWindows ()
În cv2.matchTemplate (gri, șablon, cv2.TM_CCOEFF) , introduceți imaginea la scară de gri pentru a găsi obiectul și șablonul. Apoi aplicați metoda de potrivire a șabloanelor pentru găsirea obiectelor din imagine, aici se folosește cv2.TM_CCOEFF .
Întreaga funcție returnează un tablou care este introdus în rezultat, care este rezultatul procedurii de potrivire a șablonului.
Și apoi folosim cv2.minMaxLoc (rezultat) , care dă coordonatele sau caseta de delimitare unde a fost găsit obiectul într-o imagine, iar când obținem aceste coordonate trageți un dreptunghi peste el și întindeți câteva dimensiuni ale casetei astfel încât obiectul se poate potrivi cu ușurință în interiorul dreptunghiului.
Există o varietate de metode pentru a efectua potrivirea șablonului și, în acest caz, folosim cv2.TM_CCOEFF, care reprezintă coeficientul de corelație.
Aici punctele cheie sunt coordonatele (X, Y) extrase folosind detectorul de cernere și desenate peste imagine folosind funcția punctului cheie de desenare cv2.
SURF
import cv2 import numpy ca np image = cv2.imread ('paris.jpg') gri = cv2.cvtColor (imagine, cv2.COLOR_BGR2GRAY)
Creați obiectul SURF Feature Detector, aici stabilim pragul hessian la 500
surf = cv2.xfeatures2d.SURF_create (500) puncte cheie, descriptori = surf.detectAndCompute (gri, Nici unul) print ("Număr de puncte cheie detectate:", len (puncte cheie))
Desenați puncte cheie bogate pe imaginea de intrare
image = cv2.drawKeypoints (imagine, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Metoda caracteristicii - SURF', imagine) cv2.waitKey () cv2.destroyAllWindows ()
Ieșire consolă:
RAPID
import cv2 import numpy ca np image = cv2.imread ('paris.jpg') gri = cv2.cvtColor (imagine, cv2.COLOR_BGR2GRAY)
Creați un obiect FAST Detector
fast = cv2.FastFeatureDetector_create () # Obtine puncte cheie, implicit suprimarea non max este Activat # pentru a dezactiva set fast.setBool ('nonmaxSuppression', False) keypoints = fast.detect (gri, None) print ("Număr de puncte cheie Detectat: ", len (puncte cheie))
Desenați puncte cheie bogate pe imaginea de intrare
image = cv2.drawKeypoints (imagine, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Metoda caracteristicii - FAST', imagine) cv2.waitKey () cv2.destroyAllWindows ()
Ieșire consolă:
SCURT
import cv2 import numpy ca np image = cv2.imread ('paris.jpg') gri = cv2.cvtColor (imagine, cv2.COLOR_BGR2GRAY)
Creați un obiect detector FAST
brief = cv2.xfeatures2d.BriefDescriptorExtractor_create ()
Creați un extractor SCURT
#brief = cv2.DescriptorExtractor_create ("SCURT") # Determinați punctele cheie puncte cheie = fast.detect (gri, Nici unul)
Obțineți descriptori și noi puncte cheie finale folosind BRIEF
puncte cheie, descriptori = brief.compute (gri, puncte cheie) print ("Număr puncte cheie detectate:", len (puncte cheie))
Desenați puncte cheie bogate pe imaginea de intrare
image = cv2.drawKeypoints (imagine, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Metoda caracteristicii - SCURT', imagine) cv2.waitKey () cv2.destroyAllWindows ()
Ieșire consolă:
ORB
import cv2 import numpy ca np image = cv2.imread ('paris.jpg') gri = cv2.cvtColor (imagine, cv2.COLOR_BGR2GRAY)
Creați un obiect ORB, putem specifica numărul de puncte cheie pe care le dorim
orb = cv2.ORB_create () # Determinați punctele cheie puncte cheie = orb.detect (gri, Nici unul)
Obțineți descriptorii
puncte cheie, descriptori = orb.compute (gri, puncte cheie) print ("Număr puncte cheie detectate:", len (puncte cheie))
Desenați puncte cheie bogate pe imaginea de intrare
image = cv2.drawKeypoints (imagine, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Metoda caracteristicii - ORB', imagine) cv2.waitKey () cv2.destroyAllWindows ()
Ieșire consolă:
Putem specifica numărul de puncte cheie care are limita maximă de 5000, cu toate acestea valoarea implicită este 500, adică ORB va detecta automat cele mai bune 500 de puncte cheie dacă nu este specificată pentru nicio valoare a punctelor cheie.
Așadar, așa are loc detectarea obiectelor în OpenCV, aceleași programe pot fi rulate și în OpenCV instalat Raspberry Pi și pot fi utilizate ca dispozitiv portabil, cum ar fi smartphone-urile cu Google Lens.
Acest articol este trimis de la Master Computer Vision ™ OpenCV4 în Python cu cursul Deep Learning pe Udemy, creat de Rajeev Ratan, abonați-l pentru a afla mai multe despre Computer Vision și Python.