Mēs sākām apgūt OpenCV pamatus un pēc tam veicām dažas pamata attēlu apstrādes un manipulācijas ar attēliem, kam sekoja Attēlu segmentēšana un daudzas citas darbības, izmantojot OpenCV un pitona valodu. Šeit, šajā sadaļā, mēs veiksim dažas vienkāršas objektu noteikšanas metodes, izmantojot veidņu atbilstību. Mēs atradīsim objektu attēlā un pēc tam aprakstīsim tā īpašības. Funkcijas ir kopīgi attēla atribūti, piemēram, stūri, malas utt. Mēs arī apskatīsim dažus populārus un populārus objektu noteikšanas algoritmus, piemēram, SIFT, SURF, FAST, BREIF un ORB.
Kā stāstīts iepriekšējās apmācībās, OpenCV ir atvērtā koda piepilsētas redzamības bibliotēka, kurai ir C ++, Python un Java saskarnes un kas atbalsta Windows, Linux, Mac OS, iOS un Android. Tātad to var viegli instalēt Raspberry Pi ar Python un Linux vidi. Un Raspberry Pi ar OpenCV un pievienoto kameru var izmantot, lai izveidotu daudzas reāllaika attēlu apstrādes programmas, piemēram, sejas noteikšanu, sejas bloķēšanu, objektu izsekošanu, automašīnas numura zīmes noteikšanu, mājas drošības sistēmu utt.
Objekta noteikšana un atpazīšana ir vissvarīgākais datora redzēšanas izmantošanas gadījums, tos izmanto, lai veiktu tādas spēcīgas lietas kā
- Sižetu etiķetēšana
- Robotu navigācija
- Pašpiedziņas automašīnas
- Ķermeņa atpazīšana (Microsoft Kinect)
- Slimību un vēža noteikšana
- Sejas atpazīšana
- Rokraksta atpazīšana
- Objektu identificēšana satelītattēlos
Objekta noteikšana VS atpazīšana
Objekta atpazīšana ir objektu noteikšanas otrais līmenis, kurā dators spēj atpazīt objektu no vairākiem attēlā esošiem objektiem un, iespējams, to atpazīt.
Tagad mēs veiksim dažas attēlu apstrādes funkcijas, lai no attēla atrastu objektu.
Objekta atrašana no attēla
Šeit mēs izmantosim veidņu atbilstību, lai attēlā atrastu rakstzīmi / objektu, šī objekta atrašanai izmantojiet OpenCV funkciju cv2.matchTemplate ().
import cv2 import numpy kā np
Ielādējiet ievades attēlu un pārveidojiet to pelēkā krāsā
image = cv2.imread ('WaldoBeach.jpg') cv2.imshow ('cilvēki', attēls) cv2.waitKey (0) pelēks = cv2.cvtColor (attēls, cv2.COLOR_BGR2GRAY)
Ielādējiet veidnes attēlu
template = cv2.imread ('waldo.jpg', 0) # objekta veidnes atbilstības rezultāts attēla rezultātam = cv2.matchTemplate (pelēks, veidne, cv2.TM_CCOEFF) sin_val, max_val, min_loc, max_loc = cv2.minMaxLoc (rezultāts)
Izveidot norobežojošo lodziņu
top_left = max_loc # robežojošā taisnstūra lieluma palielināšana par 50 pikseļiem bottom_right = (augšējā pa kreisi + 50, top_left + 50) cv2. taisnstūris (attēls, top_left, bottom_right (0,255,0), 5) cv2.imshow ('atrasts objekts', attēls) cv2.waitKey (0) cv2.destroyAllWindows ()
Programmā cv2.matchTemplate (pelēks, veidne, cv2.TM_CCOEFF) ievadiet pelēkā mēroga attēlu, lai atrastu objektu un veidni. Pēc tam izmantojiet veidņu atbilstības metodi objektu atrašanai no attēla, šeit tiek izmantots cv2.TM_CCOEFF .
Visa funkcija atgriež masīvu, kas tiek ievadīts rezultātā, kas ir veidņu saskaņošanas procedūras rezultāts.
Pēc tam mēs izmantojam cv2.minMaxLoc (rezultāts) , kas norāda koordinātas vai norobežojošo lodziņu, kurā attēlā tika atrasts objekts, un, kad mēs šīs koordinātas saņemam, uzzīmējiet virs tās taisnstūri un izstiepiet nedaudz lodziņa izmērus, lai objektu var viegli ievietot taisnstūra iekšpusē.
Veidņu atbilstības veikšanai ir dažādas metodes, un šajā gadījumā mēs izmantojam cv2.TM_CCOEFF, kas nozīmē korelācijas koeficientu.
Šeit galvenie punkti ir (X, Y) koordinātas, kas iegūtas, izmantojot sijāšanas detektoru, un pārvilktas virs attēla, izmantojot funkciju cv2 draw keypoint funkcija.
SURF
importēt cv2 importēt numpy kā np image = cv2.imread ('paris.jpg') pelēks = cv2.cvtColor (attēls, cv2.COLOR_BGR2GRAY)
Izveidojiet objektu SURF Feature Detector, šeit mēs iestatām hesijas slieksni uz 500
surf = cv2.xfeatures2d.SURF_create (500) atslēgas punkti, deskriptori = surf.detectAndCompute (pelēks, Neviens) print (" Noteikto atslēgu punktu skaits:", len (keypoints))
Uz ievades attēla uzzīmējiet bagātīgus galvenos punktus
image = cv2.drawKeypoints (attēls, atslēgas punkti, nav, karodziņi = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - SURF', attēls) cv2.waitKey () cv2.destroyAllWindows (
Konsoles izeja:
ĀTRI
importēt cv2 importēt numpy kā np image = cv2.imread ('paris.jpg') pelēks = cv2.cvtColor (attēls, cv2.COLOR_BGR2GRAY)
Izveidot objektu FAST Detector
fast = cv2.FastFeatureDetector_create () # Iegūstiet galvenos punktus, pēc noklusējuma non max nomākšana ir On #, lai izslēgtu iestatītos fast.setBool ('nonmaxSuppression', False) atslēgas punktus = fast.detect (pelēks, Neviens) print (" Atslēgas punktu skaits Noteikts: ", len (galvenie punkti))
Uz ievades attēla uzzīmējiet bagātīgus galvenos punktus
image = cv2.drawKeypoints (attēls, atslēgas punkti, nav, karodziņi = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - FAST', attēls) cv2.waitKey () cv2.destroyAllWindows ()
Konsoles izeja:
ĪSS
importēt cv2 importēt numpy kā np image = cv2.imread ('paris.jpg') pelēks = cv2.cvtColor (attēls, cv2.COLOR_BGR2GRAY)
Izveidojiet FAST detektora objektu
īss = cv2.xfeatures2d.BriefDescriptorExtractor_create ()
Izveidojiet ĪSS ekstraktora objektu
#brief = cv2.DescriptorExtractor_create ("BRIEF") # Noteikt galvenos punktus keypoints = fast.detect (pelēks, Nav)
Iegūstiet aprakstus un jaunus galvenos punktus, izmantojot BRIEF
keypoints, deskriptors = brief.compute (pelēks, keypoints) print (" Noteikto atslēgas punktu skaits:", len (keypoints))
Uz ievades attēla uzzīmējiet bagātīgus galvenos punktus
image = cv2.drawKeypoints (attēls, atslēgas punkti, nav, karodziņi = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - BRIEF', attēls) cv2.waitKey () cv2.destroyAllWindows ()
Konsoles izeja:
ORB
importēt cv2 importēt numpy kā np image = cv2.imread ('paris.jpg') pelēks = cv2.cvtColor (attēls, cv2.COLOR_BGR2GRAY)
Izveidojiet ORB objektu, mēs varam norādīt vēlamo galveno punktu skaitu
orb = cv2.ORB_create () # Noteikt galvenos punktus keypoints = orb.detect (pelēks, Nav)
Iegūstiet aprakstus
keypoints, descriptors = orb.compute (pelēks, keypoints) print (" Noteikto atslēgas punktu skaits:", len (keypoints))
Uz ievades attēla uzzīmējiet bagātīgus galvenos punktus
image = cv2.drawKeypoints (attēls, atslēgas punkti, nav, karodziņi = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - ORB', attēls) cv2.waitKey () cv2.destroyAllWindows ()
Konsoles izeja:
Mēs varam norādīt atslēgu punktu skaitu, kura maksimālā robeža ir 5000, tomēr noklusējuma vērtība ir 500, ti, ORB automātiski atklātu labākos 500 galvenos punktus, ja tas nav norādīts nevienam atslēgas punktu vērtībai.
Tādējādi objektu noteikšana notiek OpenCV, tās pašas programmas var palaist arī OpenCV instalētajā Raspberry Pi un tās var izmantot kā pārnēsājamu ierīci, piemēram, viedtālruņiem ar Google Lens.
Šis raksts ir minēts no Rajeev Ratan izveidotā Master Computer Vision ™ OpenCV4 Python ar padziļinātas mācīšanās kursu par Udemy. Abonējiet to, lai uzzinātu vairāk par Computer Vision un Python.