Recunoașterea fețelor cu Python și OpenCV

Share
Share

Facebook
Twitter
WhatsApp

În acest articol, vom ști ce este recunoașterea feței și care este diferența față de detectarea feței. Vom trece pe scurt peste teoria recunoașterii fețelor și apoi vom trece la secțiunea de codare. La sfârșitul acestui articol, veți fi capabili să realizați un program de recunoaștere a fețelor pentru recunoașterea fețelor în imagini, precum și pe feed-ul live al camerei web.

  1. Ce este detectarea fețelor?
  2. Ce este recunoașterea fețelor?
  3. Recunoașterea fețelor folosind Python
    1. Recunoașterea fețelor în feed-ul webcam
    2. Recunoașterea fețelor în imagini

Ce este detectarea fețelor?

În viziunea computerizată, o problemă esențială pe care încercăm să o rezolvăm este aceea de a detecta automat obiectele dintr-o imagine fără intervenția umană. Detectarea fețelor poate fi gândită ca o astfel de problemă în care detectăm fețele umane într-o imagine. Pot exista mici diferențe între fețele oamenilor, dar, în general, se poate spune cu siguranță că există anumite caracteristici care sunt asociate cu toate fețele umane. Există diverși algoritmi de detectare a fețelor, dar Algoritmul Viola-Jones este una dintre cele mai vechi metode care este folosită și astăzi și pe care o vom folosi mai târziu în articol. Puteți parcurge Algoritmul Viola-Jones după ce terminați acest articol, deoarece voi face un link către acesta la sfârșitul articolului.

Detecția fețelor este, de obicei, primul pas către multe tehnologii legate de fețe, cum ar fi recunoașterea sau verificarea fețelor. Cu toate acestea, detectarea feței poate avea aplicații foarte utile. Cea mai reușită aplicație a detectării feței ar fi, probabil, realizarea de fotografii. Atunci când faceți o fotografie cu prietenii dvs., algoritmul de detectare a fețelor integrat în aparatul foto digital detectează unde sunt fețele și ajustează focalizarea în consecință.

Pentru un tutorial doar despre detectarea fețelor, faceți clic aici

Ce este recunoașterea fețelor?

Acum că am reușit să realizăm astfel de algoritmi care pot detecta fețele, putem recunoaște, de asemenea, ale cui sunt aceste fețe?

Recunoașterea fețelor este o metodă de identificare sau de verificare a identității unui individ folosind fața acestuia. Există diverși algoritmi care pot face recunoașterea fețelor, dar acuratețea lor poate varia. Aici am de gând să descriu cum facem recunoașterea fețelor folosind învățarea profundă.

Acum să înțelegem cum recunoaștem fețele folosind învățarea profundă. Ne folosim de încorporarea feței în care fiecare față este convertită într-un vector și această tehnică se numește învățare metrică profundă. Permiteți-mi să împart în continuare acest proces în trei pași simpli pentru o înțelegere ușoară:

Face Detection: Prima sarcină pe care o realizăm este detectarea fețelor în fluxul de imagini sau video. Acum că știm locația/coordonatele exacte ale feței, extragem această față pentru a o prelucra mai departe.

Feature Extraction: Acum că am decupat fața din imagine, extragem caracteristicile din ea. Aici vom folosi încorporări de fețe pentru a extrage caracteristicile din față. O rețea neuronală ia ca intrare o imagine a feței unei persoane și produce un vector care reprezintă cele mai importante caracteristici ale unei fețe. În învățarea automată, acest vector se numește „embedding” și, prin urmare, îl numim „embedding de față”. Acum, cum ajută acest lucru la recunoașterea fețelor diferitelor persoane?

În timpul antrenării rețelei neuronale, rețeaua învață să producă vectori similari pentru fețele care arată similar. De exemplu, dacă am mai multe imagini ale fețelor în diferite intervale de timp, bineînțeles că unele caracteristici ale feței mele s-ar putea schimba, dar nu într-o măsură prea mare. Deci, în acest caz, vectorii asociați cu fețele sunt similari sau, pe scurt, sunt foarte apropiați în spațiul vectorial. Aruncați o privire la diagrama de mai jos pentru a vă face o idee aproximativă:

Acum, după antrenarea rețelei, rețeaua învață să producă vectori de ieșire care sunt mai apropiați unul de celălalt (similari) pentru fețele aceleiași persoane (care arată similar). Vectorii de mai sus se transformă acum în:

Nu vom antrena o astfel de rețea aici, deoarece antrenarea unor astfel de rețele necesită o cantitate semnificativă de date și putere de calcul. Vom folosi o rețea pre-antrenată, antrenată de Davis King pe un set de date de ~3 milioane de imagini. Rețeaua produce un vector de 128 de numere care reprezintă cele mai importante caracteristici ale unei fețe.

Acum că știm cum funcționează această rețea, să vedem cum o folosim pe propriile noastre date. Trecem toate imaginile din datele noastre către această rețea pre-antrenată pentru a obține incluziunile respective și salvăm aceste incluziuni într-un fișier pentru următorul pas.

