Forsøgsgenkendelse med Python og OpenCV

Del

Facebook
Twitter
WhatsApp

I denne artikel, vil vi vide, hvad ansigtsgenkendelse er, og hvordan det adskiller sig fra ansigtsdetektion. Vi vil kort gennemgå teorien om ansigtsgenkendelse og derefter springe videre til kodningsafsnittet. Ved slutningen af denne artikel vil du være i stand til at lave et program til ansigtsgenkendelse til at genkende ansigter i billeder såvel som på live webcam feed.

  1. Hvad er ansigtsgenkendelse?
  2. Hvad er ansigtsgenkendelse?
  3. Ansigtsgenkendelse ved hjælp af Python
    1. Genkendelse af ansigter i webcam feed
    2. Genkendelse af ansigter i billeder

Hvad er ansigtsdetektion?

I computer vision er et væsentligt problem, som vi forsøger at finde ud af, at automatisk detektere objekter i et billede uden menneskelig indgriben. Ansigtsdetektion kan opfattes som et sådant problem, hvor vi registrerer menneskelige ansigter i et billede. Der kan være små forskelle på menneskers ansigter, men overordnet set er det sikkert at sige, at der er visse træk, der er forbundet med alle menneskelige ansigter. Der findes forskellige algoritmer til ansigtsdetektion, men Viola-Jones-algoritmen er en af de ældste metoder, som også bruges i dag, og vi vil bruge den samme senere i artiklen. Du kan gennemgå Viola-Jones-algoritmen efter at have afsluttet denne artikel, da jeg vil linke den i slutningen af denne artikel.

Face detection er normalt det første skridt mod mange ansigtsrelaterede teknologier, såsom ansigtsgenkendelse eller verifikation. Ansigtsdetektion kan dog have meget nyttige anvendelser. Den mest vellykkede anvendelse af ansigtsdetektion vil sandsynligvis være fotografering. Når du tager et billede af dine venner, registrerer den algoritme til ansigtsgenkendelse, der er indbygget i dit digitalkamera, hvor ansigterne er, og justerer fokus i overensstemmelse hermed.

For en vejledning om netop ansigtsgenkendelse kan du klikke her

Hvad er ansigtsgenkendelse?

Nu, hvor det er lykkedes os at lave sådanne algoritmer, der kan registrere ansigter, kan vi så også genkende, hvis ansigter det er?

Face recognition er en metode til at identificere eller verificere en persons identitet ved hjælp af vedkommendes ansigt. Der findes forskellige algoritmer, der kan foretage ansigtsgenkendelse, men deres nøjagtighed kan variere. Her vil jeg beskrive, hvordan vi laver ansigtsgenkendelse ved hjælp af deep learning.

Så lad os nu forstå, hvordan vi genkender ansigter ved hjælp af deep learning. Vi gør brug af ansigtsindlejring, hvor hvert ansigt konverteres til en vektor, og denne teknik kaldes dyb metrisk indlæring. Lad mig yderligere opdele denne proces i tre enkle trin for at lette forståelsen:

Face Detection: Den allerførste opgave, vi udfører, er at detektere ansigter i billed- eller videostrømmen. Nu, hvor vi kender ansigtets nøjagtige placering/koordinater, uddrager vi dette ansigt til videre behandling.

Feature Extraction: Nu, hvor vi har beskåret ansigtet ud af billedet, uddrager vi funktioner fra det. Her skal vi bruge face embeddings til at udtrække funktionerne fra ansigtet. Et neuralt netværk tager et billede af en persons ansigt som input og udsender en vektor, som repræsenterer de vigtigste træk ved et ansigt. Inden for maskinlæring kaldes denne vektor for indlejring, og derfor kalder vi denne vektor for ansigtsindlejring. Hvordan hjælper dette nu med at genkende ansigter af forskellige personer?

Ved træning af det neurale netværk lærer netværket at output lignende vektorer for ansigter, der ligner hinanden. Hvis jeg f.eks. har flere billeder af ansigter inden for forskellige tidsrum, kan nogle af ansigtets træk naturligvis ændre sig, men ikke i så stort omfang. Så i dette tilfælde ligner de vektorer, der er knyttet til ansigterne, hinanden, eller kort sagt, de er meget tæt på hinanden i vektorrummet. Tag et kig på nedenstående diagram for at få en grov idé:

Nu, efter at netværket er blevet trænet, lærer netværket at udstede vektorer, der ligger tættere på hinanden (ligner hinanden) for ansigter af samme person (ligner hinanden). Ovenstående vektorer transformeres nu til:

Vi vil ikke træne et sådant netværk her, da det kræver en betydelig mængde data og beregningskraft at træne sådanne netværk. Vi vil bruge et fortrænet netværk, der er trænet af Davis King på et datasæt på ~3 millioner billeder. Netværket udsender en vektor med 128 tal, som repræsenterer de vigtigste træk ved et ansigt.

