Premýšľali ste niekedy nad tým, ako Snapchat presne aplikuje rôzne filtre na vašu tvár? Robí váš smartfón kúzla, keď sa odomyká pomocou čŕt vašej tváre? Nie, iba sledujete funkciu Face Detection v akcii.

Face Detection je technológia umelej inteligencie, ktorá dokáže identifikovať ľudské tváre na digitálnom obrázku alebo videu. Zistite, ako môžete pomocou legendárneho algoritmu Haar Cascade vytvoriť program na detekciu tváre v reálnom čase v 25 riadkoch kódu.

Čo je Haarova kaskáda?

Haar Cascade je algoritmus detekcie objektov, ktorý zaviedli Paul Viola a Michael Jones na detekciu tvárí na obrázkoch alebo videách. Kaskádová funkcia je trénovaná pomocou mnohých pozitívnych a negatívnych obrázkov, ktoré možno neskôr použiť na identifikáciu akéhokoľvek objektu alebo tváre v iných médiách. Tieto trénované súbory sú dostupné v OpenCV úložisko GitHub.

Pomocou posuvného okna sa okno s pevnou veľkosťou iteruje cez obrázok zľava doprava, zhora nadol. V každej fáze sa okno zastaví a klasifikuje, či oblasť obsahuje tvár alebo nie.

instagram viewer

OpenCV, nástroj počítačového videnia, pracuje s vopred vyškoleným modelom Haar Cascade na klasifikáciu funkcií. Každá fáza kontroluje päť prvkov: dva prvky okraja, dva prvky čiar a jeden prvok so štyrmi obdĺžnikmi.

Pri pozorovaní sa oblasť očí javí tmavšia ako oblasť líc, zatiaľ čo oblasť nosa vyzerá jasnejšie ako oblasť očí. Tieto funkcie si môžete predstaviť nižšie uvedeným spôsobom.

Pomocou týchto funkcií a výpočtu pixelov algoritmus identifikuje viac ako 100 000 údajových bodov. Potom môžete použiť algoritmus Adaboost na zlepšenie presnosti a vyradenie irelevantných funkcií. V mnohých iteráciách tento prístup minimalizuje chybovosť a zvyšuje váhu prvku, kým nedosiahne prijateľnú presnosť.

Technika posuvného okna sa však zastaví, ak konkrétny testovací prípad zlyhá a je výpočtovo nákladný. Na vyriešenie tohto problému môžete použiť koncept kaskády klasifikátorov. Namiesto použitia všetkých funkcií v jednom okne tento prístup zoskupuje a aplikuje ich postupne.

Ak okno zlyhá v prvej fáze, proces ho zahodí, inak pokračuje. To vedie k drastickému zníženiu počtu operácií, ktoré je potrebné vykonať, a umožňuje to použitie pre aplikácie v reálnom čase.

Pracovný postup detekcie tváre

Pri zostavovaní programu detekcie tváre postupujte podľa tohto algoritmu:

  1. Načítajte algoritmus Haar Cascade Frontal Face.
  2. Inicializujte fotoaparát.
  3. Čítajte snímky z fotoaparátu.
  4. Prevod farebných obrázkov do odtieňov šedej.
  5. Získajte súradnice tváre.
  6. Nakreslite obdĺžnik a vložte príslušnú správu.
  7. Zobrazte výstup.

Čo je OpenCV?

OpenCV je open source knižnica počítačového videnia a strojového učenia. Má viac ako 2 500 optimalizovaných algoritmov pre rôzne aplikácie. Patrí medzi ne detekcia tváre/objektu, rozpoznávanie, klasifikácia a mnohé ďalšie.

Ochrana osobných údajov o vašej tvári je samostatným záujmom. Stovky významných spoločností ako Google, IBM a Yahoo používajú OpenCV vo svojich aplikáciách. Niektorí ľudia, ktorí sa snažia zachovať súkromie svojich údajov, preukázali existujú spôsoby, ako sa vyhnúť rozpoznávaniu tváre.

Ak chcete nainštalovať OpenCV v Pythone, použite príkaz:

pip Inštalácia opencv-python

Ako vytvoriť program na detekciu tváre pomocou Pythonu

Pri zostavovaní detektora tváre postupujte podľa týchto krokov:

Tento vzorový kód spolu so súborom algoritmu Haar Cascade je dostupný v a úložisko GitHub a môžete ho bezplatne používať na základe licencie MIT.

  1. Stiahnite si Haar Cascade Frontal Face Predvolený XML súbor a umiestnite ho na rovnaké miesto ako váš program Python.
  2. Importujte knižnicu OpenCV.
    # importovanie požadovaných knižníc
    importovať cv2
  3. Uložte súbor algoritmu Haar Cascade Frontal Face, aby ste si ho mohli ľahko odkazovať.
    # načítanie súboru algoritmu haar case do premennej alg
    alg = "haarcascade_frontalface_default.xml"
  4. Na načítanie súboru XML do OpenCV použite triedu CascadeClassifier.
    # odovzdanie algoritmu do OpenCV
    haar_cascade = cv2.CascadeClassifier (alg)
  5. Zachyťte video z fotoaparátu. Prejdite 0 na Zachytávanie videa() funkciu na používanie primárneho fotoaparátu. Ak ste pripojili externú kameru, môžete použiť postupné čísla 1, 2 atď.
    # zachytenie videa z fotoaparátu
    cam = cv2.VideoCapture (0)
  6. Nastavte nekonečnú slučku na čítanie vstupu kamery snímku po snímke. The čítať() funkcia vracia dva parametre. Prvá hodnota je typu boolean označujúca, či je operácia úspešná alebo nie. Druhý parameter obsahuje skutočný rámec, s ktorým budete pracovať. Tento rám skladujte v img premenlivý.
    zatiaľ čoPravda:
    _, img = cam.read()
  7. Nastavte predvolený text, ktorý sa zobrazí ako Tvár nebola rozpoznaná. Po zistení aktualizujte hodnotu tejto premennej.
     text = "Tvár nebola rozpoznaná"
  8. Vstupy prijaté zo skutočného sveta sú farebné, vo formáte BGR. BGR znamená modrú, zelenú a červenú. To vytvára množstvo spracovania pre aplikácie počítačového videnia. Ak to chcete znížiť, použite formát v odtieňoch sivej.
    # previesť každý snímok z BGR na odtiene sivej
    šedáImg = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY)
    Odovzdajte formát rámca a konverzného kódu, COLOR_BGR2GRAY, do cvtColor() pre zmenu každej snímky videa z farby na odtiene sivej.
  9. Použite detectMultiScale() na rozpoznanie tvárí. Táto metóda berie ako vstup tri parametre. Prvým je zdrojový obrázok, šedáImg. Druhým parametrom je scaleFactor. Toto určuje, o koľko musíte zmenšiť veľkosť obrázka v každej mierke obrázka. Ako faktor mierky použite predvolenú hodnotu 1,3. Čím vyšší je mierkový faktor, tým menej krokov a tým rýchlejšia realizácia. Existuje však aj väčšia pravdepodobnosť chýbajúcich tvárí. Tretím parametrom je minNeighbors. Toto určuje, koľko susedov by mal mať každý kandidátsky obdĺžnik, aby sa zachoval. Čím vyššia je hodnota, tým menšia je pravdepodobnosť falošne pozitívneho výsledku, ale znamená to aj stratu nejasných stôp na tvári.
    # rozpoznajte tváre pomocou kaskády Haar 
    face = haar_cascade.detectMultiScale (grayImg, 1.3, 4)
  10. Keď rozpoznáte tvár, získate štyri súradnice. x predstavuje súradnicu x, y predstavuje súradnicu y, w predstavuje šírku a h predstavuje výšku. Aktualizujte text na Rozpoznaná tvár a pomocou týchto súradníc nakreslite obdĺžnik. Farba obdĺžnika je zelená (BGR) formát s hrúbkou dva pixely.
    # nakreslite obdĺžnik okolo tváre a aktualizujte text na Face Detected
    pre (x, y, š, h) tvárou v tvár:
    text = "Rozpoznaná tvár"
    cv2.obdĺžnik(img, (X, r), (X + w, r + h), (0, 255, 0), 2)
  11. Voliteľne vytlačte text na výstupnej konzole. Zobrazte text na obrazovke pomocou zachyteného rámčeka ako zdroja, textu získaného vo vyššie uvedenom texte, písma štýl FONT_HERSHEY_SIMPLEX, faktor mierky písma 1, modrá farba, hrúbka dvoch pixlov a typ čiary AA.
    # zobrazenie textu na obrázku
    vytlačiť(text)
    obrázok = cv2.putText (img, text, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA)
  12. Zobrazte okno s názvom Detekcia tváre a obrázok. Použi waitkey() metóda na zobrazenie okna na 10 milisekúnd a kontrola stlačenia klávesu. Ak používateľ stlačí tlačidlo Esc (ASCII hodnota 27), ukončite slučku.
    # zobrazte výstupné okno a stlačením klávesu Escape ho ukončite
    cv2.imshow("Detekcia tváre", obrázok)
    kľúč = cv2.waitKey (10)

    if key == 27:
    prestávka

  13. Nakoniec uvoľnite objekt fotoaparátu z programu python a zatvorte všetky okná.
    vačka.uvoľnenie()
    cv2.destroyAllWindows()

Detekcia tváre pomocou Pythonu v akcii

Keď je tvár zobrazená, mali by ste vidieť výstup takto:

Keď nie je prítomná žiadna tvár, zobrazí sa správa podobná tejto:

Obmedzenia detekcie tváre pomocou kaskádového algoritmu Haar

Aj keď je tento algoritmus ľahký, má malú veľkosť modelu a funguje rýchlo, má niekoľko obmedzení:

  • Vo videu v reálnom čase musí byť tvár v zornom poli kamery. Ak je tvár príliš ďaleko, príliš blízko alebo príliš naklonená, algoritmus nedokáže zachytiť funkcie.
  • Ide o algoritmus prednej strany, takže nemôžete rozpoznať bočné pohľady.
  • Vysoké falošne pozitívne výsledky. Často rozpoznáva oblasti ako tváre, aj keď tam žiadna tvár nie je.
  • Potrebné sú optimálne svetelné podmienky. Nadmerné alebo slabé osvetlenie obmedzuje presnosť algoritmu.

Mnoho aplikácií detekcie tváre

Detekcia tváre má v dnešnom svete širokú škálu aplikácií. Môžete ho použiť na rozpoznávanie tváre v smartfónoch, domácnostiach, vozidlách a imigračných kontrolných bodoch. Detekcia tváre je už bežná pri sledovaní CCTV, filtroch sociálnych médií a automatickom sledovaní tváre v kinematografii.

Je to len začiatok tejto úžasnej technológie. S pokrokom by sme mohli byť schopní identifikovať nezvestné deti, chytiť zločincov a zabrániť zločinom, ako je krádež identity.