Compararea fețelor: Acum că avem încorporările fețelor pentru fiecare față din datele noastre salvate într-un fișier, următorul pas este recunoașterea unei noi imagini t care nu se află în datele noastre. Deci, primul pas este să calculăm încorporarea feței pentru imagine folosind aceeași rețea pe care am folosit-o mai sus și apoi să comparăm această încorporare cu restul încorporărilor pe care le avem. Recunoaștem fața dacă încadrarea generată este mai apropiată sau similară cu orice altă încadrarea, după cum se arată mai jos:

Am trecut două imagini, una dintre imagini este a lui Vladimir Putin și cealaltă a lui George W. Bush. În exemplul nostru de mai sus, nu am salvat încorporările pentru Putin, dar am salvat încorporările lui Bush. Astfel, atunci când am comparat cele două încorporări noi cu cele existente, vectorul pentru Bush este mai apropiat de celelalte încorporări ale feței lui Bush, în timp ce încorporările feței lui Putin nu sunt mai apropiate de nicio altă încorporare și, prin urmare, programul nu îl poate recunoaște.

Recunoașterea feței folosind Python

În această secțiune, vom implementa recunoașterea feței folosind OpenCV și Python. În primul rând, să vedem bibliotecile de care vom avea nevoie și cum să le instalăm:

  • OpenCV
  • dlib
  • Face_recognition

OpenCV este o bibliotecă de procesare a imaginilor și video și este folosită pentru analiza imaginilor și video, cum ar fi detectarea facială, citirea plăcuțelor de înmatriculare, editarea fotografiilor, viziune robotică avansată, recunoașterea optică a caracterelor și multe altele.

Biblioteca dlib, întreținută de Davis King, conține implementarea noastră de „învățare metrică profundă”, care este utilizată pentru a construi încorporările noastre de fețe utilizate pentru procesul de recunoaștere propriu-zis.

Biblioteca face_recognition, creată de Adam Geitgey, înfășoară funcționalitatea de recunoaștere facială a dlib, iar această bibliotecă este foarte ușor de utilizat și o vom folosi în codul nostru. Nu uitați să instalați mai întâi biblioteca dlib înainte de a instala face_recognition.

Pentru a instala OpenCV, tastați în promptul de comandă

pip install opencv-python

Am încercat diverse moduri de a instala dlib pe Windows, dar cel mai simplu dintre toate este prin Anaconda. În primul rând, instalați Anaconda (aici este un ghid de instalare) și apoi folosiți această comandă în command prompt:

conda install -c conda-forge dlib

În continuare, pentru a instala face_recognition, tastați în command prompt

pip install face_recognition

Acum că avem toate dependențele instalate, să începem să codăm. Va trebui să creăm trei fișiere, unul va lua setul nostru de date și va extrage încorporarea feței pentru fiecare față folosind dlib. Apoi, vom salva aceste încorporări într-un fișier.

În următorul fișier vom compara fețele cu cele existente pentru a recunoaște fețele în imagini, iar în următorul vom face același lucru, dar vom recunoaște fețele în feed-ul live al camerei web

Extragerea caracteristicilor din față

În primul rând, trebuie să obțineți un set de date sau chiar să vă creați unul propriu. Doar asigurați-vă că aranjați toate imaginile în dosare, fiecare dosar conținând imagini ale unei singure persoane.

În continuare, salvați setul de date într-un dosar la fel ca cel în care veți face fișierul. Acum, iată codul:

Acum că am stocat încorporările într-un fișier numit „face_enc”, le putem folosi pentru a recunoaște fețele în imagini sau în fluxul video live.

Recunoașterea fețelor într-un flux de webcam live

Iată scriptul pentru a recunoaște fețele într-un flux de webcam live:

Deși în exemplul de mai sus am folosit cascada haar pentru a detecta fețele, puteți folosi, de asemenea, face_recognition.face_locations pentru a detecta o față, așa cum am făcut în scriptul anterior

Recunoașterea fețelor în imagini

Scriptul pentru detectarea și recunoașterea fețelor în imagini este aproape similar cu cel pe care l-ați văzut mai sus. Încercați-l singur și dacă nu puteți aruncați o privire la codul de mai jos:

Output:

  • Input
  • Output

Aceasta ne aduce la sfârșitul acestui articol în care am învățat despre recunoașterea fețelor. Puteți obține un curs gratuit pe Great learning academy pe diverse cursuri. Faceți clic pe bannerul de mai jos pentru a afla mai multe

Puteți, de asemenea, să vă perfecționați cu cursul PGP Artificial Intelligence and Machine Learning de la Great Learning. Cursul oferă mentorat din partea liderilor din industrie și veți avea, de asemenea, posibilitatea de a lucra în timp real la proiecte relevante pentru industrie.

Lecturi suplimentare

  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?

Lasă un răspuns

Adresa ta de email nu va fi publicată.