Har du noen gang lurt på hvordan Snapchat bruker forskjellige filtre nøyaktig på ansiktet ditt? Utfører smarttelefonen din magi når den låses opp ved hjelp av ansiktstrekkene dine? Nei, du ser bare på ansiktsgjenkjenning i aksjon.

Face Detection er en kunstig intelligens-teknologi som kan identifisere menneskelige ansikter i et digitalt bilde eller video. Oppdag hvordan du kan bygge et ansiktsgjenkjenningsprogram i sanntid på under 25 linjer med kode med den legendariske Haar Cascade-algoritmen.

Hva er Haar Cascade?

Haar Cascade er en objektdeteksjonsalgoritme introdusert av Paul Viola og Michael Jones for å oppdage ansikter i bilder eller videoer. En kaskadefunksjon trenes ved å bruke mange positive og negative bilder som senere kan brukes til å identifisere ethvert objekt eller ansikt i andre medier. Disse trente filene er tilgjengelige i OpenCV GitHub-depot.

Ved å bruke en skyvevindustilnærming, går et vindu med fast størrelse over et bilde fra venstre til høyre, topp til bunn. Ved hver fase stopper vinduet og klassifiserer om området inneholder et ansikt eller ikke.

OpenCV, et datasynsverktøy, jobber med en forhåndstrent Haar Cascade-modell for å klassifisere funksjonene. Hver fase sjekker fem funksjoner: to kantfunksjoner, to linjefunksjoner og en firerektangelfunksjon.

Ved observasjon ser øyeområdet mørkere ut enn kinnområdet, mens neseområdet ser lysere ut enn øyeområdet. Du kan visualisere disse funksjonene på følgende måte.

Ved å bruke disse funksjonene og beregningen av piksler, identifiserer algoritmen mer enn 100 000 datapunkter. Du kan deretter bruke en Adaboost-algoritme for å forbedre nøyaktigheten og forkaste irrelevante funksjoner. Over mange iterasjoner minimerer denne tilnærmingen feilraten og øker funksjonsvekten til den oppnår en akseptabel nøyaktighet.

Imidlertid stopper skyvevindusteknikken hvis en bestemt testsak mislykkes og det er beregningsmessig dyrt. For å løse dette kan du bruke konseptet Cascade of Classifiers. I stedet for å bruke alle funksjonene i ett enkelt vindu, grupperer og bruker denne tilnærmingen dem i etapper.

Hvis vinduet mislykkes det første trinnet, forkaster prosessen det, ellers fortsetter det. Dette fører til en drastisk nedgang i antall operasjoner som skal utføres, og gjør det levedyktig å bruke for sanntidsapplikasjoner.

Arbeidsflyt for ansiktsgjenkjenning

Følg denne algoritmen for å bygge ansiktsgjenkjenningsprogrammet:

  1. Last inn Haar Cascade Frontal Face Algorithm.
  2. Initialiser kameraet.
  3. Les bilder fra kameraet.
  4. Konverter fargebilder til gråtoner.
  5. Få ansiktskoordinatene.
  6. Tegn et rektangel og legg inn riktig melding.
  7. Vis utgangen.

Hva er OpenCV?

OpenCV er et åpen kildekode datasyn og maskinlæringsbibliotek. Den har over 2500 optimaliserte algoritmer for ulike applikasjoner. Disse inkluderer gjenkjenning av ansikt/objekt, gjenkjenning, klassifisering og mange flere.

Personvern for ansiktsdataene dine er en egen bekymring. Hundrevis av fremtredende selskaper som Google, IBM og Yahoo bruker OpenCV i sine applikasjoner. Noen mennesker som har som mål å holde dataene sine private har demonstrert det finnes måter å unngå ansiktsgjenkjenning på.

For å installere OpenCV i Python, bruk kommandoen:

pip installere opencv-python

Hvordan bygge et ansiktsgjenkjenningsprogram ved hjelp av Python

Følg disse trinnene for å bygge ansiktsdetektoren:

