Heb je je ooit afgevraagd hoe Snapchat verschillende filters nauwkeurig op je gezicht toepast? Voert uw smartphone magie uit wanneer deze wordt ontgrendeld met uw gelaatstrekken? Nee, je kijkt gewoon naar Face Detection in actie.

Gezichtsdetectie is een kunstmatige-intelligentietechnologie die menselijke gezichten in een digitale afbeelding of video kan identificeren. Ontdek hoe je met het legendarische Haar Cascade-algoritme een real-time programma voor gezichtsdetectie kunt bouwen in minder dan 25 regels code.

Wat is de haarcascade?

Haar Cascade is een algoritme voor objectdetectie dat is geïntroduceerd door Paul Viola en Michael Jones om gezichten in afbeeldingen of video's te detecteren. Een cascadefunctie wordt getraind met behulp van veel positieve en negatieve afbeeldingen die later kunnen worden gebruikt om elk object of gezicht in andere media te identificeren. Deze getrainde bestanden zijn beschikbaar in de OpenCV GitHub-repository.

Met behulp van een glijdende vensterbenadering itereert een venster van een vaste grootte over een afbeelding van links naar rechts, van boven naar beneden. Bij elke fase stopt het venster en wordt geclassificeerd of het gebied een gezicht bevat of niet.

instagram viewer

OpenCV, een computervisietool, werkt met een vooraf getraind Haar Cascade-model om de functies te classificeren. Elke fase controleert vijf kenmerken: twee randkenmerken, twee lijnkenmerken en één kenmerk met vier rechthoeken.

Bij observatie lijkt het ooggebied donkerder dan het wanggebied, terwijl het neusgebied helderder lijkt dan het ooggebied. U kunt deze functies op de onderstaande manier visualiseren.

Met behulp van deze functies en de berekening van pixels identificeert het algoritme meer dan 100.000 datapunten. U kunt dan een Adaboost-algoritme gebruiken om de nauwkeurigheid te verbeteren en irrelevante functies te verwijderen. Over vele iteraties minimaliseert deze aanpak het foutenpercentage en verhoogt het kenmerkgewicht totdat het een acceptabele nauwkeurigheid bereikt.

De techniek van het glijdende venster stopt echter als een bepaalde testcase mislukt en het is rekenkundig duur. Om dit op te lossen kun je het concept van de Cascade of Classifiers toepassen. In plaats van alle functies in één enkel venster toe te passen, groepeert en past deze aanpak ze in fasen toe.

Als het venster de eerste fase niet doorstaat, wordt het door het proces genegeerd, anders gaat het verder. Dit leidt tot een drastische afname van het aantal uit te voeren bewerkingen en maakt het levensvatbaar om te gebruiken voor real-time toepassingen.

Workflow van gezichtsdetectie

Volg dit algoritme om uw gezichtsdetectieprogramma te bouwen:

  1. Laad het Haar Cascade Frontal Face-algoritme.
  2. Initialiseer de camera.
  3. Lees frames van de camera.
  4. Zet kleurenafbeeldingen om in grijstinten.
  5. Verkrijg de gezichtscoördinaten.
  6. Teken een rechthoek en plaats het juiste bericht.
  7. Geef de uitvoer weer.

Wat is OpenCV?

OpenCV is een open-source bibliotheek voor computervisie en machine learning. Het heeft meer dan 2.500 geoptimaliseerde algoritmen voor verschillende toepassingen. Deze omvatten gezichts-/objectdetectie, herkenning, classificatie en nog veel meer.

Privacy van uw gezichtsgegevens is een aparte zorg. Honderden vooraanstaande bedrijven zoals Google, IBM en Yahoo gebruiken OpenCV in hun applicaties. Sommige mensen die ernaar streven hun gegevens privé te houden, hebben dit aangetoond er zijn manieren om gezichtsherkenning te voorkomen.

Gebruik de opdracht om OpenCV in Python te installeren:

Pip installeren opencv-python

Hoe een gezichtsdetectieprogramma te bouwen met behulp van Python

Volg deze stappen om de gezichtsdetector te bouwen:

Deze voorbeeldcode is, samen met het Haar Cascade-algoritmebestand, beschikbaar in een GitHub-opslagplaats en is gratis voor u om te gebruiken onder de MIT-licentie.

  1. Download de Haar Cascade frontaal gezicht Standaard XML -bestand en plaats het op dezelfde locatie als uw Python-programma.
  2. Importeer de OpenCV-bibliotheek.
    # de vereiste bibliotheken importeren
    importeren cv2
  3. Bewaar het algoritmebestand Haar Cascade Frontal Face zodat u het gemakkelijk kunt raadplegen.
    # laad het haar case-algoritmebestand in de alg-variabele
    alg = "haarcascade_frontalface_default.xml"
  4. Gebruik de klasse CascadeClassifier om een ​​XML-bestand in OpenCV te laden.
    # het algoritme doorgeven aan OpenCV
    haar_cascade = cv2.CascadeClassifier (alg)
  5. Leg de video van de camera vast. Geef 0 door aan de Video opname() functie om uw primaire camera te gebruiken. Als u een externe camera hebt aangesloten, kunt u de opeenvolgende nummers 1, 2, enzovoort gebruiken om deze te gebruiken.
    # het vastleggen van de videofeed van de camera
    cam = cv2.VideoCapture (0)
  6. Stel een oneindige lus in om de camera-invoer frame voor frame te lezen. De lezen() functie retourneert twee parameters. De eerste waarde is van het type boolean die aangeeft of de bewerking is geslaagd of niet. De tweede parameter bevat het daadwerkelijke frame waarmee u gaat werken. Bewaar dit frame in de img variabel.
    terwijlWAAR:
    _, img = cam.lezen()
  7. Stel de standaardtekst in die moet worden weergegeven als Gezicht niet gedetecteerd. Update de waarde van deze variabele wanneer deze wordt gedetecteerd.
     tekst = "Gezicht niet gedetecteerd"
  8. De input uit de echte wereld is kleurrijk, in het BGR-formaat. BGR staat voor blauw, groen en rood. Dit zorgt voor veel verwerking voor computer vision-toepassingen. Gebruik een grijswaardenindeling om dit te verminderen.
    # converteer elk frame van BGR naar grijswaarden
    grijsImg = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY)
    Geef het formaat van het frame en de conversiecode door, KLEUR_BGR2GRIJS, naar cvtKleur() om elk frame van de video van kleur naar grijstinten te veranderen.
  9. Gebruik detecterenMultiScale() gezichten te detecteren. Deze methode neemt drie parameters als invoer. Ten eerste is de bronafbeelding, grijsImg. De tweede parameter is de scaleFactor. Dit geeft aan hoeveel u de afbeeldingsgrootte op elke afbeeldingsschaal moet verkleinen. Gebruik de standaardwaarde 1,3 als schaalfactor. Hoe hoger de schaalfactor, hoe minder stappen en hoe sneller de uitvoering. Er is echter ook een grotere kans op ontbrekende gezichten. De derde parameter is minNeighbours. Dit geeft aan hoeveel buren elke kandidaat-rechthoek moet hebben om hem te behouden. Hoe hoger de waarde, hoe kleiner de kans op een fout-positief, maar het betekent ook dat u onduidelijke gezichtssporen misloopt.
    # gezichten detecteren met Haar Cascade 
    gezicht = haar_cascade.detectMultiScale (grijsImg, 1.3, 4)
  10. Wanneer je een gezicht detecteert, krijg je vier coördinaten. x vertegenwoordigt de x-coördinaat, y vertegenwoordigt de y-coördinaat, w vertegenwoordigt de breedte en h vertegenwoordigt de hoogte. Update de tekst naar Gezicht gedetecteerd en teken een rechthoek met behulp van deze coördinaten. De kleur van de rechthoek is groen (BGR) formaat met een dikte van twee pixels.
    # teken een rechthoek rond het gezicht en werk de tekst bij naar Gezicht gedetecteerd
    voor (x, y, w, h) in gezicht:
    tekst = "Gezicht gedetecteerd"
    cv2.rechthoek(img, (X, j), (X + w, j + H), (0, 255, 0), 2)
  11. Print eventueel de tekst op de uitvoerconsole. Geef de tekst op het scherm weer met het vastgelegde frame als bron, tekst zoals verkregen in de bovenstaande tekst, lettertype stijl van FONT_HERSHEY_SIMPLEX, lettertypeschaalfactor van 1, blauwe kleur, dikte van twee pixels en lijntype van AA.
    # toon de tekst op de afbeelding
    afdrukken(tekst)
    afbeelding = cv2.putText (img, tekst, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA)
  12. Geef het venster met de titel weer Gezichtsherkenning en het beeld. Gebruik de wachttoets() methode om het venster gedurende 10 milliseconden weer te geven en te controleren op een toetsaanslag. Als een gebruiker op de Esc toets (ASCII-waarde 27), verlaat de lus.
    # geef het uitvoervenster weer en druk op de escape-toets om af te sluiten
    cv2.imshow("Gezichtsherkenning", afbeelding)
    sleutel = cv2.waitKey (10)

    als toets == 27:
    pauze

  13. Laat ten slotte het camera-object los van het python-programma en sluit alle vensters.
    camera.uitgave()
    cv2.destroyAllWindows()

Gezichtsdetectie met behulp van Python in actie

Wanneer een gezicht in beeld is, zou u de uitvoer als volgt moeten zien:

Als er geen gezicht aanwezig is, ziet u een bericht als dit:

Beperkingen van gezichtsdetectie met behulp van het Haar Cascade-algoritme

Hoewel dit algoritme licht van gewicht is, een klein model heeft en snel werkt, zijn er enkele beperkingen:

  • In een real-time video moet het gezicht zich in het gezichtsveld van de camera bevinden. Als het gezicht te ver weg, te dichtbij of te gekanteld is, kan het algoritme de gelaatstrekken niet oppikken.
  • Het is een frontaal gezichtsalgoritme, dus u kunt geen zijaanzichten detecteren.
  • Hoge fout-positieve resultaten. Het detecteert vaak gebieden als gezichten, ook al is er geen gezicht aanwezig.
  • Moet optimale lichtomstandigheden hebben. Overmatige of zwakke verlichting belemmert de nauwkeurigheid van het algoritme.

De vele toepassingen van gezichtsdetectie

Gezichtsdetectie heeft een breed scala aan toepassingen in de wereld van vandaag. U kunt het gebruiken voor gezichtsherkenning in smartphones, huizen, voertuigen en immigratiecontroleposten. Gezichtsdetectie is al gebruikelijk in cameratoezicht, filters voor sociale media en automatisch volgen van gezichten in cinematografie.

Het is nog maar het begin van deze prachtige technologie. Met vooruitgang kunnen we misschien vermiste kinderen identificeren, criminelen oppakken en misdaden zoals identiteitsdiefstal voorkomen.