Te-ai întrebat vreodată cum Snapchat aplică cu acuratețe diferite filtre pe fața ta? Smartphone-ul tău face magie atunci când se deblochează folosind trăsăturile feței? Nu, doar urmăriți Detectarea feței în acțiune.
Face Detection este o tehnologie de inteligență artificială care poate identifica fețele umane într-o imagine digitală sau video. Descoperiți cum puteți crea un program de detectare a feței în timp real în mai puțin de 25 de linii de cod cu algoritmul legendar Haar Cascade.
Ce este cascada Haar?
Haar Cascade este un algoritm de detectare a obiectelor introdus de Paul Viola și Michael Jones pentru a detecta fețele în imagini sau videoclipuri. O funcție în cascadă este antrenată folosind multe imagini pozitive și negative care pot fi utilizate ulterior pentru a identifica orice obiect sau față în alte medii. Aceste fișiere instruite sunt disponibile în Depozitul OpenCV GitHub.
Folosind o abordare cu fereastră glisantă, o fereastră de dimensiune fixă iterează peste o imagine de la stânga la dreapta, de sus în jos. La fiecare fază, fereastra se oprește și clasifică dacă zona conține sau nu o față.
OpenCV, un instrument de viziune computerizată, funcționează cu un model Haar Cascade pre-antrenat pentru a clasifica caracteristicile. Fiecare fază verifică cinci caracteristici: două caracteristici de margine, două caracteristici de linie și o caracteristică de patru dreptunghi.
La observație, zona ochilor pare mai întunecată decât zona obrajilor, în timp ce zona nasului pare mai luminoasă decât zona ochilor. Puteți vizualiza aceste caracteristici în modul de mai jos.
Folosind aceste caracteristici și calculul pixelilor, algoritmul identifică mai mult de 100.000 de puncte de date. Puteți utiliza apoi un algoritm Adaboost pentru a îmbunătăți acuratețea și a elimina funcțiile irelevante. Pe parcursul multor iterații, această abordare minimizează rata de eroare și crește greutatea caracteristicii până când atinge o precizie acceptabilă.
Cu toate acestea, tehnica ferestrei glisante se oprește dacă un anumit caz de testare eșuează și este costisitoare din punct de vedere computațional. Pentru a rezolva acest lucru, puteți aplica conceptul Cascadei de clasificatori. În loc să aplice toate caracteristicile într-o singură fereastră, această abordare le grupează și le aplică în etape.
Dacă fereastra eșuează în prima etapă, procesul o renunță, în caz contrar, continuă. Acest lucru duce la o scădere drastică a numărului de operațiuni de efectuat și îl face viabil de utilizat pentru aplicații în timp real.
Fluxul de lucru al detectării feței
Urmați acest algoritm pentru a vă construi programul de detectare a feței:
- Încărcați algoritmul Haar Cascade Frontal Face.
- Inițializați camera.
- Citiți cadre de pe cameră.
- Convertiți imaginile color în tonuri de gri.
- Obțineți coordonatele feței.
- Desenați un dreptunghi și puneți mesajul potrivit.
- Afișează rezultatul.
Ce este OpenCV?
OpenCV este o bibliotecă open source de viziune computerizată și învățare automată. Are peste 2.500 de algoritmi optimizați pentru diverse aplicații. Acestea includ detectarea feței/obiectelor, recunoașterea, clasificarea și multe altele.
Confidențialitatea datelor tale faciale este o preocupare separată. Sute de companii proeminente precum Google, IBM și Yahoo folosesc OpenCV în aplicațiile lor. Unii oameni care urmăresc să-și păstreze datele private au demonstrat există modalități de a evita recunoașterea facială.
Pentru a instala OpenCV în Python, utilizați comanda:
pip instalare opencv-python
Cum să construiți un program de detectare a feței folosind Python
Urmați acești pași pentru a construi detectorul de față:
Acest exemplu de cod, împreună cu fișierul algoritm Haar Cascade, este disponibil în format a Depozitul GitHub și este gratuit pentru utilizare sub licența MIT.
- Descărcați Haar Cascade Frontal Face XML implicit fișier și plasați-l în aceeași locație cu programul dvs. Python.
- Importați biblioteca OpenCV.
# importul bibliotecilor necesare
import cv2 - Stocați fișierul algoritm Haar Cascade Frontal Face pentru o referire ușoară.
# încărcarea fișierului algoritm de caz haar în variabila alg
alg = "haarcascade_frontalface_default.xml" - Utilizați clasa CascadeClassifier pentru a încărca un fișier XML în OpenCV.
# trecerea algoritmului către OpenCV
haar_cascade = cv2.CascadeClassifier (alg) - Capturați videoclipul de la cameră. Treceți 0 la Captură video() funcția pentru a utiliza camera principală. Dacă ați atașat o cameră externă, puteți utiliza numerele succesive 1, 2 și așa mai departe pentru a o folosi în schimb.
# captarea fluxului video de la cameră
cam = cv2.VideoCapture (0) - Configurați o buclă infinită pentru a citi intrarea camerei cadru cu cadru. The citit() funcția returnează doi parametri. Prima valoare este de tip boolean care indică dacă operația a avut succes sau nu. Al doilea parametru conține cadrul real cu care veți lucra. Păstrați acest cadru în img variabil.
in timp ceAdevărat:
_, img = cam.read() - Setați textul implicit să apară ca Fața nu a fost detectată. Când este detectat, actualizați valoarea acestei variabile.
text = "Fața nu a fost detectată"
- Intrarea primită din lumea reală este colorată, în format BGR. BGR înseamnă albastru, verde și roșu. Acest lucru creează o mulțime de procesare pentru aplicațiile de viziune computerizată. Pentru a reduce acest lucru, utilizați un format în tonuri de gri.
Treceți formatul de cadru și cod de conversie, CULOARE_BGR2GRAY, la cvtColor() pentru a schimba fiecare cadru al videoclipului de la culoare la tonuri de gri.# convertiți fiecare cadru din BGR în tonuri de gri
grayImg = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY) - Utilizare detectMultiScale() pentru a detecta fețele. Această metodă ia trei parametri ca intrare. Mai întâi este imaginea sursă, griImg. Al doilea parametru este scaleFactor. Aceasta specifică cât de mult trebuie să reduceți dimensiunea imaginii la fiecare scară de imagine. Utilizați valoarea implicită 1,3 ca factor de scalare. Cu cât factorul de scară este mai mare, cu atât mai puțini pași și execuția este mai rapidă. Cu toate acestea, există și o probabilitate mai mare de a lipsi fețele. Al treilea parametru este minNeighbors. Aceasta specifică câți vecini ar trebui să aibă fiecare dreptunghi candidat pentru a-l păstra. Cu cât valoarea este mai mare, cu atât este mai mică șansa unui fals pozitiv, dar înseamnă și să pierdeți urmele neclare ale feței.
# detectează fețele folosind Haar Cascade
fata = haar_cascade.detectMultiScale (grayImg, 1.3, 4) - Când detectezi o față, obții patru coordonate. x reprezintă coordonata x, y reprezintă coordonata y, w reprezintă lățimea și h reprezintă înălțimea. Actualizați textul la Fața detectată și desenați un dreptunghi folosind aceste coordonate. Culoarea dreptunghiului este formatul verde (BGR) cu o grosime de doi pixeli.
# desenați un dreptunghi în jurul feței și actualizați textul la Face Detected
pentru (x, y, w, h) în față:
text = "Fața detectată"
cv2.dreptunghi(img, (X, y), (X + w, y + h), (0, 255, 0), 2) - Opțional, imprimați textul pe consola de ieșire. Afișați textul pe ecran folosind cadrul capturat ca sursă, textul obținut în textul de mai sus, font stil FONT_HERSHEY_SIMPLEX, factor de scară a fontului de 1, culoare albastră, grosime de doi pixeli și tip de linie AA.
# afișează textul de pe imagine
imprimare(text)
imagine = cv2.putText (img, text, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA) - Afișează fereastra cu titlul Detectare facială si imaginea. Folosește tasta așteptare() metodă pentru a afișa fereastra timp de 10 milisecunde și pentru a verifica dacă apăsați o tastă. Dacă un utilizator apasă tasta Esc (valoarea ASCII 27), ieșiți din buclă.
# afișați fereastra de ieșire și apăsați tasta Escape pentru a ieși
cv2.imshow("Detectare facială", imagine)
cheie = cv2.waitKey (10)dacă tasta == 27:
pauză - În cele din urmă, eliberați obiectul camerei din programul python și închideți toate ferestrele.
cam.eliberare()
cv2.destroyAllWindows()
Detectarea feței folosind Python în acțiune
Când o față este în vedere, ar trebui să vedeți rezultatul astfel:
Când nu este prezentă nicio față, veți vedea un mesaj ca acesta:
Limitări ale detectării feței folosind algoritmul Haar Cascade
Deși acest algoritm este ușor, cu o dimensiune mică a modelului și funcționează rapid, există câteva limitări:
- Într-un videoclip în timp real, fața trebuie să fie în raza vizuală a camerei. Dacă fața este prea departe sau prea aproape sau prea înclinată, algoritmul nu reușește să preia caracteristicile.
- Este un algoritm de față frontală, deci nu puteți detecta vederile laterale.
- Rezultate fals pozitive ridicate. Adesea detectează zone ca fețe, chiar dacă nu este prezentă o față.
- Trebuie să aibă condiții optime de iluminare. Iluminarea excesivă sau slabă împiedică precizia algoritmului.
Multe aplicații ale detectării feței
Detectarea feței are o gamă largă de aplicații în lumea de astăzi. Îl puteți folosi pentru recunoașterea feței în smartphone-uri, case, vehicule și puncte de control pentru imigrare. Detectarea facială este deja comună în supravegherea CCTV, filtrele rețelelor sociale și urmărirea automată a feței în cinematografie.
Este doar începutul acestei tehnologii minunate. Cu progrese, am putea să identificăm copiii dispăruți, să prindem criminali și să prevenim infracțiuni precum furtul de identitate.