Nu da vi ved, hvordan dette netværk fungerer, skal vi se, hvordan vi bruger dette netværk på vores egne data. Vi sender alle billederne i vores data til dette prætrænede netværk for at få de respektive indlejringer og gemmer disse indlejringer i en fil til næste trin.

Sammenligning af ansigter: Nu hvor vi har ansigtsindlejringer for hvert ansigt i vores data gemt i en fil, er næste skridt at genkende et nyt t billede, som ikke findes i vores data. Så det første skridt er at beregne ansigtsindlejringen for billedet ved hjælp af det samme netværk, som vi brugte ovenfor, og derefter sammenligne denne indlejring med resten af de indlejringer, vi har. Vi genkender ansigtet, hvis den genererede indlejring er tættere på eller ligner en anden indlejring som vist nedenfor:

Så vi har videregivet to billeder, hvoraf det ene er et billede af Vladimir Putin og det andet af George W. Bush. I vores eksempel ovenfor gemte vi ikke indlejringerne for Putin, men vi gemte indlejringerne for Bush. Når vi således sammenlignede de to nye indlejringer med de eksisterende, er vektoren for Bush tættere på de andre indlejringer af Bushs ansigt, mens indlejringerne af Putins ansigt ikke er tættere på nogen anden indlejring, og programmet kan derfor ikke genkende ham.

Face Recognition using Python

I dette afsnit skal vi implementere ansigtsgenkendelse ved hjælp af OpenCV og Python. Lad os først se de biblioteker, vi skal bruge, og hvordan vi installerer dem:

  • OpenCV
  • dlib
  • Face_recognition

OpenCV er et billed- og videobehandlingsbibliotek og bruges til billed- og videoanalyse, såsom ansigtsgenkendelse, nummerpladelæsning, fotoredigering, avanceret robotsyn, optisk tegngenkendelse og en hel masse andet.

Dlib-biblioteket dlib, der vedligeholdes af Davis King, indeholder vores implementering af “deep metric learning”, som bruges til at konstruere vores ansigtsindlejringer, der bruges til selve genkendelsesprocessen.

Biblioteket face_recognition, der er oprettet af Adam Geitgey, omslutter dlib’s ansigtsgenkendelsesfunktionalitet, og dette bibliotek er super nemt at arbejde med, og vi vil bruge det i vores kode. Husk at installere dlib-biblioteket først, før du installerer face_recognition.

For at installere OpenCV skal du skrive i kommandoprompten

pip install opencv-python

Jeg har prøvet forskellige måder at installere dlib på i Windows, men den nemmeste af dem alle er via Anaconda. Installer først Anaconda (her er en vejledning til at installere det), og brug derefter denne kommando i din kommandoprompt:

conda install -c conda-forge dlib

Næste for at installere face_recognition, skriv i kommandoprompt

pip install face_recognition

Nu da vi har alle afhængigheder installeret, lad os begynde at kode. Vi bliver nødt til at oprette tre filer, den ene vil tage vores datasæt og udtrække ansigtsindlejring for hvert ansigt ved hjælp af dlib. Dernæst vil vi gemme disse indlejringer i en fil.

I den næste fil vil vi sammenligne ansigterne med den eksisterende den genkender ansigter i billeder og næste vil vi gøre det samme, men genkender ansigter i live webcam feed

Udtrække funktioner fra ansigt

Først skal du få et datasæt eller endda oprette et af dine egne. Bare sørg for at arrangere alle billeder i mapper, hvor hver mappe indeholder billeder af kun én person.

Næst skal du gemme datasættet i en mappe, der er den samme som den, du vil lave filen. Her er nu koden:

Nu da vi har gemt indlejringerne i en fil med navnet “face_enc”, kan vi bruge dem til at genkende ansigter i billeder eller live videostream.

Face Recognition in Live webcam Feed

Her er scriptet til at genkende ansigter i et live webcam feed:

Selv om vi i eksemplet ovenfor har brugt haar cascade til at registrere ansigter, kan du også bruge face_recognition.face_locations til at detektere et ansigt, som vi gjorde i det foregående script

Face Recognition in Images

Scriptet til detektering og genkendelse af ansigter i billeder er næsten magen til det, du så ovenfor. Prøv det selv, og hvis du ikke kan, så tag et kig på koden nedenfor:

Output:

  • Input
  • Output

Dette bringer os til slutningen af denne artikel, hvor vi har lært om ansigtsgenkendelse. Du kan få et gratis kursus på Great learning academy om forskellige kurser. Klik på banneret nedenfor for at få mere at vide

Du kan også opkvalificere dig med Great Learning’s PGP Artificial Intelligence and Machine Learning Course. Kurset tilbyder mentorskab fra brancheledere, og du vil også få mulighed for at arbejde på realtidsprojekter, der er relevante for branchen.

Videre 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?

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.