Ansiktsigenkänning med Python och OpenCV

Dela

Facebook
Twitter
WhatsApp

I denna artikel, kommer vi att få veta vad ansiktsigenkänning är och hur det skiljer sig från ansiktsdetektering. Vi kommer kortfattat att gå igenom teorin om ansiktsigenkänning och sedan hoppa vidare till kodningsavsnittet. I slutet av den här artikeln kommer du att kunna göra ett program för ansiktsigenkänning för att känna igen ansikten i bilder samt på live-kameraflöde.

  1. Vad är ansiktsdetektering?
  2. Vad är ansiktsigenkänning?
  3. Ansiktsigenkänning med hjälp av Python
    1. Att känna igen ansikten i webbkamerafeed
    2. Att känna igen ansikten i bilder

Vad är ansiktsdetektering?

Inom datorsyn är ett väsentligt problem som vi försöker ta reda på att automatiskt upptäcka objekt i en bild utan mänsklig inblandning. Ansiktsdetektering kan ses som ett sådant problem där vi upptäcker mänskliga ansikten i en bild. Det kan finnas små skillnader mellan människornas ansikten, men överlag kan man säga att det finns vissa egenskaper som är förknippade med alla mänskliga ansikten. Det finns olika algoritmer för ansiktsdetektering men Viola-Jones algoritm är en av de äldsta metoderna som också används idag och vi kommer att använda samma senare i artikeln. Du kan gå igenom Viola-Jones-algoritmen efter att ha avslutat den här artikeln eftersom jag kommer att länka den i slutet av den här artikeln.

Face detection är vanligtvis det första steget mot många ansiktsrelaterade tekniker, såsom ansiktsigenkänning eller verifiering. Ansiktsdetektering kan dock ha mycket användbara tillämpningar. Den mest framgångsrika tillämpningen av ansiktsdetektering skulle förmodligen vara fotografering. När du tar ett foto av dina vänner upptäcker algoritmen för ansiktsdetektering som är inbyggd i din digitalkamera var ansiktena finns och justerar fokus därefter.

För en handledning om just ansiktsdetektering, klicka här

Vad är ansiktsigenkänning?

Nu när vi har lyckats göra sådana algoritmer som kan upptäcka ansikten, kan vi också känna igen vems ansikten de är?

Ansiktsigenkänning är en metod för att identifiera eller verifiera identiteten hos en person med hjälp av dennes ansikte. Det finns olika algoritmer som kan göra ansiktsigenkänning men deras noggrannhet kan variera. Här ska jag beskriva hur vi gör ansiktsigenkänning med hjälp av deep learning.

Så låt oss nu förstå hur vi känner igen ansikten med hjälp av deep learning. Vi använder oss av ansiktsinbäddning där varje ansikte omvandlas till en vektor och denna teknik kallas djup metrisk inlärning. Låt mig dela in denna process i tre enkla steg för att underlätta förståelsen:

Face Detection: Den allra första uppgiften vi utför är att upptäcka ansikten i bild- eller videoströmmen. Nu när vi vet den exakta platsen/koordinaterna för ansiktet extraherar vi detta ansikte för vidare bearbetning.

Feature Extraction: Nu när vi har skurit ut ansiktet ur bilden extraherar vi funktioner från den. Här kommer vi att använda ansiktsinbäddningar för att extrahera funktionerna ur ansiktet. Ett neuralt nätverk tar en bild av personens ansikte som indata och matar ut en vektor som representerar de viktigaste funktionerna i ett ansikte. Inom maskininlärning kallas denna vektor för inbäddning och därför kallar vi denna vektor för ansiktsinbäddning. Hur hjälper detta till att känna igen olika personers ansikten?

Under träningen av det neurala nätverket lär sig nätverket att ge ut liknande vektorer för ansikten som ser likadana ut. Om jag till exempel har flera bilder av ansikten inom olika tidsperioder kan vissa av ansiktets egenskaper naturligtvis förändras, men inte i så stor utsträckning. I det här fallet är de vektorer som är kopplade till ansiktena likartade, eller kort sagt, de ligger mycket nära varandra i vektorrummet. Ta en titt på nedanstående diagram för att få en grov uppfattning:

När nätverket har tränats lär sig nätverket att ge ut vektorer som ligger närmare varandra (liknar varandra) för ansikten av samma person (ser likadana ut). Ovanstående vektorer omvandlas nu till:

Vi kommer inte att träna ett sådant nätverk här eftersom det krävs en betydande mängd data och beräkningskraft för att träna sådana nätverk. Vi kommer att använda ett förtränat nätverk som tränats av Davis King på ett dataset med ~3 miljoner bilder. Nätverket ger ut en vektor med 128 siffror som representerar de viktigaste egenskaperna hos ett ansikte.

Nu när vi vet hur detta nätverk fungerar ska vi se hur vi använder detta nätverk på våra egna data. Vi skickar alla bilder i våra data till detta förtränade nätverk för att få fram respektive inbäddningar och sparar dessa inbäddningar i en fil för nästa steg.

