Gezichtsherkenning met Python en OpenCV

Delen

Facebook
Twitter
WhatsApp

In dit artikel, zullen we weten wat gezichtsherkenning is en hoe het verschilt van gezichtsdetectie. We zullen kort ingaan op de theorie van gezichtsherkenning en daarna overgaan tot het coderingsgedeelte. Aan het eind van dit artikel zult u in staat zijn om een gezichtsherkenningsprogramma te maken voor het herkennen van gezichten in afbeeldingen en op live webcam feed.

  1. Wat is gezichtsherkenning?
  2. Wat is gezichtsherkenning?
  3. Gezichtsherkenning met behulp van Python
    1. Gezichten herkennen in webcam feed
    2. Gezichten herkennen in afbeeldingen

    Wat is Gezichtsdetectie?

    In computervisie is een essentieel probleem dat we proberen uit te zoeken het automatisch detecteren van objecten in een afbeelding zonder menselijke tussenkomst. Gezichtsdetectie kan worden gezien als een dergelijk probleem, waarbij we menselijke gezichten in een afbeelding detecteren. Er kunnen kleine verschillen zijn in de gezichten van mensen, maar over het algemeen kunnen we stellen dat er bepaalde kenmerken zijn die geassocieerd worden met alle menselijke gezichten. Er zijn verschillende algoritmen voor gezichtsdetectie, maar het Viola-Jones algoritme is een van de oudste methoden die ook vandaag nog wordt gebruikt en die we later in het artikel ook zullen gebruiken. U kunt het Viola-Jones-algoritme doornemen nadat u dit artikel hebt voltooid, omdat ik het aan het eind van dit artikel zal linken.

    Gezichtsdetectie is gewoonlijk de eerste stap naar veel gezichtsgerelateerde technologieën, zoals gezichtsherkenning of -verificatie. Gezichtsdetectie kan echter zeer nuttige toepassingen hebben. De meest succesvolle toepassing van gezichtsherkenning is waarschijnlijk het maken van foto’s. Wanneer u een foto van uw vrienden maakt, detecteert het gezichtsdetectiealgoritme dat in uw digitale camera is ingebouwd waar de gezichten zich bevinden en past het de scherpstelling daarop aan.

    Voor een tutorial over alleen gezichtsdetectie, klikt u hier

    Wat is gezichtsherkenning?

    Nu we erin geslaagd zijn dergelijke algoritmen te maken die gezichten kunnen detecteren, kunnen we dan ook herkennen van wie die gezichten zijn?

    Gezichtsherkenning is een methode om de identiteit van een individu vast te stellen of te verifiëren aan de hand van het gezicht. Er zijn verschillende algoritmen die gezichtsherkenning kunnen doen, maar hun nauwkeurigheid kan variëren. Hier ga ik beschrijven hoe we gezichtsherkenning doen met behulp van deep learning.

    Dus laten we nu begrijpen hoe we gezichten herkennen met behulp van deep learning. We maken gebruik van gezichtsinbedding waarbij elk gezicht wordt omgezet in een vector en deze techniek wordt deep metric learning genoemd. Laat me dit proces verder onderverdelen in drie eenvoudige stappen voor een goed begrip:

    Gezichtsdetectie: De allereerste taak die we uitvoeren is het detecteren van gezichten in het beeld of de videostroom. Nu we de exacte locatie/coördinaten van het gezicht kennen, extraheren we dit gezicht voor verdere verwerking.

    Feature Extraction: Nu we het gezicht uit het beeld hebben gesneden, extraheren we er kenmerken uit. Hier gaan we gezichtsembeddingen gebruiken om de kenmerken uit het gezicht te halen. Een neuraal netwerk neemt een afbeelding van het gezicht van een persoon als input en produceert een vector die de belangrijkste kenmerken van een gezicht weergeeft. Bij machinaal leren wordt deze vector inbedding genoemd en dus noemen we deze vector gezichtsinbedding. Hoe helpt dit bij het herkennen van gezichten van verschillende personen?

    Tijdens het trainen van het neurale netwerk leert het netwerk vergelijkbare vectoren te produceren voor gezichten die op elkaar lijken. Als ik bijvoorbeeld meerdere foto’s van gezichten in verschillende tijdsperioden heb, kunnen sommige kenmerken van mijn gezicht natuurlijk veranderen, maar niet in grote mate. Dus in dit geval zijn de vectoren van de gezichten gelijk of, kort gezegd, liggen ze dicht bij elkaar in de vectorruimte. Kijk eens naar het onderstaande diagram voor een ruw idee:

    Nu na het trainen van het netwerk, leert het netwerk om vectoren te produceren die dichter bij elkaar liggen (vergelijkbaar) voor gezichten van dezelfde persoon (lijken op elkaar). De bovenstaande vectoren veranderen nu in:

    We gaan hier niet zo’n netwerk trainen, omdat het een aanzienlijke hoeveelheid gegevens en rekenkracht vergt om dergelijke netwerken te trainen. We gebruiken een vooraf getraind netwerk dat door Davis King is getraind op een dataset van ~3 miljoen afbeeldingen. Het netwerk geeft een vector van 128 getallen die de belangrijkste kenmerken van een gezicht vertegenwoordigen.

    Nu we weten hoe dit netwerk werkt, laten we eens kijken hoe we dit netwerk gebruiken op onze eigen gegevens. We geven alle afbeeldingen in onze gegevens door aan dit voorgetrainde netwerk om de respectieve embeddings te krijgen en slaan deze embeddings op in een bestand voor de volgende stap.

    Vergelijken van gezichten: Nu we gezichtsembeddings hebben voor elk gezicht in onze gegevens die in een bestand zijn opgeslagen, is de volgende stap om een nieuw t beeld te herkennen dat niet in onze gegevens zit. De eerste stap is dus het berekenen van de gezicht-embedding voor de afbeelding met behulp van hetzelfde netwerk dat we hierboven hebben gebruikt en vervolgens deze embedding vergelijken met de rest van de embeddings die we hebben. We herkennen het gezicht als de gegenereerde inbedding dichterbij of vergelijkbaar is met een andere inbedding, zoals hieronder te zien is:

    Dus we hebben twee afbeeldingen doorgegeven, een van de afbeeldingen is van Vladimir Poetin en de andere van George W. Bush. In ons bovenstaande voorbeeld hebben we de embeddings van Poetin niet opgeslagen, maar wel die van Bush. Wanneer we de twee nieuwe inbeddingen vergelijken met de bestaande, ligt de vector voor Bush dichter bij de andere gezichtsinbeddingen van Bush, terwijl de gezichtsinbeddingen van Poetin niet dichter bij een andere inbedding liggen en het programma hem dus niet kan herkennen.

    Gezichtsherkenning met Python

    In dit gedeelte zullen we gezichtsherkenning implementeren met OpenCV en Python. Laten we eerst de bibliotheken bekijken die we nodig hebben en hoe we ze moeten installeren:

    • OpenCV
    • dlib
    • Face_recognition

    OpenCV is een beeld- en videoverwerkingsbibliotheek en wordt gebruikt voor beeld- en videoanalyse, zoals gezichtsdetectie, het lezen van kentekens, fotobewerking, geavanceerde robotvisie, optische tekenherkenning en nog veel meer.

    De dlib-bibliotheek, die wordt onderhouden door Davis King, bevat onze implementatie van “deep metric learning”, die wordt gebruikt om onze gezichtsembeddings te construeren die worden gebruikt voor het eigenlijke herkenningsproces.

    De face_recognition-bibliotheek, gemaakt door Adam Geitgey, omwikkelt de gezichtsherkenningsfunctionaliteit van dlib, en deze bibliotheek is supergemakkelijk om mee te werken en we zullen deze in onze code gebruiken. Vergeet niet om eerst de dlib-bibliotheek te installeren voordat je face_recognition installeert.

    Om OpenCV te installeren, typ je in command prompt

    pip install opencv-python

    Ik heb verschillende manieren geprobeerd om dlib op Windows te installeren, maar de gemakkelijkste van allemaal is via Anaconda. Installeer eerst Anaconda (hier is een handleiding om het te installeren) en gebruik dan dit commando in uw opdrachtprompt:

    conda install -c conda-forge dlib

    Volgende om face_recognition te installeren, typt u in opdrachtprompt

    pip install face_recognition

    Nu we alle afhankelijkheden hebben geïnstalleerd, kunnen we beginnen met coderen. We moeten drie bestanden maken, één zal onze dataset nemen en gezichtsinbedding extraheren voor elk gezicht met behulp van dlib. Vervolgens slaan we deze inbeddingen op in een bestand.

    In het volgende bestand vergelijken we de gezichten met de bestaande gezichten in afbeeldingen en vervolgens doen we hetzelfde, maar dan voor het herkennen van gezichten in live webcamfeeds

    Extractie van kenmerken uit gezichten

    Voreerst moet u een dataset maken of er zelf een maken. Zorg ervoor dat u alle afbeeldingen in mappen plaatst, waarbij elke map afbeeldingen van slechts één persoon bevat.

    Daarna slaat u de dataset op in een map waarin u ook het bestand gaat maken. Hier is de code:

    Nu we de inbedding in een bestand met de naam “face_enc” hebben opgeslagen, kunnen we ze gebruiken om gezichten in afbeeldingen of live videostream te herkennen.

    Gezichtsherkenning in live webcamfeeds

    Hier volgt het script om gezichten in een live webcamfeed te herkennen:

    Hoewel we in het bovenstaande voorbeeld haar cascade hebben gebruikt om gezichten te detecteren, kunt u ook face_recognition.face_locations gebruiken om een gezicht te detecteren, zoals we in het vorige script hebben gedaan

    Gezichtsherkenning in afbeeldingen

    Het script voor het detecteren en herkennen van gezichten in afbeeldingen is bijna gelijk aan wat u hierboven hebt gezien. Probeer het zelf en als het niet lukt, kijk dan eens naar de code hieronder:

    Uitvoer:

    • Input
    • Output

    Dit brengt ons aan het einde van dit artikel waarin we geleerd hebben over gezichtsherkenning. U kunt een gratis cursus krijgen op Great learning academy over verschillende cursussen. Klik op de onderstaande banner voor meer informatie

    U kunt ook bijscholen met de PGP-cursus Kunstmatige intelligentie en machinaal leren van Great Learning. De cursus biedt mentorschap van leiders uit de industrie, en je krijgt ook de kans om te werken aan real-time projecten die relevant zijn voor de industrie.

    Verder lezen

    1. Gezichtsdetectie met behulp van Viola-Jones Algoritme
    2. Real-time Gezichtsdetectie | Gezichtsmaskerdetectie met behulp van OpenCV
    3. Real-Time Objectdetectie met behulp van TensorFlow
    4. YOLO objectdetectie met behulp van OpenCV
    5. Objectdetectie in Pytorch | Wat is Objectdetectie?

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.