Jeste li se ikada zapitali kako Snapchat precizno primjenjuje razne filtere na vaše lice? Izvodi li vaš pametni telefon magiju kada se otključava pomoću vaših crta lica? Ne, samo gledate prepoznavanje lica na djelu.
Detekcija lica je tehnologija umjetne inteligencije koja može identificirati ljudska lica na digitalnoj slici ili videu. Otkrijte kako možete izgraditi program za detekciju lica u stvarnom vremenu u manje od 25 redaka koda s legendarnim algoritmom Haar Cascade.
Što je Haarova kaskada?
Haar Cascade je algoritam za otkrivanje objekata koji su predstavili Paul Viola i Michael Jones za otkrivanje lica na slikama ili videozapisima. Funkcija kaskade trenira se korištenjem mnogih pozitivnih i negativnih slika koje se kasnije mogu koristiti za identifikaciju bilo kojeg predmeta ili lica u drugim medijima. Ove obučene datoteke dostupne su u OpenCV GitHub repozitorij.
Koristeći pristup kliznog prozora, prozor fiksne veličine ponavlja sliku slijeva nadesno, odozgo prema dolje. U svakoj fazi, prozor se zaustavlja i klasificira sadrži li područje lice ili ne.
OpenCV, alat za računalni vid, radi s unaprijed obučenim Haar Cascade modelom za klasifikaciju značajki. Svaka faza provjerava pet značajki: dvije značajke ruba, dvije značajke linije i jednu značajku četiri pravokutnika.
Pri promatranju, područje oko očiju izgleda tamnije od područja obraza, dok područje nosa izgleda svjetlije od područja očiju. Ove značajke možete vizualizirati na donji način.
Koristeći ove značajke i izračunavanje piksela, algoritam identificira više od 100.000 podatkovnih točaka. Zatim možete upotrijebiti Adaboost algoritam za poboljšanje točnosti i odbacivanje nevažnih značajki. Tijekom mnogih iteracija, ovaj pristup smanjuje stopu pogreške i povećava težinu značajke dok se ne postigne prihvatljiva točnost.
Međutim, tehnika kliznog prozora prestaje ako određeni testni slučaj ne uspije i računalno je skupa. Da biste to riješili, možete primijeniti koncept kaskade klasifikatora. Umjesto primjene svih značajki u jednom prozoru, ovaj ih pristup grupira i primjenjuje u fazama.
Ako prozor ne uspije u prvoj fazi, proces ga odbacuje, inače se nastavlja. To dovodi do drastičnog smanjenja broja operacija koje treba izvesti i čini ga održivim za korištenje u aplikacijama u stvarnom vremenu.
Tijek rada detekcije lica
Slijedite ovaj algoritam za izradu programa za prepoznavanje lica:
- Učitajte Haar Cascade Frontal Face Algoritam.
- Inicijalizirajte kameru.
- Čitajte kadrove s kamere.
- Pretvorite slike u boji u sive nijanse.
- Dobijte koordinate lica.
- Nacrtajte pravokutnik i stavite odgovarajuću poruku.
- Prikaži izlaz.
Što je OpenCV?
OpenCV je biblioteka računalnog vida i strojnog učenja otvorenog koda. Ima više od 2500 optimiziranih algoritama za različite primjene. To uključuje detekciju lica/predmeta, prepoznavanje, klasifikaciju i još mnogo toga.
Privatnost vaših podataka o licu je posebna briga. Stotine istaknutih tvrtki kao što su Google, IBM i Yahoo koriste OpenCV u svojim aplikacijama. Neki ljudi kojima je cilj zadržati privatnost svojih podataka pokazali su postoje načini da se izbjegne prepoznavanje lica.
Da biste instalirali OpenCV u Python, koristite naredbu:
pip instalirati opencv-python
Kako napraviti program za prepoznavanje lica koristeći Python
Slijedite ove korake za izradu detektora lica:
Ovaj primjer koda, zajedno s datotekom algoritma Haar Cascade, dostupan je u a GitHub spremište i besplatan je za korištenje pod MIT licencom.
- Preuzmite Haar Cascade Frontal Face Zadani XML datoteku i smjestite je na isto mjesto kao i vaš Python program.
- Uvezite biblioteku OpenCV.
# uvoz potrebnih biblioteka
uvoz cv2 - Pohranite datoteku Haar Cascade Frontal Face algoritma za jednostavno referenciranje.
# učitavanje datoteke haar case algoritma u alg varijablu
alg = "haarcascade_frontalface_default.xml" - Koristite klasu CascadeClassifier za učitavanje XML datoteke u OpenCV.
# prosljeđivanje algoritma u OpenCV
haar_cascade = cv2.CascadeClassifier (alg) - Snimite video s kamere. Proslijedite 0 na Video snimanje() funkciju za korištenje vaše primarne kamere. Ako ste priključili vanjsku kameru, možete upotrijebiti uzastopne brojeve 1, 2 i tako dalje da biste je koristili.
# snimanje video zapisa s kamere
cam = cv2.VideoCapture (0) - Postavite beskonačnu petlju za čitanje ulaza kamere sliku po sliku. The čitati() funkcija vraća dva parametra. Prva vrijednost je tipa Boolean koja označava je li operacija uspješna ili ne. Drugi parametar sadrži stvarni okvir s kojim ćete raditi. Pohranite ovaj okvir u img varijabla.
dokPravi:
_, img = cam.read() - Postavite zadani tekst koji će se pojaviti kao Lice nije otkriveno. Kada se otkrije, ažurirajte vrijednost ove varijable.
tekst = "Lice nije otkriveno"
- Ulaz primljen iz stvarnog svijeta je šaren, u BGR formatu. BGR označava plavu, zelenu i crvenu. Ovo stvara mnogo obrade za aplikacije računalnog vida. Da biste to smanjili, koristite format sivih tonova.
Proslijedite okvir i format koda konverzije, BOJA_BGR2SIVA, do cvtColor() za promjenu svakog kadra videozapisa iz boje u sivu.# pretvorite svaki okvir iz BGR u sive nijanse
sivaImg = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY) - Koristiti detektirajMultiScale() za otkrivanje lica. Ova metoda uzima tri parametra kao ulaz. Prvo je izvorna slika, sivaImg. Drugi parametar je scaleFactor. Ovo određuje koliko morate smanjiti veličinu slike u svakom mjerilu slike. Koristite zadanu vrijednost 1,3 kao faktor skaliranja. Što je veći faktor razmjera, to je manje koraka i brže je izvršenje. Međutim, postoji i veća vjerojatnost nestalih lica. Treći parametar je minNeighbors. Ovo specificira koliko susjeda treba imati svaki pravokutnik kandidata da ga zadrži. Što je vrijednost veća, to je manja mogućnost lažno pozitivnog rezultata, ali to također znači i propuštanje nejasnih tragova lica.
# otkrivanje lica pomoću Haar Cascade
lice = haar_cascade.detectMultiScale (grayImg, 1.3, 4) - Kada otkrijete lice, dobit ćete četiri koordinate. x predstavlja x koordinatu, y predstavlja y koordinatu, w predstavlja širinu, a h predstavlja visinu. Ažurirajte tekst na Prepoznato lice i pomoću tih koordinata nacrtajte pravokutnik. Boja pravokutnika je zeleni (BGR) format debljine dva piksela.
# nacrtajte pravokutnik oko lica i ažurirajte tekst na Prepoznato lice
za (x, y, w, h) na licu:
tekst = "Prepoznato lice"
cv2.pravokutnik(img, (x, g), (x + w, g + h), (0, 255, 0), 2) - Po želji ispišite tekst na izlaznoj konzoli. Prikažite tekst na zaslonu koristeći snimljeni okvir kao izvor, tekst dobiven u gornjem tekstu, font stil FONT_HERSHEY_SIMPLEX, faktor skale fonta 1, plava boja, debljina dva piksela i vrsta linije AA.
# prikazati tekst na slici
ispisati(tekst)
slika = cv2.putText (img, tekst, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA) - Prikažite prozor s naslovom Prepoznavanje lica i slika. Koristiti tipka čekanja() metoda za prikaz prozora na 10 milisekundi i provjeru pritiska tipke. Ako korisnik pritisne Esc tipku (ASCII vrijednost 27), izađite iz petlje.
# prikažite izlazni prozor i pritisnite tipku za izlaz za izlaz
cv2.imshow("Prepoznavanje lica", slika)
ključ = cv2.waitKey (10)ako je ključ == 27:
pauza - Na kraju, otpustite objekt kamere iz programa python i zatvorite sve prozore.
kamera.osloboditi()
cv2.uništiSveWindowse()
Detekcija lica pomoću Pythona na djelu
Kada se vidi lice, trebali biste vidjeti ovakav rezultat:
Kada nema lica, vidjet ćete poruku poput ove:
Ograničenja detekcije lica korištenjem Haar Cascade algoritma
Iako je ovaj algoritam lagan, s malom veličinom modela i radi brzo, postoji nekoliko ograničenja:
- U videu u stvarnom vremenu, lice mora biti u vidnom polju kamere. Ako je lice predaleko, preblizu ili previše nagnuto, algoritam ne uspijeva uhvatiti značajke.
- To je algoritam frontalnog lica, tako da ne možete otkriti bočne poglede.
- Visoki lažno pozitivni rezultati. Često detektira područja kao lica iako lice nije prisutno.
- Potrebno je osigurati optimalne uvjete osvjetljenja. Pretjerano ili slabo osvjetljenje otežava točnost algoritma.
Brojne primjene detekcije lica
Prepoznavanje lica ima širok raspon primjena u današnjem svijetu. Možete ga koristiti za prepoznavanje lica na pametnim telefonima, domovima, vozilima i imigracijskim kontrolnim točkama. Detekcija lica već je uobičajena u CCTV nadzoru, filtrima društvenih medija i automatskom praćenju lica u kinematografiji.
To je samo početak ove prekrasne tehnologije. Uz napredak, mogli bismo identificirati nestalu djecu, uhvatiti kriminalce i spriječiti zločine poput krađe identiteta.