Obsah:

Základní projekty OpenCV: 5 kroků
Základní projekty OpenCV: 5 kroků

Video: Základní projekty OpenCV: 5 kroků

Video: Základní projekty OpenCV: 5 kroků
Video: Робот, который ОТСЛЕЖИВАЕТ объекты (Python, OpenCV) 2024, Listopad
Anonim
Základní projekty OpenCV
Základní projekty OpenCV

V tomto projektu prozkoumáme některé základní funkce OpenCV prostřednictvím 4 jednoduchých projektů zahrnujících živé video stream. Jedná se o rozpoznávání obličeje, odstranění pozadí, speciální vizuální vykreslování okrajů a použití efektu rozostření na živý stream videa. Mým hlavním cílem při zkoušení těchto projektů bylo jednoduše namočit si nohy pomocí rozhraní OpenCV, protože se plánuji ponořit hlouběji do oblasti počítačového vidění

Zásoby

  • Počítač se systémem Python
  • Otevřená knihovna CV, knihovna Numpy, knihovna tkinter, knihovna sys
  • Kamera pro připojení k počítači (pokud počítač již žádnou neobsahuje)
  • Soubor pythonu programu (součástí tohoto návodu)
  • haarcascade xml soubor (součástí tohoto návodu)

Krok 1: Funkce FaceDetect

Funkce FaceDetect
Funkce FaceDetect
Funkce FaceDetect
Funkce FaceDetect

Tato funkce zobrazuje video vaší kamery se zelenými čtverečky na všech tvářích, které zachytí. V kódu používáme funkci cv2. VideoCapture () k ukládání videa, které pořizujeme, do objektu s názvem „zachytit“. CAPTURE_INDEX je číslo nastavené vaším počítačem, které odpovídá rejstříku vaší kamery v seznamu video vstupu počítače. Pokud k počítači nemáte připojenou externí kameru, měla by fungovat 0 nebo 1.

Objekt face_cascade je inicializován pomocí funkce cascadeClassifier a souboru „haarcascade_frontalface_default.xml“nalezeného v githubu OpenCV. Tento objekt používáme k ukládání obličejů detekovaných v seznamu „tváře“jako vstupní čtyřcestná řazená kolekce, která drží tváře souřadnice x, souřadnice y, šířka a výška. Potom nakreslíme obdélník, který dokonale obklopuje obličej pomocí funkce cv2.rectangle

Z tohoto videa OpenCV zachycuje mnoho obrázků ve smyčce while pomocí funkce capture.read () a ukládání obrázku do rámce, který jsme pojmenovali „img“. Každý obrázek je pak interpretován a upraven, jak si přejeme. Pro faceDetect vytvoříme obrázek šedý pomocí funkce cvtColor, která převede jakýkoli obrázek uvedený v prvním parametru na konkrétní typ barvy obrázku specifikovaný ve druhém parametru. Seznam přijatelných hodnot pro druhý parametr najdete online. Poté obrázek zobrazíme v okně s názvem „Detection the face“pomocí funkce imshow (), která přebírá řetězec pro zobrazení názvu okna a rámečku obrázku.

Nakonec počkáme, až uživatel zadá klávesu q pomocí funkce cv2.waitKey (). Maska 0xFF se používá jako konvence pro 64bitové počítače. Poté, co uživatel ukončí streamování videa, funkce faceDetect uvolní objekt pro zachycení a poté zničí všechna ostatní okna otevřená v rozhraní OpenCV. Všechny ostatní funkce mají podobnou strukturu návrhu.

Krok 2: Funkce BackgroundRemove

Funkce BackgroundRemove
Funkce BackgroundRemove
Funkce BackgroundRemove
Funkce BackgroundRemove

Tato funkce se pokusí odstranit část našeho videa na pozadí a ponechat pouze obrázek v popředí. U některých kamer to nemusí fungovat, protože využívají funkce úpravy osvětlení, která se aktivuje, když do objektu vstoupí různé objekty/ ohniska. Pokud vaše funkce BackgroundRemove nefunguje, nebojte se- může to být jen váš fotoaparát!

Chcete -li použít tuto funkci, ustupte od rámečku fotoaparátu a stisknutím tlačítka „d“pořiďte obrázek na pozadí. Je důležité, aby na pozadí nebyly žádné pohybující se objekty, které chcete zachytit. Poté můžeme ustoupit zpět do rámečku kamery. Pokud funkce fungovala, měl by se uživatel vidět pouze ve video streamu funkce. Jakýkoli šum/černé skvrny v popředí obrazu mohou být důsledkem úpravy osvětlení fotoaparátu. Chcete-li zachytit další pozadí, restartujte jej stisknutím klávesy „r“a poté znovu stiskněte „d“.

Některé klíčové funkce pro tuto funkci je použití logické hodnoty „flag“, která se vyvolá v okamžiku, kdy uživatel stiskne tlačítko d. Tím se zachytí pozadí a umožní nám to odstranit z videa, které funkce streamuje. Naším cílem je uložit obrázek na pozadí v ref_img, abychom jej mohli odlišit od obrázku v popředí, který zachycuje jakýkoli pohybující se objekt. Pomocí funkce cv2.subtract () odečteme obraz předního povrchu od obrazu na pozadí a naopak a poté okamžitě zrušíme jakékoli nepatrné rozdíly v těchto dvou obrázcích. Pozadí je černé.

Fg maska je vytvořena pomocí rozdílu mezi těmito dvěma obrázky a poté aplikována na video stream funkcí pomocí funkce OpenCV cv2.bitwise_and ().

Krok 3: Funkce VideoEdges

Funkce VideoEdges
Funkce VideoEdges
Funkce VideoEdges
Funkce VideoEdges

Tato funkce vrací náš živý video stream, ale detekovatelné hrany jsou vykresleny bíle, zatímco vše ostatní je zatemněno. To, co tuto funkci odlišuje od ostatních funkcí, je převod našeho původního videa z formátu RBG na HSV, což znamená odstín, sytost a variace- odlišný způsob zpracování světla a barev z videa. Pomocí této metody můžeme snáze odlišit obrysy ve videu pomocí filtru (red_low to red_high).

Detekce hran Canny se používá k detekci hran na obrázku. Přijímá obrázek šedé stupnice jako vstup a používá vícestupňový algoritmus.

Krok 4: Funkce VideoBlur

Funkce VideoBlur
Funkce VideoBlur
Funkce VideoBlur
Funkce VideoBlur

Tato funkce slouží k přidání efektu rozostření do našeho video streamu. Funkce jednoduše volá funkci GaussianBlur cv2 v našem rámci. Další informace o funkci gaussianBlur najdete zde:

opencv-python-tutroals.readthedocs.io/en/l…

Krok 5: Vylepšení

Nejcitlivější funkcí v tomto projektu je funkce odstranění pozadí, protože vyžaduje použití kamery, která nemá funkci nastavení osvětlení. V knihovně OpenCV může existovat lepší sada funkcí, které mohou toto nastavení osvětlení vysvětlit a plynule odstranit pozadí (podobně jako zelená obrazovka).

Mohli bychom také využít další funkce detekce obličeje, které mohou vytvářet objekty s více funkcemi než jen vracet (x, y) souřadnice. Možná by nebylo obtížné implementovat program rozpoznávání obličejů se schopností zapamatovat si tváře.

Funkce rozostření může být více přizpůsobena intuitivním ovládáním ze strany uživatele. Uživatel může například chtít upravit intenzitu efektu rozostření nebo vybrat konkrétní oblast v rámci snímku, kterou má rozmazat.

Doporučuje: