Contents
Deze blogpost is oorspronkelijk gepubliceerd op de website van Xailient. Het wordt hier herdrukt met toestemming van Xailient.
Gezicht volgen is het detecteren van een reeks gezichten in frame 1 van een video, het tot stand brengen van een overeenkomst tussen de frames en het behouden van een unieke ID voor elk van de gezichten gedurende de video.
Het wordt gebruikt in verschillende scenario's, variërend van videobewaking waarbij een doelgezicht wordt gevolgd om de beweging van de doelpersoon te observeren; privacybescherming waarbij een gezicht wordt vervangen of vervaagd; en entertainment waarbij het doelgezicht wordt vervangen door tekenfilms of vermengd met het gezicht van een superster.
Gezicht volgen op afbeelding (originele afbeelding door Brooke Cagle op Unsplash)
Gezicht volgen voor privacybescherming
Stel je voor wat je zou kunnen doen met gezichtsherkenning …
maak uw ons huisbewakingssysteem zodat wanneer een niet-herkende persoon uw voordeur binnenkomt, het zijn/haar bewegingen bijhoudt en u waarschuwt, het aantal mensen telt dat in en uit uw gebouw loopt, of een app maakt die de je gezicht met een smiley
terwijl je een dansvideo maakt om te delen op je YouTube-kanaal.
Gezicht volgen en vervanging op een dansvideo (Video door: cottonbro van Pexels, Smiley Icon door: Roundicons)
In dit bericht zal ik je leren hoe je een eenvoudig gezichtsvolgsysteem in Python kunt maken door de taak in twee stappen te verdelen:
- Gezichtsdetectie
- Gezicht volgen
Aan het einde van dit bericht kun je gezichten in het eerste frame detecteren en alle gedetecteerde gezichten in de volgende frames volgen.
OPMERKING: voor dit bericht, Ik zal Raspberry Pi 3B+ gebruiken en al mijn code erop uitvoeren.
Laten we beginnen.
Gezichtsdetectie
Om gezichten te kunnen volgen, moeten we eerst in staat zijn om gezichten in een bepaalde afbeelding te detecteren.
Voor onze gezichtsdetectietaak zullen we Xailient Face Detector gebruiken. Je kunt dit bericht raadplegen om de Face Detector SDK te downloaden en te installeren.
Gezichtsdetectie op afbeelding
Laten we beginnen met het maken van een programma om gezichten van een statische afbeelding te detecteren. Hier is de code om een afbeelding te lezen, gezichten in de afbeelding te detecteren, een selectiekader rond de gedetecteerde gezichten te tekenen en het vervolgens weer op de schijf op te slaan.
Gezichtsdetectie op videostream
Nu we een programma hebben dat statische gezichten detecteert, laten we het zo programmeren dat het gezichten in een videostream kan detecteren.
We zullen het picamera-pakket gebruiken voor videostreaming, dat een interface biedt voor de Raspberry Pi-cameramodule voor Python.
Voor elk frame van de videostream voeren we gezichtsdetectie uit, tekenen we een kader rond de gedetecteerde gezichten en geven we het frame weer.
Face Tracking
Laten we face-tracking toevoegen aan het bovenstaande programma. We zullen gezichten in het eerste frame detecteren en vervolgens de gezichten volgen die in alle andere frames zijn gedetecteerd.
Voor tracking gebruiken we correlatie_tracker() die algoritmen en tools voor machine learning bevat die worden gebruikt in een groot aantal domeinen, waaronder robotica en embedded apparaten.
Dlib is een bibliotheek die is gemaakt door Davis King en die machine learning bevat. algoritmen en tools die worden gebruikt in een groot aantal domeinen, waaronder robotica en embedded apparaten.
Gebruik de volgende opdrachten om Dlib te installeren:
OPMERKING: Als u problemen ondervindt bij het installeren van Dlib, dan biedt deze tutorial gedetailleerde instructies voor het installeren ervan.
Met correlatie_tracker() kunt u de positie van een object volgen terwijl het zich verplaatst van frame voor frame in een video.
In het eerste frame zullen we gezichtsdetectie uitvoeren. Voor elk van de gedetecteerde gezichten, zullen we een correlatietracker-object maken (dlib.correlation_tracker()) en beginnen met het volgen van het gezicht door de coördinaten van het begrenzingsvak aan het tracker-object te geven. Vervolgens zullen we voor elk van de volgende frames deze trackers gebruiken om de locatie van elk gezicht te identificeren.
Je hebt nu je gezichtvolgsysteem klaar!
Je kunt de code ook aanpassen zodat je gezichten kunt volgen van een video die van een schijf is geladen in plaats van deze live vanaf de camera te streamen.
Hier is de gewijzigde gezichtsdetectie- en volgcode:
Hieronder ziet u een video met schermopname van de lopende gezichtsdetectie en tracking op een video. De video die ik gebruikte voor het testen van mijn code was een bijgesneden versie (ik gebruikte alleen de laatste 8 seconden) van de originele video door Tim Savage van Pexels. Je kunt de originele video downloaden via deze link.
Op zoek naar realtime gezichtsdetectie op een Raspberry Pi ? Bekijk dit bericht.
Referenties:
Wang, Z., Zheng, L., Liu, Y., & Wang, S. (2019). Op weg naar realtime tracking van meerdere objecten. Vereniging voor de vooruitgang van kunstmatige intelligentie.
Wang, Q., Zhang, L., Bertinetto, L., Hu, W., & HS Torr, P. (2019). Snelle online objecttracking en -segmentatie: een verenigende aanpak. Vereniging voor de vooruitgang van kunstmatige intelligentie.
http://dlib.net
http://dlib.net/correlation_tracker.py.html
Sabina Pokhrel
Customer Success AI Engineer, Xailient