Začeli smo z učenjem osnov OpenCV, nato pa izvedli nekaj osnovnih obdelav slik in manipulacije s slikami, čemur so sledile segmentacije slik in številne druge operacije z uporabo OpenCV in jezika python. Tu v tem razdelku bomo izvedli nekaj preprostih tehnik zaznavanja predmetov z uporabo ujemanja predlog. Na sliki bomo našli predmet in nato opisali njegove značilnosti. Funkcije so pogosti atributi slike, kot so vogali, robovi itd. Ogledali si bomo tudi nekatere pogoste in priljubljene algoritme za zaznavanje predmetov, kot so SIFT, SURF, FAST, BREIF & ORB.
Kot smo že povedali v prejšnjih vajah, je OpenCV odprtokodna knjižnica Commuter Vision, ki ima vmesnike C ++, Python in Java in podpira Windows, Linux, Mac OS, iOS in Android. Tako ga je mogoče enostavno namestiti v Raspberry Pi z okoljem Python in Linux. Raspberry Pi z OpenCV in priloženo kamero lahko uporabimo za ustvarjanje številnih aplikacij za obdelavo slik v realnem času, kot so zaznavanje obrazov, zaklepanje obrazov, sledenje predmetom, zaznavanje registrske tablice, sistem za domačo varnost itd.
Zaznavanje in prepoznavanje predmetov sta najpomembnejši primer uporabe računalniškega vida, uporabljata se za močne stvari, kot so
- Označevanje prizorov
- Navigacija robota
- Samovozeči avtomobili
- Prepoznavanje telesa (Microsoft Kinect)
- Odkrivanje bolezni in raka
- Prepoznavanje obraza
- Prepoznavanje rokopisa
- Prepoznavanje predmetov na satelitskih posnetkih
Prepoznavanje objektov VS Prepoznavanje
Prepoznavanje predmetov je druga stopnja zaznavanja predmetov, pri kateri lahko računalnik prepozna objekt iz več predmetov na sliki in ga lahko prepozna.
Zdaj bomo izvedli nekaj funkcij obdelave slik, da bi našli predmet na sliki.
Iskanje predmeta na sliki
Tu bomo uporabili ujemanje predlog za iskanje znaka / predmeta na sliki, za iskanje tega predmeta uporabimo funkcijo cv2.matchTemplate () OpenCV
uvoz cv2 uvoz numpy kot np
Naložite vhodno sliko in jo pretvorite v sivo
image = cv2.imread ('WaldoBeach.jpg') cv2.imshow ('ljudje', slika) cv2.waitKey (0) siva = cv2.cvtColor (slika, cv2.COLOR_BGR2GREY)
Naložite sliko predloge
template = cv2.imread ('waldo.jpg', 0) # rezultat ujemanja predloge predmeta nad rezultatom slike = cv2.matchTemplate (siva, predloga, cv2.TM_CCOEFF) sin_val, max_val, min_loc, max_loc = cv2.minMaxLoc (rezultat)
Ustvari mejno polje
top_left = max_loc #povečanje velikosti omejevalnega pravokotnika za 50 slikovnih pik bottom_right = (top_left + 50, top_left + 50) cv2.rectangle (slika, top_left, bottom_right, (0,255,0), 5) cv2.imshow ('objekt najden', slika) cv2.waitKey (0) cv2.destroyAllWindows ()
V cv2.matchTemplate (siva, predloga, cv2.TM_CCOEFF) vnesite sivo sliko, da poiščete predmet in predlogo. Nato uporabite metodo ujemanja predloge za iskanje predmetov s slike, tukaj se uporablja cv2.TM_CCOEFF .
Celotna funkcija vrne matriko, ki je vnesena v rezultat, ki je rezultat postopka ujemanja predloge.
Nato uporabimo cv2.minMaxLoc (rezultat) , ki poda koordinate ali omejevalno polje, kjer je bil predmet najden na sliki, in ko dobimo te koordinate, narišemo pravokotnik in raztegnemo majhne dimenzije polja, tako da predmet lahko enostavno vstavite v pravokotnik.
Obstaja več načinov za izvedbo ujemanja predlog in v tem primeru uporabljamo cv2.TM_CCOEFF, kar pomeni korelacijski koeficient.
Tu so ključne točke koordinate (X, Y), izvlečene z detektorjem presejanja in narisane nad sliko s funkcijo cv2 draw keypoint.
SURF
import cv2 import numpy as np image = cv2.imread ('paris.jpg') grey = cv2.cvtColor (image, cv2.COLOR_BGR2GREY)
Ustvari objekt SURF Feature Detector, tukaj nastavimo hessov prag na 500
surf = cv2.xfeatures2d.SURF_create (500) ključne točke, deskriptorji = surf.detectAndCompute (siva, nobena) print ("Število zaznanih ključnih točk:", len (ključne točke))
Na vhodno sliko narišite bogate ključne točke
image = cv2.drawKeypoints (slika, ključne točke, Nobena, zastavice = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Metoda funkcije - SURF', slika) cv2.waitKey () cv2.destroyAllWindows ()
Izhod konzole:
HITRO
import cv2 import numpy as np image = cv2.imread ('paris.jpg') grey = cv2.cvtColor (image, cv2.COLOR_BGR2GREY)
Ustvari objekt FAST Detector
fast = cv2.FastFeatureDetector_create () # Pridobite ključne točke, privzeto je zatiranje maks. vklopljeno # za izklop nastavite fast.setBool ('nonmaxSuppression', False) keypoints = fast.detect (sivo, Brez) print ("Število ključnih točk Zaznano: ", len (ključne točke))
Na vhodno sliko narišite bogate ključne točke
image = cv2.drawKeypoints (slika, ključne točke, Nobena, zastavice = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Metoda funkcije - HITRO', slika) cv2.waitKey () cv2.destroyAllWindows ()
Izhod konzole:
KRATKO
import cv2 import numpy as np image = cv2.imread ('paris.jpg') grey = cv2.cvtColor (image, cv2.COLOR_BGR2GREY)
Ustvari objekt FAST detector
kratko = cv2.xfeatures2d.BriefDescriptorExtractor_create ()
Ustvari BRIEF objekt izvlečka
#brief = cv2.DescriptorExtractor_create ("KRATKO") # Določite ključne točke keypoints = fast.detect (siva, Nobena)
Z BRIEF pridobite deskriptorje in nove končne ključne točke
keypoints, descriptors = short.compute (siva, keypoints) print ("Število zaznanih ključnih točk:", len (keypoints))
Na vhodno sliko narišite bogate ključne točke
image = cv2.drawKeypoints (slika, ključne točke, Nobena, zastavice = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Način funkcije - KRATKO', slika) cv2.waitKey () cv2.destroyAllWindows ()
Izhod konzole:
ORB
import cv2 import numpy as np image = cv2.imread ('paris.jpg') grey = cv2.cvtColor (image, cv2.COLOR_BGR2GREY)
Ustvari objekt ORB, lahko določimo število ključnih točk, ki jih želimo
orb = cv2.ORB_create () # Določite ključne točke ključnih točk = orb.detect (siva, Nobena)
Pridobite deskriptorje
keypoints, descriptors = orb.compute (siva, keypoints) print ("Število zaznanih ključnih točk:", len (keypoints))
Na vhodno sliko narišite bogate ključne točke
image = cv2.drawKeypoints (slika, ključne točke, Nobena, zastavice = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Metoda funkcije - ORB', slika) cv2.waitKey () cv2.destroyAllWindows ()
Izhod konzole:
Lahko določimo število ključnih točk, ki ima največjo mejo 5000, vendar je privzeta vrednost 500, tj. ORB samodejno zazna najboljših 500 ključnih točk, če za katero koli vrednost ključnih točk ni določeno.
Torej tako poteka odkrivanje predmetov v OpenCV, iste programe lahko zaženete tudi v OpenCV, nameščenem Raspberry Pi, in jih lahko uporabite kot prenosno napravo, kot so pametni telefoni z Google Lens.
Ta članek je naveden v tečaju Master Computer Vision ™ OpenCV4 v Pythonu z globokim učenjem na Udemyju, ki ga je ustvaril Rajeev Ratan, naročite se nanj, če želite izvedeti več o Computer Visionu in Pythonu.