Vi började med inlärningsgrunderna i OpenCV och gjorde sedan grundläggande bildbehandling och manipulationer av bilder följt av bildsegmentering och många andra operationer med OpenCV och pythonspråk. Här, i detta avsnitt, kommer vi att utföra några enkla objektdetekteringstekniker med mallmatchning. Vi hittar ett objekt i en bild och sedan kommer vi att beskriva dess funktioner. Funktioner är de vanliga attributen för bilden som hörn, kanter etc. Vi kommer också att titta på några vanliga och populära objektdetekteringsalgoritmer som SIFT, SURF, FAST, BREIF & ORB.
Som sagt i föregående handledning är OpenCV Open Source Commuter Vision Library som har C ++, Python och Java-gränssnitt och stöder Windows, Linux, Mac OS, iOS och Android. Så det kan enkelt installeras i Raspberry Pi med Python och Linux-miljö. Och Raspberry Pi med OpenCV och ansluten kamera kan användas för att skapa många realtidsbildbearbetningsapplikationer som ansiktsavkänning, ansiktslås, objektspårning, bilnummerplåtsdetektering, hemskyddssystem etc.
Objektdetektering och igenkänning är det viktigaste användningsfallet för datasyn, de används för att göra kraftfulla saker som
- Märkning av scener
- Robotnavigering
- Självkörande bilar
- Kroppsigenkänning (Microsoft Kinect)
- Sjukdom och detektion av cancer
- Ansiktsigenkänning
- Handskriftsigenkänning
- Identifiera objekt i satellitbilder
Objektavkänning VS-erkännande
Objektigenkänning är den andra nivån för detektering av objekt där datorn kan känna igen ett objekt från flera objekt i en bild och kanske kan identifiera det.
Nu kommer vi att utföra några bildbehandlingsfunktioner för att hitta ett objekt från en bild.
Hitta ett objekt från en bild
Här använder vi mallmatchning för att hitta karaktär / objekt i en bild, använd OpenCVs cv2.matchTemplate () -funktion för att hitta det objektet
importera cv2 importera numpy som np
Ladda inmatningsbilden och konvertera den till grå
bild = cv2.imread ('WaldoBeach.jpg') cv2.imshow ('människor', bild) cv2.waitKey (0) grå = cv2.cvtColor (bild, cv2.COLOR_BGR2GRAY)
Ladda mallbilden
mall = cv2.imread ('waldo.jpg', 0) # resultat av mallmatchning av objekt över ett bildresultat = cv2.matchTemplate (grå, mall, cv2.TM_CCOEFF) sin_val, max_val, min_loc, max_loc = cv2.minMaxLoc (resultat)
Skapa avgränsningsruta
top_left = max_loc #increasing the size of bounding rectangle with 50 pixels bottom_right = (top_left + 50, top_left + 50) cv2.rectangle (image, top_left, bottom_right, (0,255,0), 5) cv2.imshow ('objekt hittat', bild) cv2.waitKey (0) cv2.destroyAllWindows ()
I cv2.matchTemplate (grå, mall, cv2.TM_CCOEFF) , mata in gråskalebilden för att hitta objektet och mallen. Använd sedan mallmatchningsmetoden för att hitta objekten från bilden, här används cv2.TM_CCOEFF .
Hela funktionen returnerar en matris som matas in i resultatet, vilket är resultatet av mallmatchningsproceduren.
Och sedan använder vi cv2.minMaxLoc (resultat) , vilket ger koordinaterna eller avgränsningsrutan där objektet hittades i en bild, och när vi får dessa koordinater drar en rektangel över den och sträcker ut en liten dimension av rutan så att objekt kan lätt passa in i rektangeln.
Det finns olika metoder för att utföra mallmatchning och i det här fallet använder vi cv2.TM_CCOEFF som står för korrelationskoefficient.
Här är tangentpunkterna (X, Y) koordinater extraherade med hjälp av siktdetektor och dras över bilden med cv2-ritningstangentpunktfunktionen.
SURFA
importera cv2 importera numpy som np image = cv2.imread ('paris.jpg') grå = cv2.cvtColor (bild, cv2.COLOR_BGR2GRAY)
Skapa SURF Feature Detector-objekt, här sätter vi hessian tröskel till 500
surf = cv2.xfeatures2d.SURF_create (500) knapptryckningar, deskriptorer = surf.detectAndCompute (grå, ingen) tryck ("Antal tangentpunkter upptäckta:", len (tangentpunkter))
Rita rika nyckelpunkter på inmatad bild
image = cv2.drawKeypoints (bild, tangentpunkter, inget, flaggor = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - SURF', image) cv2.waitKey () cv2.destroyAllWindows ()
Konsolutgång:
SNABB
importera cv2 importera numpy som np image = cv2.imread ('paris.jpg') grå = cv2.cvtColor (bild, cv2.COLOR_BGR2GRAY)
Skapa FAST Detector-objekt
fast = cv2.FastFeatureDetector_create () # Skaffa nyckelpunkter, som standard är icke max-undertryckning På # för att stänga av set fast.setBool ('nonmaxSuppression', False) knapptryckningar = fast.detect (grå, Ingen) tryck ("Antal knapptryckningar Upptäckt: ", len (tangentpunkter))
Rita rika tangenter på inmatad bild
image = cv2.drawKeypoints (image, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - FAST', image) cv2.waitKey () cv2.destroyAllWindows ()
Konsolutgång:
KORT
importera cv2 importera numpy som np image = cv2.imread ('paris.jpg') grå = cv2.cvtColor (bild, cv2.COLOR_BGR2GRAY)
Skapa FAST detektorobjekt
kort = cv2.xfeatures2d.BriefDescriptorExtractor_create ()
Skapa BRIEF extractor-objekt
#brief = cv2.DescriptorExtractor_create ("BRIEF") # Bestäm nyckelpunkter tangentpunkter = fast.detect (grå, Ingen)
Skaffa beskrivare och nya slutliga tangentpunkter med BRIEF
knapptryckningar, deskriptorer = brief.compute (grå, tangentpunkter) tryck ("Antal upptäckta tangentpunkter:", len (tangentpunkter))
Rita rika tangenter på inmatad bild
image = cv2.drawKeypoints (bild, tangentpunkter, inget, flaggor = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - BRIEF', image) cv2.waitKey () cv2.destroyAllWindows ()
Konsolutgång:
KLOT
importera cv2 importera numpy som np image = cv2.imread ('paris.jpg') grå = cv2.cvtColor (bild, cv2.COLOR_BGR2GRAY)
Skapa ORB-objekt, vi kan ange antalet nyckelpunkter vi önskar
orb = cv2.ORB_create () # Bestäm nyckelpunkter tangentpunkter = orb.detect (grå, Ingen)
Skaffa beskrivarna
knapptryckningar, deskriptorer = orb.compute (grå, tangentpunkter) tryck ("Antal upptäckta tangentpunkter:", len (tangentpunkter))
Rita rika tangenter på inmatad bild
image = cv2.drawKeypoints (bild, tangentpunkter, inget, flaggor = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - ORB', image) cv2.waitKey () cv2.destroyAllWindows ()
Konsolutgång:
Vi kan ange antalet knapptryckningar som har en maxgräns på 5000, men standardvärdet är 500, dvs ORB skulle automatiskt upptäcka bästa 500 tangentpunkter om det inte anges för något värde för tangentpunkterna.
Så det här är hur objektdetektering sker i OpenCV, samma program kan också köras i OpenCV-installerade Raspberry Pi och kan användas som en bärbar enhet som smartphones med Google Lens.
Denna artikel hänvisas från Master Computer Vision ™ OpenCV4 i Python med Deep Learning-kurs om Udemy, skapad av Rajeev Ratan, prenumerera på den för att lära dig mer om Computer Vision och Python.