Rozpoznávání tváří pomocí Pythonu a OpenCV

Sdílet

Facebook
Twitter
WhatsApp

V tomto článku, se dozvíme, co je to rozpoznávání obličeje a jak se liší od detekce obličeje. Stručně projdeme teorii rozpoznávání obličejů a poté přejdeme k části věnované kódování. Na konci tohoto článku budete schopni vytvořit program pro rozpoznávání obličejů na obrázcích i na živém přenosu z webové kamery.

  1. Co je to detekce obličeje
  2. Co je to rozpoznávání obličeje?
  3. Rozpoznávání obličejů pomocí Pythonu
    1. Rozpoznávání obličejů v záznamu z webové kamery
    2. Rozpoznávání obličejů v obrazech

Co je to detekce obličejů?“

V počítačovém vidění je jedním ze základních problémů, který se snažíme vyřešit, automatická detekce objektů v obraze bez zásahu člověka. Za takový problém lze považovat detekci obličejů, kdy v obraze detekujeme lidské tváře. Lidské tváře se mohou mírně lišit, ale celkově lze říci, že existují určité rysy, které jsou spojeny se všemi lidskými tvářemi. Existují různé algoritmy detekce obličejů, ale Viola-Jonesův algoritmus je jednou z nejstarších metod, která se používá i dnes a kterou budeme používat i dále v článku. Viola-Jonesův algoritmus si můžete projít po dokončení tohoto článku, protože na něj dám odkaz na konci tohoto článku.

Detekce obličeje je obvykle prvním krokem k mnoha technologiím souvisejícím s obličejem, jako je rozpoznávání nebo ověřování obličeje. Detekce obličeje však může mít velmi užitečné aplikace. Nejúspěšnější aplikací detekce obličeje bude pravděpodobně fotografování. Když fotografujete své přátele, algoritmus detekce obličeje zabudovaný v digitálním fotoaparátu zjistí, kde se nacházejí obličeje, a podle toho upraví zaostření.

Pro výukový program právě o detekci obličeje klikněte sem

Co je to rozpoznávání obličeje?

Když už se nám podařilo vytvořit takové algoritmy, které dokáží detekovat obličeje, dokážeme také rozpoznat, čí obličeje to jsou?

Rozpoznávání obličejů je metoda identifikace nebo ověření identity jednotlivce pomocí jeho obličeje. Existují různé algoritmy, které dokážou rozpoznávat obličeje, ale jejich přesnost se může lišit. Zde popíšu, jak provádíme rozpoznávání obličejů pomocí hlubokého učení.

Nyní tedy pochopíme, jak rozpoznáváme obličeje pomocí hlubokého učení. Využíváme vkládání obličejů, při kterém je každý obličej převeden na vektor a tato technika se nazývá hluboké metrické učení. Pro snadnější pochopení tento proces dále rozdělím do tří jednoduchých kroků:

Detekce tváří: Úplně prvním úkolem, který provádíme, je detekce tváří v proudu obrazu nebo videa. Nyní, když známe přesnou polohu/koordináty obličeje, extrahujeme tento obličej pro další zpracování dopředu.

Extrakce rysů: Nyní, když jsme z obrazu vyřízli obličej, extrahujeme z něj rysy. Zde k extrakci rysů z obličeje použijeme vložení obličeje. Neuronová síť vezme jako vstup obrázek obličeje osoby a na výstupu vytvoří vektor, který představuje nejdůležitější rysy obličeje. Ve strojovém učení se tento vektor nazývá embedding, a proto tento vektor nazýváme face embedding. Jak to nyní pomáhá při rozpoznávání tváří různých osob?

Při trénování neuronové sítě se síť učí vypisovat podobné vektory pro tváře, které vypadají podobně. Pokud mám například více snímků obličejů v různém časovém rozmezí, mohou se samozřejmě některé rysy obličeje změnit, ale ne do velké míry. V tomto případě jsou tedy vektory spojené s tvářemi podobné, zkrátka jsou si ve vektorovém prostoru velmi blízké. Pro hrubou představu se podívejte na následující diagram:

Nyní se síť po natrénování naučí výstupní vektory, které jsou si navzájem bližší (podobné) pro tváře stejné osoby (vypadají podobně). Výše uvedené vektory se nyní transformují na:

Takovou síť zde nebudeme trénovat, protože trénování takových sítí vyžaduje značné množství dat a výpočetního výkonu. Použijeme předtrénovanou síť vycvičenou Davisem Kingem na datové sadě ~3 miliony obrázků. Výstupem této sítě je vektor 128 čísel, která představují nejdůležitější rysy obličeje.

Teď, když víme, jak tato síť funguje, se podíváme, jak tuto síť použijeme na našich vlastních datech. Všechny obrázky v našich datech předáme této předtrénované síti, abychom získali příslušná osazení, a tato osazení uložíme do souboru pro další krok.

