Začali sme učením základov OpenCV a potom sme vykonali základné spracovanie a manipuláciu s obrázkami, potom segmentácie obrázkov a mnoho ďalších operácií pomocou jazyka OpenCV a jazyka python. Tu v tejto časti vykonáme niekoľko jednoduchých techník detekcie objektov pomocou porovnávania šablón. Nájdeme objekt na obrázku a potom popíšeme jeho vlastnosti. Prvky sú bežné atribúty obrazu, ako sú rohy, hrany atď. Pozrime sa tiež na niektoré bežné a populárne algoritmy detekcie objektov, ako sú SIFT, SURF, FAST, BREIF a ORB.
Ako už bolo povedané v predchádzajúcich tutoriáloch, OpenCV je Open Source Commuter Vision Library, ktorá má rozhrania C ++, Python a Java a podporuje Windows, Linux, Mac OS, iOS a Android. Dá sa teda ľahko nainštalovať na Raspberry Pi s prostredím Python a Linux. A Raspberry Pi s OpenCV a pripojenou kamerou možno použiť na vytvorenie mnohých aplikácií na spracovanie obrazu v reálnom čase, ako je detekcia tváre, zámok tváre, sledovanie objektov, detekcia ŠPZ automobilov, domáci bezpečnostný systém atď.
Detekcia a rozpoznávanie objektov tvoria najdôležitejší prípad použitia pre počítačové videnie, používajú sa na výkonné veci ako napr
- Označovanie scén
- Robotická navigácia
- Samoriadiace autá
- Rozpoznávanie tela (Microsoft Kinect)
- Detekcia chorôb a rakoviny
- Rozpoznávanie tváre
- Rozpoznávanie rukopisu
- Identifikácia objektov na satelitných snímkach
Detekcia objektov VS rozpoznávanie
Rozpoznávanie objektov je druhá úroveň detekcie objektov, v ktorej je počítač schopný rozpoznať objekt od viacerých objektov v obraze a byť schopný ho identifikovať.
Teraz vykonáme niektoré funkcie spracovania obrazu, aby sme našli objekt z obrázka.
Vyhľadanie objektu z obrázka
Tu použijeme porovnávanie šablón na vyhľadanie znaku / objektu v obraze, na nájdenie tohto objektu použijeme funkciu cv2.matchTemplate () OpenCV.
import cv2 import numpy ako np
Načítajte vstupný obrázok a konvertujte ho na sivú farbu
image = cv2.imread ('WaldoBeach.jpg') cv2.imshow ('people', image) cv2.waitKey (0) grey = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Načítajte obrázok šablóny
template = cv2.imread ('waldo.jpg', 0) #výsledok zhody šablón objektu cez obrázok result = cv2.matchTemplate (grey, template, cv2.TM_CCOEFF) sin_val, max_val, min_loc, max_loc = cv2.minMaxLoc (výsledok)
Vytvorte ohraničujúci rámček
top_left = max_loc # zväčšenie veľkosti ohraničujúceho obdĺžnika o 50 pixelov bottom_right = (top_left + 50, top_left + 50) cv2.rectangle (image, top_left, bottom_right, (0,255,0), 5) cv2.imshow ('objekt nájdený'), obrázok) cv2.waitKey (0) cv2.destroyAllWindows ()
V cv2.matchTemplate (šedá, šablóna, cv2.TM_CCOEFF) zadajte obrázok v šedej škále, aby ste našli objekt a šablónu. Potom na nájdenie objektov z obrázka použite metódu párovania šablón, tu sa používa cv2.TM_CCOEFF .
Celá funkcia vráti pole, ktoré sa zadá do výsledku, ktorý je výsledkom procedúry porovnávania šablón.
A potom použijeme cv2.minMaxLoc (výsledok) , ktorý dá súradnice alebo ohraničujúci rámček, kde bol objekt nájdený v obraze, a keď tieto súradnice dostaneme, nakreslite nad ním obdĺžnik a roztiahnite malé rozmery poľa, aby predmet sa ľahko zmestí do obdĺžnika.
Existuje celý rad metód na vykonávanie porovnávania šablón. V tomto prípade používame cv2.TM_CCOEFF, čo je skratka pre korelačný koeficient.
Tu sú kľúčové body (X, Y) súradnice extrahované pomocou detektora preosievania a nakreslené cez obraz pomocou funkcie cv2 draw keypoint.
SURF
import cv2 import numpy ako np obrázok = cv2.imread ('paris.jpg') šedá = cv2.cvtColor (obrázok, cv2.COLOR_BGR2GRAY)
Vytvorte objekt detektora prvkov SURF, tu sme nastavili hesiánsky prah na 500
surf = cv2.xfeatures2d.SURF_create (500) kľúčových bodov, deskriptory = surf.detectAndCompute (šedá, žiadna) tlač („Počet zistených kľúčových bodov:“, len (kľúčové body))
Na vstupný obrázok nakreslite bohaté kľúčové body
image = cv2.drawKeypoints (image, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Metóda funkcií - SURF', obrázok) cv2.waitKey () cv2.destroyAllWindows ()
Výstup na konzolu:
RÝCHLO
import cv2 import numpy ako np obrázok = cv2.imread ('paris.jpg') šedá = cv2.cvtColor (obrázok, cv2.COLOR_BGR2GRAY)
Vytvorte objekt FAST Detector
fast = cv2.FastFeatureDetector_create () # Získať kľúčové body, predvolene je potlačenie max. zapnuté # pre vypnutie nastavených kľúčových bodov fast.setBool ('nonmaxSuppression', False) = fast.detect (šedá, žiadna) print ("Počet kľúčových bodov" Zistené: ", len (kľúčové body))
Na vstupný obrázok nakreslite bohaté kľúčové body
image = cv2.drawKeypoints (image, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Metóda funkcií - RÝCHLO', obrázok) cv2.waitKey () cv2.destroyAllWindows ()
Výstup na konzolu:
STRUČNE
import cv2 import numpy ako np obrázok = cv2.imread ('paris.jpg') šedá = cv2.cvtColor (obrázok, cv2.COLOR_BGR2GRAY)
Vytvorte FAST detektorový objekt
brief = cv2.xfeatures2d.BriefDescriptorExtractor_create ()
Vytvorte STRUČNÝ objekt extraktora
#brief = cv2.DescriptorExtractor_create ("BRIEF") # Určenie kľúčových bodov keypoints = fast.detect (sivá, žiadna)
Získajte deskriptory a nové konečné kľúčové body pomocou funkcie BRIEF
kľúčové body, deskriptory = brief.compute (sivé, kľúčové body) print ("Počet zistených kľúčových bodov:", len (kľúčové body))
Na vstupný obrázok nakreslite bohaté kľúčové body
image = cv2.drawKeypoints (image, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - BRIEF', image) cv2.waitKey () cv2.destroyAllWindows ()
Výstup na konzolu:
ORB
import cv2 import numpy ako np obrázok = cv2.imread ('paris.jpg') šedá = cv2.cvtColor (obrázok, cv2.COLOR_BGR2GRAY)
Vytvorte objekt ORB, môžeme určiť počet kľúčových bodov, ktoré požadujeme
orb = cv2.ORB_create () # Určenie kľúčových bodov keypoints = orb.detect (sivá, žiadna)
Získajte deskriptory
kľúčové body, deskriptory = orb.compute (sivá, kľúčové body) print ("Počet zistených kľúčových bodov:", len (kľúčové body))
Na vstupný obrázok nakreslite bohaté kľúčové body
image = cv2.drawKeypoints (image, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Metóda funkcií - ORB', obrázok) cv2.waitKey () cv2.destroyAllWindows ()
Výstup na konzolu:
Môžeme určiť počet kľúčových bodov, ktorý má maximálny limit 5 000, ale predvolená hodnota je 500, tj. ORB automaticky zistí najlepších 500 kľúčových bodov, pokiaľ nie je zadaný pre žiadnu hodnotu kľúčových bodov.
Takto prebieha detekcia objektov v OpenCV, rovnaké programy je možné spustiť aj v OpenCV nainštalovanom Raspberry Pi a možno ich použiť ako prenosné zariadenie, ako sú Smartphony s objektívom Google.
Tento článok je odkázaný z programu Master Computer Vision ™ OpenCV4 v Pythone s kurzom Deep Learning na Udemy, ktorý vytvoril Rajeev Ratan. Prihláste sa na jeho odber, aby ste sa dozvedeli viac o Computer Vision a Python.