Začali jsme osvojováním základů OpenCV a poté jsme provedli několik základních zpracování a manipulací s obrázky, následovali segmentace obrázků a mnoho dalších operací pomocí OpenCV a jazyka python. Zde v této části provedeme několik jednoduchých technik detekce objektů pomocí porovnávání šablon. Najdeme objekt v obrázku a poté popíšeme jeho vlastnosti. Prvky jsou společné atributy obrazu, jako jsou rohy, hrany atd. Podíváme se také na některé běžné a populární algoritmy detekce objektů, jako jsou SIFT, SURF, FAST, BREIF a ORB.
Jak již bylo řečeno v předchozích cvičeních, OpenCV je Open Source Commuter Vision Library, která má rozhraní C ++, Python a Java a podporuje Windows, Linux, Mac OS, iOS a Android. Lze jej tedy snadno nainstalovat na Raspberry Pi s prostředím Python a Linux. A Raspberry Pi s OpenCV a připojenou kamerou lze použít k vytvoření mnoha aplikací pro zpracování obrazu v reálném čase, jako je detekce obličeje, zámek obličeje, sledování objektu, detekce poznávací značky automobilu, domácí bezpečnostní systém atd.
Detekce a rozpoznávání objektů tvoří nejdůležitější případ použití pro počítačové vidění, jsou používány k provádění silných věcí, jako je
- Označování scén
- Robotická navigace
- Samořiditelná auta
- Rozpoznávání těla (Microsoft Kinect)
- Detekce nemocí a rakoviny
- Rozpoznávání obličeje
- Rozpoznávání rukopisu
- Identifikace objektů na satelitních snímcích
Rozpoznávání VS detekce objektů
Rozpoznávání objektů je druhá úroveň detekce objektů, ve které je počítač schopen rozpoznat objekt z více objektů v obraze a může jej identifikovat.
Nyní provedeme některé funkce zpracování obrazu, abychom našli objekt z obrázku.
Hledání objektu z obrázku
Zde použijeme porovnávání šablon pro vyhledání postavy / objektu v obraze, k vyhledání tohoto objektu použijeme funkci cv2.matchTemplate () OpenCV.
import cv2 import numpy jako np
Načtěte vstupní obrázek a převeďte jej na šedou
image = cv2.imread ('WaldoBeach.jpg') cv2.imshow ('people', image) cv2.waitKey (0) grey = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Načtěte obrázek šablony
template = cv2.imread ('waldo.jpg', 0) # result of template matching of object over an image result = cv2.matchTemplate (grey, template, cv2.TM_CCOEFF) sin_val, max_val, min_loc, max_loc = cv2.minMaxLoc (výsledek)
Vytvořte ohraničující rámeček
top_left = max_loc # zvětšení velikosti ohraničujícího obdélníku o 50 pixelů bottom_right = (top_left + 50, top_left + 50) cv2.rectangle (image, top_left, bottom_right, (0,255,0), 5) cv2.imshow ('objekt nalezen'), obrázek) cv2.waitKey (0) cv2.destroyAllWindows ()
V cv2.matchTemplate (šedá, šablona, cv2.TM_CCOEFF) zadejte obrázek v šedé škále a najděte objekt a šablonu. Poté použijte metodu shody šablon pro vyhledání objektů z obrázku, zde se používá cv2.TM_CCOEFF .
Celá funkce vrací pole, které je vloženo do result, což je výsledek procedury párování šablon.
A pak použijeme cv2.minMaxLoc (výsledek) , který dává souřadnice nebo ohraničující rámeček, kde byl objekt nalezen v obrázku, a když získáme tyto souřadnice, nakreslíme na něj obdélník a roztáhneme malé rozměry rámečku objekt se snadno vejde do obdélníku.
Existuje řada metod k provádění porovnávání šablon a v tomto případě používáme cv2.TM_CCOEFF, což je zkratka pro korelační koeficient.
Zde jsou klíčové body (X, Y) souřadnice extrahované pomocí detektoru třídění a nakreslené přes obraz pomocí funkce cv2 draw keypoint.
SURFOVAT
import cv2 import numpy jako np image = cv2.imread ('paris.jpg') grey = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Vytvořte objekt SURF Feature Detector, zde jsme nastavili zkřížení prahu na 500
surf = cv2.xfeatures2d.SURF_create (500) klíčových bodů, deskriptory = surf.detectAndCompute (šedá, žádná) tisk ("Počet zjištěných klíčových bodů :", len (klíčové body))
Na vstupní obrázek nakreslete bohaté klíčové body
image = cv2.drawKeypoints (image, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - SURF', image) cv2.waitKey () cv2.destroyAllWindows ()
Výstup konzoly:
RYCHLE
import cv2 import numpy jako np image = cv2.imread ('paris.jpg') grey = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Vytvořte objekt FAST Detector
fast = cv2.FastFeatureDetector_create () # Získejte klíčové body, ve výchozím nastavení je maximální potlačování nastaveno na # pro vypnutí nastavených klíčových bodů fast.setBool ('nonmaxSuppression', False) = fast.detect (šedá, Žádná) print ("Počet klíčových bodů Zjištěno: ", len (klíčové body))
Na vstupní obrázek nakreslete bohaté klíčové body
image = cv2.drawKeypoints (image, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - FAST', image) cv2.waitKey () cv2.destroyAllWindows ()
Výstup konzoly:
STRUČNÝ
import cv2 import numpy jako np image = cv2.imread ('paris.jpg') grey = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Vytvořte FAST detektorový objekt
brief = cv2.xfeatures2d.BriefDescriptorExtractor_create ()
Vytvořte BRIEF extractor objekt
#brief = cv2.DescriptorExtractor_create ("BRIEF") # Určete klíčové body keypoints = fast.detect (šedá, žádná)
Získejte deskriptory a nové konečné klíčové body pomocí BRIEF
klíčové body, deskriptory = brief.compute (šedá, klíčové body) tisk ("Počet zjištěných klíčových bodů :", len (klíčové body))
Na vstupní obrázek nakreslete bohaté klíč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 konzoly:
KOULE
import cv2 import numpy jako np image = cv2.imread ('paris.jpg') grey = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Vytvořte objekt ORB, můžeme určit požadovaný počet klíčových bodů
orb = cv2.ORB_create () # Určete klíčové body keypoints = orb.detect (šedá, žádná)
Získejte deskriptory
klíčové body, deskriptory = orb.compute (šedá, klíčové body) tisk ("Počet zjištěných klíčových bodů :", len (klíčové body))
Na vstupní obrázek nakreslete bohaté klíčové body
image = cv2.drawKeypoints (image, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Metoda funkce - ORB', obrázek) cv2.waitKey () cv2.destroyAllWindows ()
Výstup konzoly:
Můžeme určit počet klíčových bodů, který má maximální limit 5 000, ale výchozí hodnota je 500, tj. ORB automaticky detekuje nejlepších 500 klíčových bodů, pokud není zadáno pro žádnou hodnotu klíčových bodů.
Takto probíhá detekce objektů v OpenCV, stejné programy lze také spustit v Raspberry Pi nainstalovaném v OpenCV a lze je použít jako přenosné zařízení, jako jsou chytré telefony s Google Lens.
Tento článek je odkazován na Master Computer Vision ™ OpenCV4 v Pythonu s kurzem Deep Learning na Udemy, vytvořeným Rajeevem Ratanem, přihlaste se k odběru a dozvíte se více o Computer Vision a Pythonu.