Nagsimula kami sa pag-aaral ng mga pangunahing kaalaman sa OpenCV at pagkatapos ay gumawa ng ilang pangunahing pagproseso ng imahe at pagmamanipula sa mga imahe na sinundan ng mga paghihiwalay ng Imahe at maraming iba pang mga operasyon gamit ang OpenCV at python na wika. Dito, sa seksyong ito, magsasagawa kami ng ilang simpleng mga diskarte sa pagtuklas ng object gamit ang pagtutugma ng template. Mahahanap namin ang isang bagay sa isang imahe at pagkatapos ay ilalarawan namin ang mga tampok nito. Ang mga tampok ay ang mga karaniwang katangian ng imahe tulad ng mga sulok, gilid atbp Titingnan din namin ang ilang mga karaniwang at tanyag na mga algorithm sa pagtuklas ng bagay tulad ng SIFT, SURF, FAST, BREIF & ORB.
Tulad ng sinabi sa nakaraang mga tutorial, ang OpenCV ay Open Source Commuter Vision Library na mayroong mga interface ng C ++, Python at Java at sumusuporta sa Windows, Linux, Mac OS, iOS at Android. Kaya madali itong mai-install sa Raspberry Pi na may kapaligiran sa Python at Linux. At ang Raspberry Pi na may OpenCV at naka-attach na camera ay maaaring magamit upang lumikha ng maraming mga application ng pagproseso ng imahe ng real-time tulad ng Pagtuklas ng mukha, lock ng mukha, pagsubaybay sa object, pagtuklas ng plate ng numero ng kotse, system ng seguridad ng tahanan atbp.
Ang pagtuklas ng object at pagkilala sa form ang pinakamahalagang kaso ng paggamit para sa paningin ng computer, ginagamit ang mga ito upang gumawa ng mga makapangyarihang bagay tulad ng
- Mga tagpo ng pagmamarka
- Pag-navigate sa Robot
- Mga kotse na nagmamaneho ng sarili
- Pagkilala sa katawan (Microsoft Kinect)
- Sakit at kanser tiktikan
- Facial recognition
- Pagkilala sa sulat-kamay
- Pagkilala ng mga bagay sa mga imahe ng satellite
Pagtuklas ng Bagay VS Pagkilala
Ang pagkilala sa object ay ang pangalawang antas ng pagtuklas ng object kung saan nakilala ng computer ang isang bagay mula sa maraming bagay sa isang imahe at maaaring makilala ito.
Ngayon, magsasagawa kami ng ilang mga pagpapaandar sa pagproseso ng imahe upang makahanap ng isang bagay mula sa isang imahe.
Paghanap ng isang Bagay mula sa isang Imahe
Dito ay gagamitin namin ang pagtutugma ng template para sa paghahanap ng character / object sa isang imahe, gamitin ang function na OpenCV cv2.matchTemplate () para sa paghahanap ng bagay na iyon
i-import ang cv2 import numpy bilang np
I-load ang imahe ng pag-input at gawing kulay-abo
image = cv2.imread ('WaldoBeach.jpg') cv2.imshow ('people', image) cv2.waitKey (0) grey = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
I-load ang imahe ng template
template = cv2.imread ('waldo.jpg', 0) # Resulta ng pagtutugma ng template ng object sa isang resulta ng imahe = cv2.matchTemplate (grey, template, cv2.TM_CCOEFF) sin_val, max_val, min_loc, max_loc = cv2.minMaxLoc (resulta)
Lumikha ng kahon ng pagbubuklod
top_left = max_loc #pagdaragdag ng laki ng bounding na rektanggulo ng 50 pixel sa ibaba_ kanan = (top_left + 50, top_left + 50) cv2.rectangle (imahe, top_left, bottom_ Right, (0,255,0), 5) cv2.imshow ('nakita ang object', imahe) cv2.waitKey (0) cv2.destroyAllWindows ()
Sa cv2.matchTemplate (grey, template, cv2.TM_CCOEFF) , i-input ang kulay na kulay-abo na imahe upang hanapin ang bagay at template. Pagkatapos ilapat ang pamamaraan ng pagtutugma ng template para sa paghahanap ng mga bagay mula sa imahe, dito ginagamit ang cv2.TM_CCOEFF .
Ang buong pag-andar ay nagbabalik ng isang array na kung saan ay nai-input sa resulta, na kung saan ay ang resulta ng template ng pagtutugma ng pamamaraan.
At pagkatapos ay gumagamit kami ng cv2.minMaxLoc (resulta) , na nagbibigay sa mga coordinate o sa bounding box kung saan nahanap ang bagay sa isang imahe, at kapag nakuha namin ang mga coordinate na gumuhit ng isang rektanggulo sa ibabaw nito, at iunat ang isang maliit na sukat ng kahon kaya Madaling magkasya ang bagay sa loob ng rektanggulo.
Mayroong iba't ibang mga pamamaraan upang maisagawa ang pagtutugma ng template at sa kasong ito ginagamit namin ang cv2.TM_CCOEFF na nangangahulugang koepisyent ng ugnayan.
Narito ang mga keypoints ay (X, Y) mga koordinasyon na nakuha na gumagamit ng sift detector at iginuhit sa imahe gamit ang cv2 draw keypoint function.
SURF
import cv2 import numpy bilang np image = cv2.imread ('paris.jpg') grey = cv2.cvtColor (imahe, cv2.COLOR_BGR2GRAY)
Lumikha ng object ng SURF Feature Detector, dito itinakda namin ang hessian threshold sa 500
surf = cv2.xfeature2d.SURF_create (500) keypoints, descriptors = surf.detectAndCompute (grey, Wala) na naka- print ("Bilang ng mga keypoints na Natukoy:", len (keypoints))
Gumuhit ng mga rich key point sa input na imahe
imahe = cv2.drawKeypoints (imahe, keypoints, Wala, watawat = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Tampok na Paraan - SURF', imahe) cv2.waitKey () cv2.destroyAllWindows ()
Output ng Console:
MABILIS
import cv2 import numpy bilang np image = cv2.imread ('paris.jpg') grey = cv2.cvtColor (imahe, cv2.COLOR_BGR2GRAY)
Lumikha ng Mabilis na bagay ng Detector
mabilis = cv2.FastFeatureDetector_create () # Kumuha ng mga Puntong puntos, bilang default na hindi max na pagpigil ay Nasa # upang i-off ang set fast.setBool ('nonmaxSuppression', False) keypoints = fast.detect (grey, Wala) naka- print ("Bilang ng mga keypoints Nakita: ", len (keypoints))
Gumuhit ng mga mayamang keypoint sa input na imahe
imahe = cv2.drawKeypoints (imahe, keypoints, Wala, watawat = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - FAST', image) cv2.waitKey () cv2.destroyAllWindows ()
Output ng Console:
MABILIS
import cv2 import numpy bilang np image = cv2.imread ('paris.jpg') grey = cv2.cvtColor (imahe, cv2.COLOR_BGR2GRAY)
Lumikha ng Mabilis na object ng detector
maikling = cv2.xfeature2d.BriefDescriptorExtractor_create ()
Lumikha ng maikling bagay na taga-bunot
#brief = cv2.DescriptorExtractor_create ("BRIEF") # Tukuyin ang mga key point keypoint = fast.detect (grey, Wala)
Kumuha ng mga tagapaglaraw at bagong pangwakas na mga keypoint gamit ang BRIEF
keypoints, descriptors = brief.compute (grey, keypoints) print ("Bilang ng mga keypoints na Natukoy:", len (keypoints))
Gumuhit ng mga mayamang keypoint sa input na imahe
imahe = cv2.drawKeypoints (imahe, keypoints, Wala, watawat = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - BRIEF', imahe) cv2.waitKey () cv2.destroyAllWindows ()
Output ng Console:
ORB
import cv2 import numpy bilang np image = cv2.imread ('paris.jpg') grey = cv2.cvtColor (imahe, cv2.COLOR_BGR2GRAY)
Lumikha ng object ng ORB, maaari naming tukuyin ang bilang ng mga pangunahing puntong nais namin
orb = cv2.ORB_create () # Tukuyin ang mga key point keypoints = orb.detect (grey, Wala)
Kunin ang mga naglalarawan
keypoints, descriptors = orb.compute (grey, keypoints) print ("Bilang ng mga keypoints na Natukoy:", len (keypoints))
Gumuhit ng mga mayamang keypoint sa input na imahe
imahe = cv2.drawKeypoints (imahe, keypoints, Wala, watawat = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Tampok na Paraan - ORB', imahe) cv2.waitKey () cv2.destroyAllWindows ()
Output ng Console:
Maaari naming tukuyin ang bilang ng mga keypoints na may maximum na limitasyon na 5000, subalit ang default na halaga ay 500, ie ORB awtomatikong makakakita ng pinakamahusay na 500 mga keypoint kung hindi tinukoy para sa anumang halaga ng mga keypoints.
Kaya't ganito nagaganap ang pagtuklas ng bagay sa OpenCV, ang parehong mga programa ay maaari ding patakbuhin sa naka-install na OpenCV na Raspberry Pi at maaaring magamit bilang isang portable na aparato tulad ng mga Smartphone na mayroong Google Lens.
Ang artikulong ito ay tinukoy mula sa Master Computer Vision ™ OpenCV4 sa Python na may kurso na Deep Learning sa Udemy, nilikha ni Rajeev Ratan, i-subscribe ito upang malaman ang higit pa tungkol sa Computer Vision at Python.