Har du någonsin undrat hur Snapchat exakt applicerar olika filter på ditt ansikte? Utför din smartphone magi när den låses upp med dina ansiktsdrag? Nej, du tittar bara på Face Detection i aktion.

Face Detection är en artificiell intelligensteknik som kan identifiera mänskliga ansikten i en digital bild eller video. Upptäck hur du kan bygga ett ansiktsavkänningsprogram i realtid på mindre än 25 rader kod med den legendariska Haar Cascade-algoritmen.

Vad är Haar Cascade?

Haar Cascade är en objektdetekteringsalgoritm introducerad av Paul Viola och Michael Jones för att upptäcka ansikten i bilder eller videor. En kaskadfunktion tränas med hjälp av många positiva och negativa bilder som senare kan användas för att identifiera vilket föremål eller ansikte som helst i andra medier. Dessa tränade filer finns tillgängliga i OpenCV GitHub-förråd.

Genom att använda ett skjutfönster, itererar ett fönster med en fast storlek över en bild från vänster till höger, uppifrån och ned. Vid varje fas stannar fönstret och klassificerar om området innehåller ett ansikte eller inte.

OpenCV, ett datorseendeverktyg, arbetar med en förtränad Haar Cascade-modell för att klassificera funktionerna. Varje fas kontrollerar fem funktioner: två kantfunktioner, två linjefunktioner och en fyrrektangelfunktion.

Vid observation ser ögonområdet mörkare ut än kindområdet medan näsområdet ser ljusare ut än ögonområdet. Du kan visualisera dessa funktioner på sättet nedan.

Med hjälp av dessa funktioner och beräkningen av pixlar identifierar algoritmen mer än 100 000 datapunkter. Du kan sedan använda en Adaboost-algoritm för att förbättra noggrannheten och förkasta irrelevanta funktioner. Över många iterationer minimerar detta tillvägagångssätt felfrekvensen och ökar egenskapsvikten tills den uppnår en acceptabel noggrannhet.

Tekniken med skjutfönster upphör dock om ett visst testfall misslyckas och det är beräkningsmässigt dyrt. För att lösa detta kan du tillämpa konceptet med Cascade of Classifiers. Istället för att tillämpa alla funktioner i ett enda fönster, grupperar och tillämpar detta tillvägagångssätt dem i etapper.

Om fönstret misslyckas det första steget, kasserar processen det, annars fortsätter det. Detta leder till en drastisk minskning av antalet operationer att utföra och gör det lönsamt att använda för realtidsapplikationer.

Arbetsflöde för ansiktsdetektion

Följ den här algoritmen för att bygga ditt ansiktsavkänningsprogram:

  1. Ladda Haar Cascade Frontal Face Algorithm.
  2. Initiera kameran.
  3. Läs ramar från kameran.
  4. Konvertera färgbilder till gråskala.
  5. Få ansiktskoordinaterna.
  6. Rita en rektangel och skriv rätt meddelande.
  7. Visa utgången.

Vad är OpenCV?

OpenCV är ett bibliotek med öppen källkod för datorvision och maskininlärning. Den har över 2 500 optimerade algoritmer för olika applikationer. Dessa inkluderar identifiering av ansikte/objekt, igenkänning, klassificering och många fler.

Sekretess för dina ansiktsdata är en separat fråga. Hundratals framstående företag som Google, IBM och Yahoo använder OpenCV i sina applikationer. Vissa personer som strävar efter att hålla sina uppgifter privata har visat det finns sätt att undvika ansiktsigenkänning.

För att installera OpenCV i Python, använd kommandot:

pip Installera opencv-python

Hur man bygger ett ansiktsigenkänningsprogram med Python

Följ dessa steg för att bygga ansiktsdetektorn:

Den här exempelkoden, tillsammans med Haar Cascade-algoritmfilen, är tillgänglig i en GitHub-förråd och är gratis för dig att använda under MIT-licensen.

  1. Ladda ner Haar Cascade Frontal Face Standard XML fil och placera den på samma plats som ditt Python-program.
  2. Importera OpenCV-biblioteket.
    # importerar de nödvändiga biblioteken
    importera cv2
  3. Lagra Haar Cascade Frontal Face-algoritmfilen för enkel referens.
    # laddar haar case-algoritmfilen till variabeln alg
    alg = "haarcascade_frontalface_default.xml"
  4. Använd klassen CascadeClassifier för att ladda en XML-fil i OpenCV.
    # skickar algoritmen till OpenCV
    haar_cascade = cv2.CascadeClassifier (alg)
  5. Fånga videon från kameran. Skicka 0 till Videoinspelning() funktion för att använda din primära kamera. Om du har anslutit en extern kamera kan du använda successiva nummer 1, 2, och så vidare för att använda den istället.
    # fångar videoflödet från kameran
    cam = cv2.VideoCapture (0)
  6. Ställ in en oändlig loop för att läsa kamerans indata bild för bildruta. De läsa() funktion returnerar två parametrar. Det första värdet är av typen boolesk, vilket indikerar om operationen lyckades eller inte. Den andra parametern innehåller den faktiska ramen som du ska arbeta med. Förvara denna ram i img variabel.
    medanSann:
    _, img = cam.read()
  7. Ange att standardtexten ska visas som Ansikte inte upptäckt. Uppdatera värdet för denna variabel när det upptäcks.
     text = "Ansikte inte upptäckt"
  8. Indata från den verkliga världen är färgglada, i BGR-format. BGR står för blått, grönt och rött. Detta skapar mycket bearbetning för datorvisionsapplikationer. För att minska detta, använd ett gråskaleformat.
    # konvertera varje bildruta från BGR till gråskala
    grayImg = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY)
    Skicka ram- och konverteringskodformatet, COLOR_BGR2GRAY, till cvtColor() för att ändra varje bildruta i videon från färg till gråskala.
  9. Använda sig av detectMultiScale() att upptäcka ansikten. Denna metod tar tre parametrar som indata. Först är källbilden, gråImg. Den andra parametern är scaleFactor. Detta anger hur mycket du måste minska bildstorleken vid varje bildskala. Använd standardvärdet 1,3 som skalningsfaktor. Ju högre skalfaktor, desto färre steg och desto snabbare utförs. Men det finns också en större sannolikhet för att sakna ansikten. Den tredje parametern är minNeighbors. Detta anger hur många grannar varje kandidatrektangel ska ha för att behålla den. Ju högre värde, desto mindre är chansen för en falsk positiv, men det innebär också att man missar oklara ansiktsspår.
    # upptäck ansikten med Haar Cascade 
    face = haar_cascade.detectMultiScale (gråImg, 1.3, 4)
  10. När du upptäcker ett ansikte får du fyra koordinater. x representerar x-koordinaten, y representerar y-koordinaten, w representerar bredden och h representerar höjden. Uppdatera texten till Ansikte upptäckt och rita en rektangel med dessa koordinater. Färgen på rektangeln är grönt (BGR) format med en tjocklek på två pixlar.
    # rita en rektangel runt ansiktet och uppdatera texten till Ansiktsupptäckt
    för (x, y, w, h) i ansiktet:
    text = "Ansikte upptäckt"
    cv2.rektangel(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
  11. Skriv eventuellt ut texten på utmatningskonsolen. Visa texten på skärmen med den fångade ramen som källa, text som erhålls i ovanstående text, typsnitt stilen FONT_HERSHEY_SIMPLEX, teckensnittsskalfaktor 1, blå färg, två pixlars tjocklek och linjetyp AA.
    # visa texten på bilden
    skriva ut(text)
    bild = cv2.putText (img, text, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA)
  12. Visa fönstret med titeln Ansiktsigenkänning och bilden. Använd waitkey() metod för att visa fönstret i 10 millisekunder och leta efter en knapptryckning. Om en användare trycker på Esc nyckel (ASCII-värde 27), lämna slingan.
    # visa utdatafönstret och tryck på escape-tangenten för att avsluta
    cv2.imshow("Ansiktsigenkänning", bild)
    nyckel = cv2.waitKey (10)

    om nyckel == 27:
    ha sönder

  13. Släpp slutligen kameraobjektet från pythonprogrammet och stäng alla fönster.
    kam.släpp()
    cv2.destroyAllWindows()

Ansiktsavkänning med Python i aktion

När ett ansikte syns bör du se utdata så här:

När inget ansikte är närvarande ser du ett meddelande så här:

Begränsningar för ansiktsdetektion med Haar Cascade Algorithm

Även om den här algoritmen är lätt, med en liten modellstorlek och fungerar snabbt, finns det några begränsningar:

  • I en realtidsvideo måste ansiktet vara i kamerans synlinje. Om ansiktet är för långt eller för nära eller för lutat lyckas inte algoritmen fånga funktionerna.
  • Det är en frontal face-algoritm, så du kan inte upptäcka sidovyer.
  • Höga falska positiva resultat. Den upptäcker ofta områden som ansikten även om det inte finns något ansikte.
  • Behöver ha optimala ljusförhållanden. Överdriven eller svag belysning hämmar algoritmens noggrannhet.

De många tillämpningarna för ansiktsdetektion

Ansiktsdetektion har ett brett utbud av tillämpningar i dagens värld. Du kan använda den för ansiktsigenkänning i smartphones, hem, fordon och immigrationskontrollpunkter. Ansiktsdetektering är redan vanligt inom CCTV-övervakning, sociala mediafilter och automatisk ansiktsspårning inom film.

Det är bara början på denna underbara teknik. Med framsteg kanske vi kan identifiera försvunna barn, fånga brottslingar och förhindra brott som identitetsstöld.