Denne eksempelkoden, sammen med Haar Cascade-algoritmefilen, er tilgjengelig i en GitHub-depot og er gratis for deg å bruke under MIT-lisensen.

  1. Last ned Haar Cascade Frontal Face Standard XML fil og plasser den på samme sted som Python-programmet.
  2. Importer OpenCV-biblioteket.
    # importerer de nødvendige bibliotekene
    import cv2
  3. Lagre Haar Cascade Frontal Face-algoritmefilen for enkel referanse.
    # laster haar-casealgoritmefilen inn i alg-variabelen
    alg = "haarcascade_frontalface_default.xml"
  4. Bruk CascadeClassifier-klassen for å laste en XML-fil inn i OpenCV.
    # sender algoritmen til OpenCV
    haar_cascade = cv2.CascadeClassifier (alg)
  5. Ta opp videoen fra kameraet. Gi 0 til Videoopptak() funksjon for å bruke ditt primære kamera. Hvis du har koblet til et eksternt kamera, kan du bruke påfølgende tall 1, 2 og så videre for å bruke det i stedet.
    # ta opp videofeeden fra kameraet
    cam = cv2.VideoCapture (0)
  6. Sett opp en uendelig sløyfe for å lese kameraets inndata bilde for bilde. De lese() funksjonen returnerer to parametere. Den første verdien er av typen boolsk som indikerer om operasjonen er vellykket eller ikke. Den andre parameteren inneholder den faktiske rammen du skal jobbe med. Oppbevar denne rammen i img variabel.
    samtidig somekte:
    _, img = cam.read()
  7. Angi at standardteksten skal vises som Ansikt ikke oppdaget. Når det oppdages, oppdaterer du verdien til denne variabelen.
     tekst = "Ansikt ikke oppdaget"
  8. Innspillene mottatt fra den virkelige verden er fargerike, i BGR-format. BGR står for blått, grønt og rødt. Dette skaper mye prosessering for datasynsapplikasjoner. For å redusere dette, bruk et gråtoneformat.
    # konverter hver ramme fra BGR til gråtoner
    grayImg = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY)
    Send rammen og konverteringskodeformatet, COLOR_BGR2GRAY, til cvtColor() for å endre hvert bilde i videoen fra farge til gråtoner.
  9. Bruk detectMultiScale() for å oppdage ansikter. Denne metoden tar tre parametere som input. Først er kildebildet, gråImg. Den andre parameteren er scaleFactor. Dette spesifiserer hvor mye du må redusere bildestørrelsen ved hver bildeskala. Bruk standardverdien 1.3 som skaleringsfaktor. Jo høyere skaleringsfaktor, jo færre trinn, og jo raskere utføres. Imidlertid er det også større sannsynlighet for manglende ansikter. Den tredje parameteren er minNeighbors. Dette spesifiserer hvor mange naboer hvert kandidatrektangel skal ha for å beholde det. Jo høyere verdi, jo mindre er sjansen for en falsk positiv, men det betyr også at man går glipp av uklare ansiktsspor.
    # oppdage ansikter ved hjelp av Haar Cascade 
    ansikt = haar_cascade.detectMultiScale (gråImg, 1.3, 4)
  10. Når du oppdager et ansikt, får du fire koordinater. x representerer x-koordinaten, y representerer y-koordinaten, w representerer bredden, og h representerer høyden. Oppdater teksten til Ansikt oppdaget og tegn et rektangel ved hjelp av disse koordinatene. Fargen på rektangelet er grønt (BGR) format med en tykkelse på to piksler.
    # tegne et rektangel rundt ansiktet og oppdater teksten til Face Detected
    for (x, y, w, h) i ansiktet:
    tekst = "Ansikt oppdaget"
    cv2.rektangel(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
  11. Skriv eventuelt ut teksten på utdatakonsollen. Vis teksten på skjermen ved å bruke den fangede rammen som kilde, tekst som hentet i teksten ovenfor, font stilen FONT_HERSHEY_SIMPLEX, skriftskalafaktor 1, blå farge, to-pikslers tykkelse og linjetypen AA.
    # vis teksten på bildet
    skrive ut(tekst)
    bilde = cv2.putText (img, tekst, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA)
  12. Vis vinduet med tittelen Ansiktsgjenkjennelse og bildet. Bruke ventetast() metode for å vise vinduet i 10 millisekunder og se etter et tastetrykk. Hvis en bruker trykker på Esc nøkkel (ASCII-verdi 27), gå ut av loopen.
    # vis utdatavinduet og trykk escape-tasten for å avslutte
    cv2.imshow("Ansiktsgjenkjennelse", bilde)
    key = cv2.waitKey (10)

    hvis nøkkel == 27:
    gå i stykker

  13. Til slutt slipper du kameraobjektet fra python-programmet og lukk alle vinduer.
    kam.utgivelse()
    cv2.destroyAllWindows()

Ansiktsgjenkjenning ved hjelp av Python i aksjon

Når et ansikt er synlig, bør du se utdata som dette:

Når det ikke er noe ansikt til stede, vil du se en melding som denne:

Begrensninger for ansiktsdeteksjon ved bruk av Haar Cascade Algorithm

Selv om denne algoritmen er lett, med en liten modellstørrelse og fungerer raskt, er det noen begrensninger:

  • I en sanntidsvideo må ansiktet være i kameraets synslinje. Hvis ansiktet er for langt eller for nært eller for skrått, klarer ikke algoritmen å fange opp funksjonene.
  • Det er en frontal ansiktsalgoritme, så du kan ikke oppdage sidevisninger.
  • Høye falske positive resultater. Den oppdager ofte områder som ansikter selv om det ikke er et ansikt til stede.
  • Trenger å ha optimale lysforhold. Overdreven eller svak belysning hemmer algoritmens nøyaktighet.

De mange bruksområdene for ansiktsgjenkjenning

Ansiktsgjenkjenning har et bredt spekter av bruksområder i dagens verden. Du kan bruke den til ansiktsgjenkjenning i smarttelefoner, hjem, kjøretøy og immigrasjonssjekkpunkter. Ansiktsdeteksjon er allerede vanlig innen CCTV-overvåking, sosiale medier-filtre og automatisk ansiktssporing i kinematografi.

Det er bare begynnelsen på denne fantastiske teknologien. Med fremskritt kan vi kanskje identifisere savnede barn, fange kriminelle og forhindre forbrytelser som identitetstyveri.