Aloitimme oppimalla OpenCV: n perusteet ja teimme sitten joitain kuvien perustyöstöjä ja käsittelyjä, mitä seurasivat kuvasegmentit ja monet muut toiminnot käyttäen OpenCV: tä ja python-kieltä. Tässä, tässä osiossa, suoritamme joitain yksinkertaisia objektien tunnistustekniikoita mallien sovittamisen avulla. Löydämme objektin kuvasta ja sitten kuvailemme sen ominaisuuksia. Ominaisuudet ovat kuvan yleisiä määritteitä, kuten kulmat, reunat jne. Katsotaan myös joitain yleisiä ja suosittuja kohteiden tunnistusalgoritmeja, kuten SIFT, SURF, FAST, BREIF ja ORB.
Kuten edellisissä oppaissa kerrottiin, OpenCV on avoimen lähdekoodin Commuter Vision -kirjasto, jolla on C ++, Python ja Java -rajapinnat ja tukee Windowsia, Linuxia, Mac OS: ää, iOS: ää ja Androidia. Joten se voidaan helposti asentaa Raspberry Pi -ohjelmaan Python- ja Linux-ympäristössä. Ja Vadelma Pi: tä, jossa on OpenCV ja liitetty kamera, voidaan käyttää luomaan monia reaaliaikaisia kuvankäsittelysovelluksia, kuten kasvojentunnistus, kasvojen lukitus, esineiden seuranta, auton rekisterikilven tunnistus, kodin turvajärjestelmä jne.
Kohteiden havaitseminen ja tunnistaminen ovat tärkein tietokonenäön käyttötapaus, ja niitä käytetään tehokkaiden asioiden, kuten
- Kohtausten merkitseminen
- Robotinavigointi
- Itse ajavat autot
- Kehon tunnistus (Microsoft Kinect)
- Taudin ja syövän havaitseminen
- Kasvojentunnistus
- Käsinkirjoituksen tunnistus
- Satelliittikuvien kohteiden tunnistaminen
Kohteen tunnistus VS-tunnistus
Kohteen tunnistus on objektientunnistuksen toinen taso, jossa tietokone pystyy tunnistamaan objektin kuvassa olevista useista kohteista ja tunnistamaan sen.
Nyt suoritamme joitain kuvankäsittelytoimintoja kohteen löytämiseksi kuvasta.
Objektin etsiminen kuvasta
Täällä käytämme mallihakua merkin / objektin etsimiseen kuvasta, käytä OpenCV: n cv2.matchTemplate () -toimintoa kyseisen objektin löytämiseen
import cv2 import numpy np: nä
Lataa syötekuva ja muunna se harmaaksi
image = cv2.imread ('WaldoBeach.jpg') cv2.imshow ('ihmiset', kuva) cv2.waitKey (0) harmaa = cv2.cvtColor (kuva, cv2.COLOR_BGR2GRAY)
Lataa mallikuva
template = cv2.imread ('waldo.jpg', 0) # objektin mallin vastaavuuden tulos kuvan tuloksesta = cv2.matchTemplate (harmaa, malli, cv2.TM_CCOEFF) sin_val, max_val, min_loc, max_loc = cv2.minMaxLoc (tulos)
Luo rajoittava ruutu
top_left = max_loc #rajaavan suorakulmion koon lisääminen 50 pikselillä bottom_right = (ylä-vasen + 50, ylä-vasen + 50) cv2.s suorakulmio (kuva, ylä-vasen, ala-oikea, (0,255,0), 5) cv2.imshow ('esine löydetty', kuva) cv2.waitKey (0) cv2.destroyAllWindows ()
In cv2.matchTemplate (harmaa, malli, cv2.TM_CCOEFF) , tulo harmaa-asteikon kuvan kohteen löytämiseksi ja mallin. Käytä sitten mallien sovitusmenetelmää objektien etsimiseen kuvasta, tässä käytetään cv2.TM_CCOEFF .
Koko funktio palauttaa matriisin, joka syötetään tulokseen, joka on tulos mallien sovitusprosessista.
Ja sitten käytämme cv2.minMaxLoc (tulos) , joka antaa koordinaatit tai rajoittavan ruudun, josta esine löydettiin kuvasta, ja kun saamme nämä koordinaatit piirtävät sen päälle suorakulmion ja venyttävät pienen ruudun mittoja niin, että esine mahtuu helposti suorakulmion sisään.
Mallien sovittamisen suorittamiseksi on useita menetelmiä, ja tässä tapauksessa käytämme cv2.TM_CCOEFF, joka tarkoittaa korrelaatiokerrointa.
Tässä avainkohdat ovat (X, Y) koordinaatit, jotka erotetaan seulontunnistimella ja piirretään kuvan päälle käyttämällä cv2-piirtämisen avainpistetoimintoa.
SURF
tuo cv2 tuoda numerotiedosto muodossa np image = cv2.imread ('paris.jpg') harmaa = cv2.cvtColor (kuva, cv2.COLOR_BGR2GRAY)
Luo SURF Feature Detector -objekti, tässä asetamme hessian kynnysarvoksi 500
surf = cv2.xfeatures2d.SURF_create (500) avainpistettä, kuvaajat = surf.detectAndCompute (harmaa, ei mitään) tulosta ("Havaittujen avainpisteiden lukumäärä:", len (avainkohdat))
Piirrä rikkaat avainkohdat tulokuvaan
image = cv2.drawKeypoints (kuva, avainkohdat, Ei mitään, liput = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - SURF', image) cv2.waitKey () cv2.destroyAllWindows ()
Konsolin ulostulo:
NOPEASTI
tuo cv2 tuoda numerotiedosto muodossa np image = cv2.imread ('paris.jpg') harmaa = cv2.cvtColor (kuva, cv2.COLOR_BGR2GRAY)
Luo FAST Detector -objekti
fast = cv2.FastFeatureDetector_create () # Hanki avainkohdat, oletusarvon mukaan ei-max- esto on Päällä # poistaaksesi asetetut fast.setBool ('nonmaxSuppression', False) -avaimet pois päältä = fast.detect (harmaa, Ei mitään) -tulostus ("Avainpisteiden määrä") Havaittu: ", len (avainkohdat))
Piirrä rikkaat avainkohdat tulokuvaan
image = cv2.drawKeypoints (kuva, avainkohdat, Ei mitään, liput = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - FAST', image) cv2.waitKey () cv2.destroyAllWindows ()
Konsolin ulostulo:
LYHYT
tuo cv2 tuoda numerotiedosto muodossa np image = cv2.imread ('paris.jpg') harmaa = cv2.cvtColor (kuva, cv2.COLOR_BGR2GRAY)
Luo FAST-ilmaisinobjekti
short = cv2.xfeatures2d.BriefDescriptorExtractor_create ()
Luo LYHYT uuttoobjekti
#brief = cv2.DescriptorExtractor_create ("LYHYT") # Määritä avainkohdat avainkohdat = nopea.detekti (harmaa, Ei mitään)
Hanki kuvaimet ja uudet lopulliset avainkohdat LYHYESTI
keypoints, descriptors = brief.compute (harmaa, keypoints) tulosta ("Havaittujen avainkohtien lukumäärä:", len (keypoints))
Piirrä rikkaat avainkohdat tulokuvaan
image = cv2.drawKeypoints (kuva, avainkohdat, Ei mitään, liput = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Ominaisuusmenetelmä - LYHYT', kuva) cv2.waitKey () cv2.destroyAllWindows ()
Konsolin ulostulo:
ORB
tuo cv2 tuoda numerotiedosto muodossa np image = cv2.imread ('paris.jpg') harmaa = cv2.cvtColor (kuva, cv2.COLOR_BGR2GRAY)
Luo ORB-objekti, voimme määrittää haluamiemme avainpisteiden määrän
orb = cv2.ORB_create () # Määritä avainkohdat avainkohdat = orb.detect (harmaa, Ei mitään)
Hanki kuvaimet
keypoints, descriptors = orb.compute (harmaa, keypoints) tulosta ("Havaittujen avainkohtien lukumäärä:", len (keypoints))
Piirrä rikkaat avainkohdat tulokuvaan
image = cv2.drawKeypoints (kuva, avainkohdat, Ei mitään, liput = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - ORB', image) cv2.waitKey () cv2.destroyAllWindows ()
Konsolin ulostulo:
Voimme määrittää avainpisteiden lukumäärän, jonka enimmäisraja on 5000, mutta oletusarvo on 500, eli ORB havaitsee automaattisesti parhaat 500 avainpistettä, ellei sitä ole määritetty yhdelle avainpisteen arvolle.
Joten esineiden havaitseminen tapahtuu OpenCV: ssä, samoja ohjelmia voidaan käyttää myös OpenCV: n asennetussa Raspberry Pi: ssä ja niitä voidaan käyttää kannettavana laitteena, kuten älypuhelimina, joissa on Google Lens.
Tämä artikkeli on tarkoitettu Rajeev Ratanin luomaan Pythonin Master Computer Vision ™ OpenCV4 -kurssilla, jossa syvällistä oppimista käsittelevä Udemy-kurssi. Tilaa se saadaksesi lisätietoja Computer Visionista ja Pythonista.