Real-time Gezichtsherkenning op Raspberry Pi – Complete Gids
Deze tutorial begeleidt je bij het bouwen van een real-time gezichtsherkenningssysteem op een Raspberry Pi met OpenCV en een Pi-Cam. Van hardware-opstelling tot het trainen van de recognizer, elke stap wordt gepresenteerd met duidelijke code-snippets en praktische tips.
Hieronder zie je een live demo van de Pi-Cam die gezichten in real-time detecteert.
Het project steunt op de open-source OpenCV-bibliotheek, geoptimaliseerd voor real-time prestaties. Hoewel we ons richten op een Raspberry Pi met Raspbian, draait dezelfde code op macOS en Windows met slechts kleine aanpassingen.
3 Fasen
Een complete gezichtsherkenning-workflow kan opgedeeld worden in drie duidelijke stadia:
- Gezichtsdetectie & Data-verzameling
- De Recognizer Trainen
- Real-time Gezichtsherkenning
Het onderstaande diagram vat deze fasen samen.
Stap 1: BOM – Stuklijst
Essentiële componenten:
- Raspberry Pi 3 – $32,00
- 5-MPx 1080p OV5647 Mini Camera Module – $13,00
Stap 2: OpenCV 3 Installeren
We raden aan Adrian Rosebrock's gids te volgen voor een schone OpenCV 3-installatie op Raspbian Stretch. Na de tutorial, activeer de speciale Python virtuele omgeving:
source ~/.profile
workon cv
Eenmaal in de omgeving, verificeer de Python-versie en OpenCV-installatie:
python
>>> import cv2
>>> cv2.__version__
Je zou een versienummer als 3.3.0 of nieuwer moeten zien.
Stap 3: Je Camera Testen
Als de camera niet gedetecteerd wordt, schakel de driver in met:
sudo modprobe bcm2835-v4l2
Het volgende Python-fragment opent de Pi-Cam stream, toont het in kleur en grijswaarden, en flip het verticaal (pas aan als je camera-orientatie afwijkt):
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)
while True:
ret, frame = cap.read()
frame = cv2.flip(frame, -1)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame', frame)
cv2.imshow('gray', gray)
if cv2.waitKey(30) & 0xff == 27:
break
cap.release()
cv2.destroyAllWindows()
Draai met python simpleCamTest.py (beschikbaar op de project-GitHub). Druk ESC om af te sluiten.
Stap 4: Gezichtsdetectie
OpenCV's Haar Cascade-classifier is een lichtgewicht, machine-learning benadering voor het detecteren van gezichten. Download het vooraf getrainde XML-bestand (haarcascade_frontalface_default.xml) en plaats het in een Cascades map. Het volgende script demonstreert real-time gezichtsdetectie met bounding boxes:
import cv2
faceCascade = cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)
while True:
ret, img = cap.read()
img = cv2.flip(img, -1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(
gray, scaleFactor=1.2, minNeighbors=5, minSize=(20, 20)
)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
cv2.imshow('video', img)
if cv2.waitKey(30) & 0xff == 27:
break
cap.release()
cv2.destroyAllWindows()
De detectMultiScale parameters controleren gevoeligheid: scaleFactor verkleint de afbeelding elke iteratie, minNeighbors filtert valse positieven, en minSize stelt de kleinste detecteerbare gezichtsafmeting in.
Aanvullende Voorbeelden
Verken meer detectie-opties op de project-GitHub:
- faceEyeDetection.py
- faceSmileDetection.py
- faceSmileEyeDetection.py
Haar Cascade Object Detectie – Gezicht & Oog Tutorial
Stap 5: Data-verzameling
Het verzamelen van een gelabelde dataset is essentieel voor training. Maak een projectmap (bijv. FacialRecognitionProject) en een dataset subdirectory:
mkdir FacialRecognitionProject
cd FacialRecognitionProject
mkdir dataset
Download het Haar Cascade-bestand in de project-root. Voer dan 01_face_dataset.py uit om 30 gezichtsafbeeldingen per gebruiker vast te leggen:
import cv2
import os
cam = cv2.VideoCapture(0)
cam.set(3, 640)
cam.set(4, 480)
face_detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
face_id = input('\nVoer gebruikers-ID (numeriek) in en druk op → ')
print('\n[INFO] Initialiseren gezichts-opname. Kijk naar de camera…')
count = 0
while True:
ret, img = cam.read()
img = cv2.flip(img, -1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_detector.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
count += 1
cv2.imwrite(f'dataset/User.{face_id}.{count}.jpg', gray[y:y+h, x:x+w])
cv2.imshow('image', img)
if cv2.waitKey(100) & 0xff == 27 or count >= 30:
break
if count >= 30:
break
cam.release()
cv2.destroyAllWindows()
print('\n[INFO] Programma afsluiten en opruimen.')
Elke afbeelding heet User.{id}.{count}.jpg (bijv. User.1.4.jpg). Pas het aantal samples aan naar wens.
Stap 6: Trainer
Met de verzamelde afbeeldingen, train een OpenCV gezichtsrecognizer. Het resulterende model wordt bewaard als een .yml bestand in een trainer map. Raadpleeg het volledige trainingscript in de project-repository voor implementatiedetails.
Lees Meer Details: Real-time Gezichtsherkenning – End-to-End Project
Productieproces
- Google Assistant installeren op een MATRIX Voice Raspberry Pi – Stap-voor-stap gids
- Speathe: Adem-gedreven communicatie voor gelumde gebruikers
- Bouw een Veilige Gezichtsherkenning-deur met Windows IoT en Raspberry Pi
- Geautomatiseerde Visuele Object-tracking met Raspberry Pi en OpenCV
- Bouw een Raspberry Pi Cijferherkenner met TensorFlow en OpenCV
- Bouw een Windows IoT Core Rover met Raspberry Pi 2 – Beginner tot Gevorderde Gids
- GoPiGo v2 Uitbreiden op Windows 10 IoT Core voor Raspberry Pi 3
- Python Operators onder de knie krijgen: Een uitgebreide gids
- Python-lijstbewerkingen: aanmaken, benaderen, wijzigen en geavanceerde technieken
- Python-tuples beheersen: aanmaken, benaderen en geavanceerde bewerkingen
- Python-dictionaries beheersen: aanmaken, manipuleren en geavanceerde technieken