Vi startet med å lære grunnleggende om OpenCV og gjorde deretter noen grunnleggende bildebehandling og manipulasjoner på bilder etterfulgt av bildesegmenteringer og mange andre operasjoner ved hjelp av OpenCV og pythonspråk. Her, i denne delen, vil vi utføre noen enkle teknikker for gjenkjenning av objekter ved bruk av malmatching. Vi finner et objekt i et bilde, og deretter vil vi beskrive dets funksjoner. Funksjoner er de vanlige attributtene til bildet som hjørner, kanter osv. Vi vil også se på noen vanlige og populære objektgjenkjenningsalgoritmer som SIFT, SURF, FAST, BREIF & ORB.
Som fortalt i de foregående opplæringene, er OpenCV Open Source Commuter Vision Library som har C ++, Python og Java-grensesnitt og støtter Windows, Linux, Mac OS, iOS og Android. Så det kan enkelt installeres i Raspberry Pi med Python og Linux-miljø. Og Raspberry Pi med OpenCV og tilkoblet kamera kan brukes til å lage mange sanntids bildebehandlingsapplikasjoner som ansiktsgjenkjenning, ansiktslås, gjenstandssporing, registreringsnummer for bilnummer, hjemmesikkerhetssystem etc.
Objektgjenkjenning og gjenkjenning er det viktigste bruksområdet for datasyn, de brukes til å gjøre kraftige ting som f.eks
- Merking av scener
- Robotnavigasjon
- Selvkjørende biler
- Kroppsgjenkjenning (Microsoft Kinect)
- Sykdom og kreftpåvisning
- Ansiktsgjenkjenning
- Håndskriftgjenkjenning
- Identifisere gjenstander i satellittbilder
Objektdeteksjon VS gjenkjenning
Objektgjenkjenning er det andre nivået av gjenstandsdeteksjon der datamaskinen er i stand til å gjenkjenne et objekt fra flere objekter i et bilde og kanskje være i stand til å identifisere det.
Nå skal vi utføre noen bildebehandlingsfunksjoner for å finne et objekt fra et bilde.
Finne et objekt fra et bilde
Her vil vi bruke malmatching for å finne karakter / objekt i et bilde, bruk OpenCVs cv2.matchTemplate () -funksjon for å finne det objektet
importer cv2 import numpy som np
Last inn bildet og konverter det til grått
image = cv2.imread ('WaldoBeach.jpg') cv2.imshow ('people', image) cv2.waitKey (0) grå = cv2.cvtColor (bilde, cv2.COLOR_BGR2GRAY)
Last inn malbildet
mal = cv2.imread ('waldo.jpg', 0) # resultat av malmatching av objekt over et bilderesultat = cv2.matchTemplate (grå, mal, cv2.TM_CCOEFF) sin_val, max_val, min_loc, max_loc = cv2.minMaxLoc (resultat)
Opprett avgrensningsboks
top_left = max_loc # øker størrelsen på begrensende rektangel med 50 piksler bottom_right = (top_left + 50, top_left + 50) cv2.rectangle (image, top_left, bottom_right, (0,255,0), 5) cv2.imshow ('objekt funnet', image) cv2.waitKey (0) cv2.destroyAllWindows ()
I cv2.matchTemplate (grå, mal, cv2.TM_CCOEFF) skriver du inn gråskalabildet for å finne objektet og malen. Bruk deretter malmatchmetoden for å finne objektene fra bildet, her brukes cv2.TM_CCOEFF .
Hele funksjonen returnerer en matrise som er angitt i resultatet, som er resultatet av maltilpasningsprosedyren.
Og så bruker vi cv2.minMaxLoc (resultat) , som gir koordinatene eller avgrensningsboksen der objektet ble funnet i et bilde, og når vi får disse koordinatene, tegner du et rektangel over det og strekker litt dimensjoner av boksen slik at objektet kan lett passe inn i rektangelet.
Det finnes mange metoder for å utføre malmatching, og i dette tilfellet bruker vi cv2.TM_CCOEFF som står for korrelasjonskoeffisient.
Her er tastaturene (X, Y) koordinater hentet ut ved hjelp av siktdetektor og tegnet over bildet ved hjelp av cv2 tegn tastaturfunksjon.
SURF
importer cv2 import numpy som np image = cv2.imread ('paris.jpg') grå = cv2.cvtColor (bilde, cv2.COLOR_BGR2GRAY)
Lag SURF Feature Detector-objekt, her setter vi hessisk terskel til 500
surf = cv2.xfeatures2d.SURF_create (500) tastatur, beskrivelser = surf.detectAndCompute (grå, Ingen) utskrift ("Antall tastatur oppdaget:", len (tastatur))
Tegn rike nøkkelpunkter på inngangsbildet
image = cv2.drawKeypoints (bilde, tastatur, ingen, flagg = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - SURF', image) cv2.waitKey () cv2.destroyAllWindows ()
Konsollutgang:
FORT
importer cv2 import numpy som np image = cv2.imread ('paris.jpg') grå = cv2.cvtColor (bilde, cv2.COLOR_BGR2GRAY)
Opprett FAST Detector-objekt
fast = cv2.FastFeatureDetector_create () # Skaff nøkkelpunkter , som standard er ikke maks. undertrykkelse På # for å slå av set fast.setBool ('nonmaxSuppression', False) tastetrykk = fast.detect (grå, Ingen) utskrift ("Antall tastetrykk Oppdaget: ", len (tastatur))
Tegn rike tastatur på inngangsbildet
image = cv2.drawKeypoints (bilde, tastatur, ingen, flagg = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - FAST', image) cv2.waitKey () cv2.destroyAllWindows ()
Konsollutgang:
KORT
importer cv2 import numpy som np image = cv2.imread ('paris.jpg') grå = cv2.cvtColor (bilde, cv2.COLOR_BGR2GRAY)
Opprett FAST detektorobjekt
kort = cv2.xfeatures2d.BriefDescriptorExtractor_create ()
Lag BRIEF extractor-objekt
#brief = cv2.DescriptorExtractor_create ("BRIEF") # Bestem nøkkelpunkter tastatur = fast.detect (grå, Ingen)
Få beskrivelser og nye endelige tastatur ved hjelp av BRIEF
tastatur, beskrivelser = kort.kalkulator (grå, tastatur) trykk ("Antall tastatur oppdaget:", len (tastatur))
Tegn rike tastatur på inngangsbildet
image = cv2.drawKeypoints (bilde, tastatur, ingen, flagg = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - BRIEF', image) cv2.waitKey () cv2.destroyAllWindows ()
Konsollutgang:
ORB
importer cv2 import numpy som np image = cv2.imread ('paris.jpg') grå = cv2.cvtColor (bilde, cv2.COLOR_BGR2GRAY)
Lag ORB-objekt, vi kan spesifisere antall nøkkelpunkter vi ønsker
orb = cv2.ORB_create () # Bestem nøkkelpunkter tastatur = orb.detect (grå, Ingen)
Få beskrivelsene
tastatur, beskrivelser = orb.compute (grå, tastatur) trykk ("Antall tastatur oppdaget:", len (tastatur))
Tegn rike tastatur på inngangsbildet
image = cv2.drawKeypoints (bilde, tastatur, ingen, flagg = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - ORB', image) cv2.waitKey () cv2.destroyAllWindows ()
Konsollutgang:
Vi kan spesifisere antall tastaturer som har en maksimumsgrense på 5000, men standardverdien er 500, dvs. at ORB automatisk vil oppdage de beste 500 tastaturene hvis ikke spesifisert for noen verdi av tastaturene.
Så dette er hvordan gjenkjenning av objekter foregår i OpenCV, de samme programmene kan også kjøres i OpenCV installert Raspberry Pi og kan brukes som en bærbar enhet som smarttelefoner som har Google Lens.
Denne artikkelen er henvist fra Master Computer Vision ™ OpenCV4 i Python med Deep Learning-kurs på Udemy, opprettet av Rajeev Ratan, abonner på den for å lære mer om Computer Vision og Python.