Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

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

  1. Google Assistant installeren op een MATRIX Voice Raspberry Pi – Stap-voor-stap gids
  2. Speathe: Adem-gedreven communicatie voor gelumde gebruikers
  3. Bouw een Veilige Gezichtsherkenning-deur met Windows IoT en Raspberry Pi
  4. Geautomatiseerde Visuele Object-tracking met Raspberry Pi en OpenCV
  5. Bouw een Raspberry Pi Cijferherkenner met TensorFlow en OpenCV
  6. Bouw een Windows IoT Core Rover met Raspberry Pi 2 – Beginner tot Gevorderde Gids
  7. GoPiGo v2 Uitbreiden op Windows 10 IoT Core voor Raspberry Pi 3
  8. Python Operators onder de knie krijgen: Een uitgebreide gids
  9. Python-lijstbewerkingen: aanmaken, benaderen, wijzigen en geavanceerde technieken
  10. Python-tuples beheersen: aanmaken, benaderen en geavanceerde bewerkingen
  11. Python-dictionaries beheersen: aanmaken, manipuleren en geavanceerde technieken