Genom att jämföra ansikten: Nu när vi har ansiktsinbäddningar för varje ansikte i våra data sparade i en fil är nästa steg att känna igen en ny t-bild som inte finns i våra data. Det första steget är alltså att beräkna ansiktsinbäddningen för bilden med hjälp av samma nätverk som vi använde ovan och sedan jämföra denna inbäddning med resten av de inbäddningar vi har. Vi känner igen ansiktet om den genererade inbäddningen ligger närmare eller liknar någon annan inbäddning, vilket visas nedan:

Så vi har fått två bilder, en av bilderna föreställer Vladimir Putin och den andra George W. Bush. I vårt exempel ovan sparade vi inte inbäddningarna för Putin men vi sparade inbäddningarna för Bush. När vi alltså jämförde de två nya inbäddningarna med de befintliga är vektorn för Bush närmare de andra ansiktsinbäddningarna av Bush medan Putins ansiktsinbäddningar inte är närmare någon annan inbäddning och därmed kan programmet inte känna igen honom.

Ansiktsigenkänning med hjälp av Python

I det här avsnittet ska vi implementera ansiktsigenkänning med hjälp av OpenCV och Python. Låt oss först se vilka bibliotek vi behöver och hur vi installerar dem:

  • OpenCV
  • dlib
  • Face_recognition

OpenCV är ett bild- och videobibliotek för bild- och videobearbetning och används för bild- och videoanalyser som t.ex. ansiktsdetektering, avläsning av nummerplåtar, fotoredigering, avancerad robotseende, optisk teckenigenkänning och en hel del annat.

Biblioteket dlib, som underhålls av Davis King, innehåller vår implementering av ”deep metric learning” som används för att konstruera våra ansiktsinbäddningar som används för själva igenkänningsprocessen.

Biblioteket face_recognition, som skapats av Adam Geitgey, omsluter dlib:s funktionalitet för ansiktsigenkänning, och det här biblioteket är superenkelt att arbeta med och vi kommer att använda det i vår kod. Kom ihåg att installera biblioteket dlib först innan du installerar face_recognition.

För att installera OpenCV skriver du i kommandotolken

pip install opencv-python

Jag har prövat olika sätt att installera dlib på Windows men det enklaste av dem alla är via Anaconda. Installera först Anaconda (här finns en guide för att installera det) och använd sedan det här kommandot i din kommandoprompt:

conda install -c conda-forge dlib

Nästan för att installera face_recognition, skriv i kommandoprompt

pip install face_recognition

Nu när vi har installerat alla beroenden kan vi börja koda. Vi kommer att behöva skapa tre filer, en kommer att ta vårt dataset och extrahera face embedding för varje ansikte med hjälp av dlib. Därefter kommer vi att spara dessa inbäddningar i en fil.

I nästa fil kommer vi att jämföra ansiktena med den befintliga den känner igen ansikten i bilder och nästa kommer vi att göra samma sak men känna igen ansikten i live webcam feed

Extrahera funktioner från ansiktet

Först måste du få ett dataset eller till och med skapa ett eget. Se bara till att ordna alla bilder i mappar där varje mapp innehåller bilder av bara en person.

Nästan sparar du datasetet i en mapp på samma sätt som du ska göra filen. Här är koden:

Nu när vi har lagrat inbäddningen i en fil som heter ”face_enc” kan vi använda dem för att känna igen ansikten i bilder eller live-videoströmmar.

Ansiktsigenkänning i live webbkameraflöde

Här är skriptet för att känna igen ansikten i ett live webbkameraflöde:

Och även om vi i exemplet ovan har använt hårkaskad för att upptäcka ansikten, kan du också använda face_recognition.face_locations för att upptäcka ett ansikte som vi gjorde i det tidigare skriptet

Face Recognition in Images

Skriptet för att upptäcka och känna igen ansikten i bilder är nästan likadant som det du såg ovan. Prova det själv och om du inte kan ta en titt på koden nedan:

Output:

  • Input
  • Output

Detta för oss till slutet av denna artikel där vi lärt oss om ansiktsigenkänning. Du kan få en gratis kurs på Great learning academy om olika kurser. Klicka på bannern nedan för att veta mer

Du kan också uppgradera din kompetens med Great Learning’s PGP Artificial Intelligence and Machine Learning Course. Kursen erbjuder mentorskap från branschledare och du får också möjlighet att arbeta med branschrelevanta projekt i realtid.

Fortsatt läsning

  1. Face Detection using Viola-Jones Algorithm
  2. Real-time Face detection | Face Mask Detection using OpenCV
  3. Real-time Object Detection Using TensorFlow
  4. YOLO object detection using OpenCV
  5. Object Detection in Pytorch | What is Object Detection?

Lämna ett svar

Din e-postadress kommer inte publiceras.