Ste se kdaj vprašali, kako Snapchat natančno nanese različne filtre na vaš obraz? Ali vaš pametni telefon izvaja čarovnije, ko se odklene z uporabo vaših obraznih potez? Ne, samo opazujete delovanje zaznavanja obrazov.
Zaznavanje obrazov je tehnologija umetne inteligence, ki lahko prepozna človeške obraze na digitalni sliki ali videu. Odkrijte, kako lahko sestavite program za zaznavanje obrazov v realnem času v manj kot 25 vrsticah kode z legendarnim algoritmom Haar Cascade.
Kaj je Haar Cascade?
Haar Cascade je algoritem za zaznavanje predmetov, ki sta ga predstavila Paul Viola in Michael Jones za zaznavanje obrazov na slikah ali videoposnetkih. Kaskadna funkcija se uri z uporabo številnih pozitivnih in negativnih slik, ki jih je mogoče kasneje uporabiti za prepoznavanje katerega koli predmeta ali obraza v drugih medijih. Te usposobljene datoteke so na voljo v Repozitorij OpenCV GitHub.
S pristopom drsnega okna okno fiksne velikosti ponavlja sliko od leve proti desni, od zgoraj navzdol. V vsaki fazi se okno ustavi in razvrsti, ali območje vsebuje obraz ali ne.
OpenCV, orodje za računalniški vid, deluje z vnaprej usposobljenim modelom Haar Cascade za razvrščanje funkcij. Vsaka faza preveri pet elementov: dve funkciji robov, dve funkciji črte in eno funkcijo štirih pravokotnikov.
Ob opazovanju je predel okoli oči videti temnejši od predela lic, medtem ko je predel nosu videti svetlejši od predela oči. Te funkcije si lahko vizualizirate na spodnji način.
Z uporabo teh funkcij in izračuna slikovnih pik algoritem prepozna več kot 100.000 podatkovnih točk. Nato lahko uporabite algoritem Adaboost, da izboljšate natančnost in zavržete nepomembne funkcije. V mnogih iteracijah ta pristop zmanjša stopnjo napak in poveča težo lastnosti, dokler ne doseže sprejemljive natančnosti.
Vendar pa se tehnika drsnega okna ustavi, če določen testni primer ne uspe in je računsko draga. Da bi to rešili, lahko uporabite koncept kaskade klasifikatorjev. Namesto uporabe vseh funkcij v enem samem oknu, jih ta pristop združuje in uporablja po stopnjah.
Če okno ne uspe na prvi stopnji, ga proces zavrže, sicer se nadaljuje. To povzroči drastično zmanjšanje števila operacij, ki jih je treba izvesti, in omogoča uporabo za aplikacije v realnem času.
Potek dela zaznavanja obrazov
Sledite temu algoritmu, da sestavite program za zaznavanje obrazov:
- Naložite algoritem Haar Cascade Frontal Face.
- Inicializirajte kamero.
- Branje okvirjev iz kamere.
- Pretvorite barvne slike v sivine.
- Pridobite koordinate obraza.
- Narišite pravokotnik in vnesite ustrezno sporočilo.
- Prikaži izhod.
Kaj je OpenCV?
OpenCV je odprtokodna knjižnica računalniškega vida in strojnega učenja. Ima več kot 2500 optimiziranih algoritmov za različne aplikacije. Ti vključujejo zaznavanje obraza/predmeta, prepoznavanje, razvrščanje in še veliko več.
Zasebnost vaših obraznih podatkov je posebna skrb. Na stotine uglednih podjetij, kot so Google, IBM in Yahoo, uporablja OpenCV v svojih aplikacijah. Nekateri ljudje, ki želijo ohraniti zasebnost svojih podatkov, so dokazali obstajajo načini, kako se izogniti prepoznavanju obraza.
Za namestitev OpenCV v Python uporabite ukaz:
pip namestite opencv-python
Kako zgraditi program za zaznavanje obrazov z uporabo Pythona
Za izdelavo detektorja obrazov sledite tem korakom:
Ta primer kode je skupaj z datoteko algoritma Haar Cascade na voljo v a Repozitorij GitHub in je brezplačen za uporabo pod licenco MIT.
- Prenesite Haar Cascade Frontal Face Privzeti XML in jo postavite na isto mesto kot vaš program Python.
- Uvozi knjižnico OpenCV.
# uvoz zahtevanih knjižnic
uvoz cv2 - Shranite datoteko algoritma Haar Cascade Frontal Face za enostavno referenco.
# nalaganje datoteke algoritma primera haar v spremenljivko alg
alg = "haarcascade_frontalface_default.xml" - Za nalaganje datoteke XML v OpenCV uporabite razred CascadeClassifier.
# posredovanje algoritma v OpenCV
haar_cascade = cv2.CascadeClassifier (alg) - Posnemite video iz kamere. Prenesite 0 na VideoCapture() funkcijo za uporabo vaše primarne kamere. Če ste priključili zunanjo kamero, jo lahko uporabite z zaporednimi številkami 1, 2 in tako naprej.
# zajem video vira iz kamere
cam = cv2.VideoCapture (0) - Nastavite neskončno zanko za branje vnosa kamere okvir za okvirjem. The preberi() funkcija vrne dva parametra. Prva vrednost je tipa boolean, ki označuje, ali je operacija uspešna ali ne. Drugi parameter vsebuje dejanski okvir, s katerim boste delali. Ta okvir shranite v img spremenljivka.
medtemPrav:
_, img = cam.read() - Nastavite privzeto besedilo, ki naj bo prikazano kot Obraz ni zaznan. Ko je zaznana, posodobite vrednost te spremenljivke.
besedilo = "Obraz ni zaznan"
- Vnos, prejet iz resničnega sveta, je barvit v formatu BGR. BGR pomeni modro, zeleno in rdečo. To ustvari veliko obdelave za aplikacije računalniškega vida. Če želite to zmanjšati, uporabite sivinski format.
Prenesite okvir in format kode za pretvorbo, COLOR_BGR2SIVA, do cvtColor() da spremenite vsak okvir videa iz barve v sivine.# pretvorite vsak okvir iz BGR v sivine
grayImg = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY) - Uporaba detektMultiScale() za zaznavanje obrazov. Ta metoda kot vhod sprejme tri parametre. Najprej je izvorna slika, siva slika. Drugi parameter je scaleFactor. To določa, koliko morate zmanjšati velikost slike pri posameznem merilu slike. Uporabite privzeto vrednost 1,3 kot faktor skaliranja. Višji kot je faktor lestvice, manj je korakov in hitrejša je izvedba. Vendar obstaja tudi večja verjetnost manjkajočih obrazov. Tretji parameter je minNeighbors. To določa, koliko sosedov mora imeti vsak kandidatni pravokotnik, da ga obdrži. Višja kot je vrednost, manjša je možnost lažno pozitivnega rezultata, pomeni pa tudi izostanek nejasnih sledi obraza.
# zaznavanje obrazov z uporabo Haar Cascade
obraz = haar_cascade.detectMultiScale (grayImg, 1.3, 4) - Ko zaznate obraz, dobite štiri koordinate. x predstavlja koordinato x, y predstavlja koordinato y, w predstavlja širino in h predstavlja višino. Posodobite besedilo na Zaznan obraz in s temi koordinatami narišite pravokotnik. Barva pravokotnika je zelenega (BGR) formata z debelino dveh slikovnih pik.
# narišite pravokotnik okoli obraza in posodobite besedilo na Zaznan obraz
za (x, y, w, h) v obrazu:
besedilo = "Zaznan obraz"
cv2.pravokotnik(img, (x, l), (x + w, l + h), (0, 255, 0), 2) - Po želji natisnite besedilo na izhodno konzolo. Prikažite besedilo na zaslonu z uporabo zajetega okvira kot vira, besedilo, kot je pridobljeno v zgornjem besedilu, pisava slog FONT_HERSHEY_SIMPLEX, faktor lestvice pisave 1, modra barva, debelina dveh slikovnih pik in vrsta črte AA.
# prikaži besedilo na sliki
tiskanje(besedilo)
slika = cv2.putText (img, besedilo, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA) - Prikaži okno z naslovom Zaznavanje obrazov in sliko. Uporabi čakalna tipka() način za prikaz okna za 10 milisekund in preverjanje pritiska tipke. Če uporabnik pritisne Esc tipko (ASCII vrednost 27), zapustite zanko.
# prikažite izhodno okno in pritisnite tipko Escape za izhod
cv2.imshow("Zaznavanje obrazov", slika)
ključ = cv2.waitKey (10)če je ključ == 27:
odmor - Na koncu sprostite objekt kamere iz programa python in zaprite vsa okna.
cam.izpusti()
cv2.destroyAllWindows()
Zaznavanje obrazov z uporabo Pythona v akciji
Ko je obraz viden, bi morali videti rezultat, kot je ta:
Ko obraz ni prisoten, boste videli takšno sporočilo:
Omejitve zaznavanja obrazov z uporabo kaskadnega algoritma Haar
Čeprav je ta algoritem lahek, z majhno velikostjo modela in deluje hitro, obstaja nekaj omejitev:
- Pri videu v realnem času mora biti obraz v vidnem polju kamere. Če je obraz predaleč ali preblizu ali preveč nagnjen, algoritem ne zazna funkcij.
- To je algoritem čelnega obraza, tako da ne morete zaznati stranskih pogledov.
- Visoki lažno pozitivni rezultati. Območja pogosto zazna kot obraze, čeprav obraza ni.
- Treba je zagotoviti optimalne svetlobne pogoje. Premočna ali šibka osvetlitev ovira natančnost algoritma.
Številne aplikacije zaznavanja obrazov
Zaznavanje obrazov ima v današnjem svetu široko paleto aplikacij. Uporabite ga lahko za prepoznavanje obrazov v pametnih telefonih, domovih, vozilih in kontrolnih točkah za priseljevanje. Zaznavanje obrazov je že običajno pri nadzoru CCTV, filtrih družbenih medijev in samodejnem sledenju obrazom v kinematografiji.
To je šele začetek te čudovite tehnologije. Z napredkom bomo morda lahko identificirali pogrešane otroke, ujeli kriminalce in preprečili zločine, kot je kraja identitete.