Vi startede med at lære grundlæggende om OpenCV og udførte derefter nogle grundlæggende billedbehandling og manipulationer på billeder efterfulgt af billedsegmenteringer og mange andre operationer ved hjælp af OpenCV og pythonsprog. Her i dette afsnit udfører vi nogle enkle teknikker til genkendelse af objekter ved hjælp af skabelontilpasning. Vi finder et objekt i et billede, og derefter beskriver vi dets egenskaber. Funktioner er de almindelige attributter for billedet såsom hjørner, kanter osv. Vi vil også se på nogle almindelige og populære objektdetekteringsalgoritmer som SIFT, SURF, FAST, BREIF & ORB.
Som fortalt i de foregående tutorials er OpenCV Open Source Commuter Vision Library, der har C ++, Python og Java-grænseflader og understøtter Windows, Linux, Mac OS, iOS og Android. Så det kan let installeres i Raspberry Pi med Python og Linux-miljø. Og Raspberry Pi med OpenCV og tilsluttet kamera kan bruges til at oprette mange realtids billedbehandlingsapplikationer som ansigtsgenkendelse, ansigtslås, genstandssporing, bilnummerpladesporing, hjemmesikkerhedssystem osv.
Objektdetektering og genkendelse udgør den vigtigste brugssag til computersyn, de bruges til at gøre magtfulde ting som f.eks
- Mærkning af scener
- Robotnavigation
- Selvkørende biler
- Kropsgenkendelse (Microsoft Kinect)
- Sygdom og kræftpåvisning
- Ansigtsgenkendelse
- Håndskriftgenkendelse
- Identificering af objekter i satellitbilleder
Objektregistrering VS anerkendelse
Objektgenkendelse er det andet niveau af objektdetektering, hvor computeren er i stand til at genkende et objekt fra flere objekter i et billede og muligvis kan identificere det.
Nu udfører vi nogle billedbehandlingsfunktioner for at finde et objekt fra et billede.
Find et objekt fra et billede
Her vil vi bruge skabelonmatchning til at finde karakter / objekt i et billede, brug OpenCVs cv2.matchTemplate () -funktion til at finde det objekt
import cv2 import numpy som np
Indlæs inputbillede og konverter det til gråt
billede = cv2.imread ('WaldoBeach.jpg') cv2.imshow ('mennesker', billede) cv2.waitKey (0) grå = cv2.cvtColor (billede, cv2.COLOR_BGR2GRAY)
Indlæs skabelonbilledet
skabelon = cv2.imread ('waldo.jpg', 0) #resultat af skabelonmatchning af objekt over et billedresultat = cv2.matchTemplate (grå, skabelon, cv2.TM_CCOEFF) sin_val, max_val, min_loc, max_loc = cv2.minMaxLoc (resultat)
Opret afgrænsningsfelt
top_left = max_loc # øger størrelsen af afgrænsningsrektanglet med 50 pixels bottom_right = (top_left + 50, top_left + 50) cv2.rectangle (image, top_left, bottom_right, (0,255,0), 5) cv2.imshow ('objekt fundet', billede) cv2.waitKey (0) cv2.destroyAllWindows ()
I cv2.matchTemplate (grå, skabelon, cv2.TM_CCOEFF) skal du indtaste gråskalabilledet for at finde objektet og skabelonen. Anvend derefter skabelontilpasningsmetoden til at finde objekterne fra billedet, her bruges cv2.TM_CCOEFF .
Hele funktionen returnerer en matrix, der er indtastet i resultatet, hvilket er resultatet af skabelonmatchningsproceduren.
Og så bruger vi cv2.minMaxLoc (resultat) , som giver koordinaterne eller afgrænsningsfeltet, hvor objektet blev fundet i et billede, og når vi får disse koordinater, træk et rektangel over det og stræk små dimensioner af feltet, så objekt kan let passe ind i rektanglet.
Der er forskellige metoder til at udføre skabelontilpasning, og i dette tilfælde bruger vi cv2.TM_CCOEFF, som står for korrelationskoefficient.
Her er tastaturet (X, Y) koordinater ekstraheret ved hjælp af sigtedetektor og trukket over billedet ved hjælp af cv2-tegnetastaturfunktion.
SURF
import cv2 import numpy som np image = cv2.imread ('paris.jpg') grå = cv2.cvtColor (billede, cv2.COLOR_BGR2GRAY)
Opret SURF Feature Detector-objekt, her indstiller vi hessians tærskel til 500
surf = cv2.xfeatures2d.SURF_create (500) tastatur, deskriptorer = surf.detectAndCompute (grå, Ingen) print ("Antal tastatur opdaget:", len (tastatur))
Tegn rige nøglepunkter på inputbillede
image = cv2.drawKeypoints (billede, tastatur, Ingen, flag = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - SURF', image) cv2.waitKey () cv2.destroyAllWindows ()
Konsol output:
HURTIG
import cv2 import numpy som np image = cv2.imread ('paris.jpg') grå = cv2.cvtColor (billede, cv2.COLOR_BGR2GRAY)
Opret FAST Detector-objekt
hurtig = cv2.FastFeatureDetector_create () # Få nøglepunkter , som standard er ikke maks. undertrykkelse Til # for at deaktivere indstillingen fast.setBool ('nonmaxSuppression', False) tastatur = fast.detect (grå, Ingen) print ("Antal tastaturer Opdaget: ", len (tastatur))
Tegn rige tastaturer på inputbillede
image = cv2.drawKeypoints (billede, tastatur, Ingen, flag = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - FAST', image) cv2.waitKey () cv2.destroyAllWindows ()
Konsol output:
KORT
import cv2 import numpy som np image = cv2.imread ('paris.jpg') grå = cv2.cvtColor (billede, cv2.COLOR_BGR2GRAY)
Opret FAST detektorobjekt
kort = cv2.xfeatures2d.BriefDescriptorExtractor_create ()
Opret BRIEF-udsugningsobjekt
#brief = cv2.DescriptorExtractor_create ("BRIEF") # Bestem nøglepunkter tastatur = fast.detect (grå, Ingen)
Få beskrivelser og nye endelige tastatur ved hjælp af BRIEF
tastatur, deskriptor = brief.compute (grå, tastatur) print ("Antal opdagede tastatur:", len (tastatur))
Tegn rige tastaturer på inputbillede
image = cv2.drawKeypoints (billede, tastatur, ingen, flag = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - BRIEF', image) cv2.waitKey () cv2.destroyAllWindows ()
Konsol output:
ORB
import cv2 import numpy som np image = cv2.imread ('paris.jpg') grå = cv2.cvtColor (billede, cv2.COLOR_BGR2GRAY)
Opret ORB-objekt, vi kan angive antallet af nøglepunkter, vi ønsker
orb = cv2.ORB_create () # Bestem nøglepunkter tastatur = orb.detect (grå, Ingen)
Få beskrivelserne
tastatur, deskriptor = orb.compute (grå, tastatur) print ("Antal opdagede tastatur:", len (tastatur))
Tegn rige tastaturer på inputbillede
image = cv2.drawKeypoints (billede, tastatur, Ingen, flag = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - ORB', image) cv2.waitKey () cv2.destroyAllWindows ()
Konsol output:
Vi kan specificere antallet af tastaturer, der har en maksimal grænse på 5000, men standardværdien er 500, dvs. ORB vil automatisk finde det bedste 500 tastatur, hvis det ikke er angivet for nogen værdi af tastaturet.
Så det er sådan, objektgenkendelse finder sted i OpenCV, de samme programmer kan også køres i OpenCV installeret Raspberry Pi og kan bruges som en bærbar enhed som smartphones, der har Google Lens.
Denne artikel henvises fra Master Computer Vision ™ OpenCV4 i Python med Deep Learning kursus om Udemy, oprettet af Rajeev Ratan, abonner på den for at lære mere om Computer Vision og Python.