Porovnávání tváří: Nyní, když máme v souboru uloženy embeddingy obličejů pro každý obličej v našich datech, je dalším krokem rozpoznání nového obrázku t, který není v našich datech. Prvním krokem je tedy výpočet embeddingu obličeje pro tento obrázek pomocí stejné sítě, kterou jsme použili výše, a následné porovnání tohoto embeddingu s ostatními embeddingy, které máme k dispozici. Obličej rozpoznáme, pokud je vygenerované embedding bližší nebo podobný některému jinému embedding, jak je uvedeno níže:

Předali jsme tedy dva obrázky, na jednom z nich je Vladimir Putin a na druhém George W. Bush. V našem příkladu výše jsme neuložili vložené obrázky Putina, ale uložili jsme vložené obrázky Bushe. Když jsme tedy porovnali oba nové embeddings se stávajícími, vektor pro Bushe je blíže ostatním embeddingům Bushe, zatímco embeddings Putina nejsou blíže žádnému jinému embeddingu, a proto ho program nemůže rozpoznat.

Rozpoznávání obličeje pomocí Pythonu

V této části budeme implementovat rozpoznávání obličeje pomocí OpenCV a Pythonu. Nejprve si ukážeme, jaké knihovny budeme potřebovat a jak je nainstalovat:

  • OpenCV
  • dlib
  • Face_recognition

OpenCV je knihovna pro zpracování obrazu a videa a používá se k analýze obrazu a videa, například k rozpoznávání obličejů, čtení SPZ, úpravě fotografií, pokročilému robotickému vidění, optickému rozpoznávání znaků a spoustě dalších věcí.

Knihovna dlib, kterou spravuje Davis King, obsahuje naši implementaci „hlubokého metrického učení“, které se používá ke konstrukci našich embeddingů obličeje používaných pro vlastní proces rozpoznávání.

Knihovna face_recognition, kterou vytvořil Adam Geitgey, obklopuje funkci rozpoznávání obličeje dlib a práce s touto knihovnou je velmi snadná a budeme ji používat v našem kódu. Nezapomeňte nejprve nainstalovat knihovnu dlib, než nainstalujete face_recognition.

Pro instalaci OpenCV zadejte do příkazového řádku

pip install opencv-python

Vyzkoušel jsem různé způsoby instalace dlib v systému Windows, ale nejjednodušší ze všech je instalace přes Anacondu. Nejprve nainstalujte Anacondu (zde je návod na její instalaci) a poté v příkazovém řádku použijte tento příkaz:

conda install -c conda-forge dlib

Další příkaz pro instalaci face_recognition zadejte do příkazového řádku

pip install face_recognition

Teď, když máme nainstalované všechny závislosti, začneme kódovat. Budeme muset vytvořit tři soubory, jeden vezme naši datovou sadu a pomocí dlib extrahuje vložení obličeje pro každý obličej. Dále tyto embeddingy uložíme do souboru.

V dalším souboru budeme porovnávat obličeje s existujícími rozpoznávat obličeje v obrázcích a dále budeme dělat totéž, ale rozpoznávat obličeje v živém přenosu z webové kamery

Extrahování rysů z obličeje

Nejprve je třeba získat dataset nebo dokonce vytvořit nějaký vlastní. Jen se ujistěte, že jste všechny snímky uspořádali do složek, přičemž každá složka obsahuje snímky právě jedné osoby.

Poté uložte datovou sadu do stejné složky, z jaké se chystáte vytvořit soubor. Nyní je zde kód:

Teď, když jsme uložili osazení do souboru s názvem „face_enc“, můžeme je použít k rozpoznávání obličejů na obrázcích nebo v živém videopřenosu.

Rozpoznávání obličejů v živém přenosu z webové kamery

Tady je skript pro rozpoznávání obličejů v živém přenosu z webové kamery:

Ačkoli jsme ve výše uvedeném příkladu použili k rozpoznávání obličejů kaskádu haar, můžete použít také funkci face_recognition.face_locations k detekci obličeje, jak jsme to udělali v předchozím skriptu

Rozpoznávání obličejů v obrázcích

Skript pro detekci a rozpoznávání obličejů v obrázcích je téměř podobný tomu, který jste viděli výše. Vyzkoušejte si to sami a pokud vám to nejde, podívejte se na kód níže:

Výstup:

  • Vstup
  • Výstup

Tímto se dostáváme na konec tohoto článku, kde jsme se seznámili s rozpoznáváním obličejů. Bezplatný kurz můžete získat na Great learning academy na různých kurzech. Klikněte na banner níže a dozvíte se více

Můžete si také zvýšit kvalifikaci pomocí kurzu umělé inteligence a strojového učení PGP společnosti Great Learning. Kurz nabízí mentoring od špiček v oboru a budete mít také možnost pracovat na projektech relevantních pro průmysl v reálném čase.

Další čtení

  1. Detekce obličeje pomocí Viola-Jonesova algoritmu
  2. Detekce obličeje v reálném čase | Detekce masky obličeje pomocí OpenCV
  3. Detekce objektu v reálném čase pomocí TensorFlow
  4. Detekce objektu YOLO pomocí OpenCV
  5. Detekce objektu v Pytorchu | Co je detekce objektu?

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.