Har du nogensinde spekuleret på, hvordan Snapchat præcist anvender forskellige filtre på dit ansigt? Udfører din smartphone magi, når den låses op ved hjælp af dine ansigtstræk? Nej, du ser bare Face Detection i aktion.
Face Detection er en kunstig intelligens-teknologi, der kan identificere menneskelige ansigter i et digitalt billede eller video. Opdag, hvordan du kan bygge et ansigtsgenkendelsesprogram i realtid på under 25 linjer kode med den legendariske Haar Cascade-algoritme.
Hvad er Haar Cascade?
Haar Cascade er en objektgenkendelsesalgoritme introduceret af Paul Viola og Michael Jones til at registrere ansigter i billeder eller videoer. En kaskadefunktion trænes ved hjælp af mange positive og negative billeder, som senere kan bruges til at identificere ethvert objekt eller ansigt i andre medier. Disse trænede filer er tilgængelige i OpenCV GitHub-depot.
Ved hjælp af en glidende vinduestilgang gentager et vindue af en fast størrelse et billede fra venstre mod højre, top til bund. Ved hver fase stopper vinduet og klassificerer, om området indeholder et ansigt eller ej.
OpenCV, et computervisionsværktøj, arbejder med en forudtrænet Haar Cascade-model til at klassificere funktionerne. Hver fase kontrollerer fem funktioner: to kanttræk, to linjetræk og en fire-rektangelfunktion.
Ved observation ser øjenområdet mørkere ud end kindområdet, mens næseområdet ser lysere ud end øjenområdet. Du kan visualisere disse funktioner på nedenstående måde.
Ved at bruge disse funktioner og beregningen af pixels identificerer algoritmen mere end 100.000 datapunkter. Du kan derefter bruge en Adaboost-algoritme til at forbedre nøjagtigheden og kassere irrelevante funktioner. Over mange iterationer minimerer denne tilgang fejlfrekvensen og øger funktionsvægten, indtil den opnår en acceptabel nøjagtighed.
Imidlertid stopper skydevindueteknikken, hvis en bestemt testsag mislykkes, og det er beregningsmæssigt dyrt. For at løse dette kan du anvende konceptet med Cascade of Classifiers. I stedet for at anvende alle funktionerne i et enkelt vindue, grupperer og anvender denne tilgang dem i etaper.
Hvis vinduet fejler det første trin, kasserer processen det, ellers fortsætter det. Dette fører til et drastisk fald i antallet af operationer, der skal udføres, og gør det levedygtigt at bruge til realtidsapplikationer.
Arbejdsgang for ansigtsgenkendelse
Følg denne algoritme for at bygge dit ansigtsgenkendelsesprogram:
- Indlæs Haar Cascade Frontal Face Algorithm.
- Initialiser kameraet.
- Læs billeder fra kameraet.
- Konverter farvebilleder til gråtoner.
- Få ansigtskoordinaterne.
- Tegn et rektangel og indsæt det relevante budskab.
- Vis output.
Hvad er OpenCV?
OpenCV er et open source computervision og maskinlæringsbibliotek. Den har over 2.500 optimerede algoritmer til forskellige applikationer. Disse omfatter ansigts-/objektgenkendelse, genkendelse, klassificering og mange flere.
Fortrolighed for dine ansigtsdata er en særskilt bekymring. Hundredvis af fremtrædende virksomheder som Google, IBM og Yahoo bruger OpenCV i deres applikationer. Nogle mennesker, der sigter efter at holde deres data private, har demonstreret der er måder at undgå ansigtsgenkendelse på.
For at installere OpenCV i Python skal du bruge kommandoen:
pip installere opencv-python
Sådan opbygger du et ansigtsgenkendelsesprogram ved hjælp af Python
Følg disse trin for at bygge ansigtsdetektoren:
Denne eksempelkode er sammen med Haar Cascade-algoritmefilen tilgængelig i en GitHub-depot og er gratis for dig at bruge under MIT-licensen.
- Download Haar Cascade Frontal Face Standard XML fil og placer den samme sted som dit Python-program.
- Importer OpenCV-biblioteket.
# importerer de nødvendige biblioteker
importere cv2 - Gem Haar Cascade Frontal Face-algoritmefilen for nem reference.
# indlæser haar-case-algoritmefilen i alg-variablen
alg = "haarcascade_frontalface_default.xml" - Brug CascadeClassifier-klassen til at indlæse en XML-fil i OpenCV.
# overfører algoritmen til OpenCV
haar_cascade = cv2.CascadeClassifier (alg) - Optag videoen fra kameraet. Send 0 til VideoCapture() funktion for at bruge dit primære kamera. Hvis du har tilsluttet et eksternt kamera, kan du bruge successive numre 1, 2 og så videre til at bruge det i stedet.
# optagelse af videofeedet fra kameraet
cam = cv2.VideoCapture (0) - Opsæt en uendelig sløjfe for at læse kameraets input billede for billede. Det Læs() funktion returnerer to parametre. Den første værdi er af typen boolesk, der angiver, om operationen er vellykket eller ej. Den anden parameter indeholder den faktiske ramme, som du skal arbejde med. Opbevar denne ramme i img variabel.
mensRigtigt:
_, img = cam.read() - Indstil standardteksten til at blive vist som Ansigt ikke registreret. Når det registreres, skal du opdatere værdien af denne variabel.
tekst = "Ansigt ikke registreret"
- Det input, der modtages fra den virkelige verden, er farverigt i BGR-formatet. BGR står for blå, grøn og rød. Dette skaber en masse forarbejdning til computervision-applikationer. For at reducere dette skal du bruge et gråtoneformat.
Send rammen og konverteringskodeformatet, COLOR_BGR2GRAY, til cvtColor() for at ændre hvert enkelt billede i videoen fra farve til gråtoner.# konverter hver ramme fra BGR til gråtoner
grayImg = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY) - Brug detectMultiScale() at opdage ansigter. Denne metode tager tre parametre som input. Først er kildebilledet, gråImg. Den anden parameter er scaleFactor. Dette angiver, hvor meget du skal reducere billedstørrelsen ved hver billedskala. Brug standardværdien 1,3 som skaleringsfaktor. Jo højere skaleringsfaktor, jo færre trin, og jo hurtigere udføres. Der er dog også større sandsynlighed for manglende ansigter. Den tredje parameter er minNeighbors. Dette specificerer, hvor mange naboer hvert kandidatrektangel skal have for at beholde det. Jo højere værdi, jo mindre er chancen for en falsk positiv, men det betyder også, at man går glip af uklare ansigtsspor.
# opdag ansigter ved hjælp af Haar Cascade
ansigt = haar_cascade.detectMultiScale (gråImg, 1.3, 4) - Når du registrerer et ansigt, får du fire koordinater. x repræsenterer x-koordinaten, y repræsenterer y-koordinaten, w repræsenterer bredden, og h repræsenterer højden. Opdater teksten til Ansigt registreret og tegn et rektangel ved hjælp af disse koordinater. Farven på rektanglet er grønt (BGR) format med en tykkelse på to pixels.
# tegn et rektangel rundt om ansigtet og opdater teksten til Face Detected
for (x, y, w, h) i ansigtet:
tekst = "Ansigt registreret"
cv2.rektangel(img, (x, y), (x + w, y + h), (0, 255, 0), 2) - Udskriv eventuelt teksten på outputkonsollen. Vis teksten på skærmen ved hjælp af den optagne ramme som kilde, tekst som opnået i ovenstående tekst, skrifttype stil af FONT_HERSHEY_SIMPLEX, skrifttypeskalafaktor på 1, blå farve, to-pixel tykkelse og linjetype AA.
# vis teksten på billedet
Print(tekst)
billede = cv2.putText (img, tekst, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA) - Vis vinduet med titlen Ansigtsgenkendelse og billedet. Brug ventetast() metode til at vise vinduet i 10 millisekunder og kontrollere for et tastetryk. Hvis en bruger trykker på Esc nøgle (ASCII-værdi 27), forlad løkken.
# vis outputvinduet og tryk på escape-tasten for at afslutte
cv2.imshow("Ansigtsgenkendelse", billede)
nøgle = cv2.waitKey (10)hvis nøgle == 27:
pause - Slip endelig kameraobjektet fra python-programmet og luk alle vinduer.
cam.frigøre()
cv2.destroyAllWindows()
Ansigtsgenkendelse ved hjælp af Python i aktion
Når et ansigt er synligt, bør du se output som dette:
Når der ikke er noget ansigt til stede, vil du se en besked som denne:
Begrænsninger af ansigtsdetektion ved hjælp af Haar Cascade Algorithm
Selvom denne algoritme er let, med en lille modelstørrelse og fungerer hurtigt, er der et par begrænsninger:
- I en video i realtid skal ansigtet være i kameraets synslinje. Hvis ansigtet er for langt eller for tæt på eller for vippet, kan algoritmen ikke opfange funktionerne.
- Det er en frontal face-algoritme, så du kan ikke registrere sidevisninger.
- Høje falske positive resultater. Den registrerer ofte områder som ansigter, selvom der ikke er et ansigt til stede.
- Skal have optimale lysforhold. Overdreven eller svag belysning hæmmer algoritmens nøjagtighed.
De mange anvendelser af ansigtsgenkendelse
Ansigtsgenkendelse har en bred vifte af applikationer i dagens verden. Du kan bruge det til ansigtsgenkendelse i smartphones, hjem, køretøjer og immigrationskontrolpunkter. Ansigtsdetektion er allerede almindelig inden for CCTV-overvågning, sociale mediefiltre og automatisk ansigtssporing i film.
Det er kun begyndelsen på denne vidunderlige teknologi. Med fremskridt kan vi muligvis identificere forsvundne børn, fange kriminelle og forhindre forbrydelser såsom identitetstyveri.