Gesichtserkennung mit deinem Raspberry Pi: So funktioniert’s

Gesichtserkennung mit deinem Raspberry Pi: So funktioniert’s

Kamera, Raspberry Pi
30 September 2020

Jetzt kannst du es der CIA gleichtun und Software zur Gesichtserkennung für deine Raspberry Pi Projekte nutzen. Wir liefern dir den Code!

Was einst nur in futuristischen Hollywoodstreifen Anwendung fand, dient heutzutage bereits in vielen privaten Haushalten als Sicherheitsmechanismus: die Gesichtserkennung. Das Prinzip ist so genial wie simpel: Eine Kamera wird mithilfe einer Software dahingehend programmiert, dass sie das Gesicht der Person, die sich vor der Linse befindet, in Echtzeit erkennt. Das mag für den Laien ein wenig nach Science-Fiction klingen, doch tatsächlich ist es relativ einfach, den Mechanismus in grundlegender Form nachzubauen. Wir verraten dir im Folgenden, wie du mit deinem Raspberry Pi Rechner, einem Raspberry Pi Kameramodul und einigen weiteren Hilfsmitteln dein eigenes Gesichtserkennungsprojekt realisieren kannst.

Diese Hardware benötigst du für das Raspberry Pi Gesichtserkennung Projekt:

WARENKORB

Alle für dieses Projekt notwendigen Artikel landen mit einem Klick auf den Button direkt in deinem Warenkorb, sofern sie in unserem Shop verfügbar sind. Kontrolliere daher deinen Warenkorb genau!

Diese Software benötigst du für das Projekt:

  • Raspbian OS: Hierbei handelt es sich um das Betriebssystem für deinen Raspberry Pi.
  • OpenCV (Open Source Computer Vision Library): Die Software eignet sich hervorragend für die Echtzeit-Gesichtserkennung mit einer Kamera, da sie eigens für Recheneffizienz und mit einem Hauptaugenmerk auf Echtzeitanwendungen konzipiert wurde.
  • Python 3: Die Software wird benötigt, um die für das Projekt erforderlichen Codes einzugeben.

Raspberry Pi + Kamera für Gesichtserkennung
Raspberry Pi und Kamera.

Schritt für Schritt: So realisierst du dein Raspberry Pi Gesichtserkennungsprojekt

  • Zunächst solltest du das Betriebssystem Raspbian OS auf deiner Micro-SD-Karte installieren. Dabei gehst du folgendermaßen vor: Nachdem du das Raspbian OS heruntergeladen hast, entpackst du das Image auf deiner Festplatte. Anschließend überträgst du das Betriebssystem auf deine Micro-SD-Karte. Hierbei hat sich die Verwendung von Etcher bewährt, denn das Tool erleichtert das Einrichten von Raspbian OS erheblich. Am besten downloadest du die aktuelle Version von Etcher und installierst diese auf deinem Rechner. Als nächstes legst du die Micro-SD-Karte in deinen Rechner ein und startest Etcher. Klicke nun auf „Select Image“ und suche den Ordner, in welchem du das Raspbian-Image entpackt hast. Nachdem du den Ordner und die Raspbian-Image-Datei ausgewählt hast, klickst du auf die Micro-SD-Karte. Mit einem Klick auf „Flash“ startest du schließlich den Installationsprozess.
  • Im nächsten Schritt richtest du dein Raspberry Pi Kameramodul ein. Dazu verbindest du zunächst die Kamera-Platine über ein Flachbandkabel mit deinem Raspberry Pi. Achte darauf, das Kabel richtig herum anzuschließen. Anschließend musst du noch die aktuellsten Kernel, GPU-Firmware und Anwendungen downloaden und installieren. Zu diesem Zweck benötigst du eine Internetverbindung. Zuletzt aktivierst du den Kamera-Support mithilfe des Programms raspi-config. Detaillierte Informationen zum Einrichtungsprozess deines Kameramoduls findest du hier.
  • Dein Kameramodul funktioniert? Wunderbar! Nun geht es daran, die Tools Open CV und Python 3 zu installieren. Sofern du dabei Unterstützung benötigst, findest du hier wertvolle Tipps.
  • Der größte Teil der Vorbereitungen ist nun abgeschlossen. Das bedeutet: Du kannst erstmals das neue Raspberry Pi Gesichtserkennung Projekt starten! Es empfiehlt sich, zu diesem Zweck einen Ordner anzulegen, in dem du alle betreffenden Dateien übersichtlich ablegst. Erstelle in diesem Ordner am besten einen weiteren Ordner namens /Projekt, in den du die für das Gesichtserkennungsprojekt essentiellen Python-Dateien „camtest.py“ und „faceDetection.py” verschiebst. In diesen Dateien sind die Codes hinterlegt, die für das Projekt erforderlich sind. Die Codes stellen wir dir nachfolgend bereit. Du kannst sie einfach in deine Entwicklungsumgebung kopieren.

camtest.py :

import numpy as np
import cv2
cap = cv2.VideoCapture(0)
cap.set(3,640) # set Width
cap.set(4,480) # set Height
while(True):
    ret, frame = cap.read()
    frame = cv2.flip(frame, -1) # Flip camera vertically
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
    cv2.imshow('frame', frame)
    cv2.imshow('gray', gray)
    
    k = cv2.waitKey(30) & 0xff
    if k == 27: # press 'ESC' to quit
        break
cap.release()
cv2.destroyAllWindows()

faceDetection.py :

import numpy as np
import cv2
faceCascade = cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
cap.set(3,640) # set Width
cap.set(4,480) # set Height
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)
        roi_gray = gray[y:y+h, x:x+w]
        roi_color = img[y:y+h, x:x+w]  
    cv2.imshow('video',img)
    k = cv2.waitKey(30) & 0xff
    if k == 27: # press 'ESC' to quit
        break
cap.release()
cv2.destroyAllWindows()

  • Lege im Ordner /Projekt einen weiteren Ordner mit der Bezeichnung /Cascades an und füge dort alle Haarcascade-Dateien ein. Diese liegen im XML-Format vor.
  • Genug der Theorie – lass uns einen praktischen Versuch starten! Öffne dazu einen Terminal und gib in das daraufhin erscheinende Feld python3 camtest.py ein. Nimm nun ein paar Probebilder auf. Der Testlauf sollte erfolgreich verlaufen sein.
  • Um einen Gesichtsdetektor zu erstellen und somit die Gesichtserkennung durchführen zu können, musst du – wie auch beim Testversuch – ein neues Terminal öffnen. Anschließend gibst du in das Feld python3 faceDetection.py ein. Das vom Kameramodul aufgenommene Bild ist nun an jener Stelle mit einem Rahmen versehen, an der ein Gesicht erkannt wurde. Deine Raspberry Pi Gesichtserkennungs AI ist indes auch imstande, mehrere Gesichter auf einmal zu erkennen.

Unser Werksstudent Younes bei der Arbeit. Ihm verdanken wir sehr viel!
Raspberry Pi Gesichtserkennung Test
Ein Teil des BerryBase-Teams testet die Gesichtserkennung.

Was ist noch mit der Raspberry Pi Gesichtserkennung möglich?

Übrigens: Bei der Erkennung von einzelnen Gesichtern ist die Fahnenstange noch längst nicht erreicht! Mit dem Equipment und der Software, die dir vorliegt, kannst du auch eine Kombination aus Gesicht und Augen erkennen lassen. Hierzu erstellst du einfach im Projekt-Ordner die Datein „faceEyeDetection.py“, „faceSmileDetection.py“ und „FaceSmileEyeDetection.py“. Der Code für diese Dateien lautet folgendermaßen:

faceEyeDetection.py :

import numpy as np
import cv2

faceCascade = cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml')
eyeCascade = cv2.CascadeClassifier('Cascades/haarcascade_eye.xml')
 
cap = cv2.VideoCapture(0)
cap.set(3,640) # set Width
cap.set(4,480) # set Height

while True:
    ret, img = cap.read()
    img = cv2.flip(img, -1)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = faceCascade.detectMultiScale(
        gray,
        scaleFactor=1.3,
        minNeighbors=5,      
        minSize=(30, 30)
    )

    for (x,y,w,h) in faces:
        cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
        roi_gray = gray[y:y+h, x:x+w]
        roi_color = img[y:y+h, x:x+w]
        
        eyes = eyeCascade.detectMultiScale(
            roi_gray,
            scaleFactor= 1.5,
            minNeighbors=10,
            minSize=(5, 5),
            )
        
        for (ex, ey, ew, eh) in eyes:
            cv2.rectangle(roi_color, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2)
               
        cv2.imshow('video', img)

    k = cv2.waitKey(30) & 0xff
    if k == 27: # press 'ESC' to quit
        break

cap.release()
cv2.destroyAllWindows()

faceSmileDetection.py :

Smyleimport numpy as np
import cv2

# multiple cascades: https://github.com/Itseez/opencv/tree/master/data/haarcascades
faceCascade = cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml')
smileCascade = cv2.CascadeClassifier('Cascades/haarcascade_smile.xml')
 
cap = cv2.VideoCapture(0)
cap.set(3,640) # set Width
cap.set(4,480) # set Height

while True:
    ret, img = cap.read()
    img = cv2.flip(img, -1)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = faceCascade.detectMultiScale(
        gray,
        scaleFactor=1.3,
        minNeighbors=5,      
        minSize=(30, 30)
    )

    for (x,y,w,h) in faces:
        cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
        roi_gray = gray[y:y+h, x:x+w]
        roi_color = img[y:y+h, x:x+w]
        
        smile = smileCascade.detectMultiScale(
            roi_gray,
            scaleFactor= 1.5,
            minNeighbors=15,
            minSize=(25, 25),
            )
        
        for (xx, yy, ww, hh) in smile:
            cv2.rectangle(roi_color, (xx, yy), (xx + ww, yy + hh), (0, 255, 0), 2)
               
        cv2.imshow('video', img)

    k = cv2.waitKey(30) & 0xff
    if k == 27: # press 'ESC' to quit
        break

cap.release()
cv2.destroyAllWindows()

faceSmileEyeDetection.py :

import numpy as np
import cv2

# multiple cascades: https://github.com/Itseez/opencv/tree/master/data/haarcascades
faceCascade = cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml')
eyeCascade = cv2.CascadeClassifier('Cascades/haarcascade_eye.xml')
smileCascade = cv2.CascadeClassifier('Cascades/haarcascade_smile.xml')

cap = cv2.VideoCapture(0)
cap.set(3,640) # set Width
cap.set(4,480) # set Height

while True:
    ret, img = cap.read()
    img = cv2.flip(img, -1)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = faceCascade.detectMultiScale(
        gray,
        scaleFactor=1.3,
        minNeighbors=5,      
        minSize=(30, 30)
    )

    for (x,y,w,h) in faces:
        cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
        roi_gray = gray[y:y+h, x:x+w]
        roi_color = img[y:y+h, x:x+w]
        
        eyes = eyeCascade.detectMultiScale(
            roi_gray,
            scaleFactor= 1.5,
            minNeighbors=5,
            minSize=(5, 5),
            )
        
        for (ex, ey, ew, eh) in eyes:
            cv2.rectangle(roi_color, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2)
               
        
        smile = smileCascade.detectMultiScale(
            roi_gray,
            scaleFactor= 1.5,
            minNeighbors=15,
            minSize=(25, 25),
            )
        
        for (xx, yy, ww, hh) in smile:
            cv2.rectangle(roi_color, (xx, yy), (xx + ww, yy + hh), (0, 255, 0), 2)
        
        cv2.imshow('video', img)

    k = cv2.waitKey(30) & 0xff
    if k == 27: # press 'ESC' to quit
        break

cap.release()
cv2.destroyAllWindows()

Gib dazu einfach in einen neuen Terminal python3 faceEyeDetection.py ein und probiere es aus! Ebenso sind eine Erkennung von Gesicht und Lippenpartie (python3 faceSmileDetection.py) sowie die Erkennung einer Kombination aus Gesichts-. Augen- und Lippenpartie (python3 faceSmileEyeDetection.py) möglich.

Raspberry Pi Gesichtserkennung im Test
FaceSmileEyeDetection.py

Herzlichen Glückwunsch, deine Software zur Gesichtserkennung ist nun fertig!

Du kannst diese Technologie für verschiedenste Anwendung anwenden, so nutzen beispielsweise Fotokameras Smile-Detection um Fotos aufzunehmen.

Wir wünschen dir viel Spaß dabei diese Technologie in deine Projekte zu integrieren. Alle benötigten Teile findest du noch einmal hier.

Euer BerryBase-Team

Du bekommst nicht genung von Raspberry Pi DIY Tutorials? Schaue dir hier alle unserer Tutorials an!

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten!

Durchschnittliche Bewertung 4.6 / 5. Anzahl Bewertungen: 9

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Kommentare

  1. Das klingt sehr interessant. Würde das Ganze auch mit Personenerkennung funktionieren? Mich würde eine Lichsteuerung interessieren die entsprechend schaltet, wenn sich eine oder mehrere Person im Raum befinden.
    Dazu interessiert weniger um welche Person es sich handelt. Wichtig ist dabei allerdings, dass die Person noch als im Raum gilt, wenn sie der Kamera den Rücken zukehrt.

  2. Christopher Schuster

    Guten Tag liebes BerryBase Team,

    ist es auch möglich, eine andere Kameraquelle (in meinem Beispiel Doorbird IP Cam) für die Gesichtserkennung zu nutzen?

    Viele Grüße
    Chris

Hinterlasse ein Kommentar

XHTML: Sie können diese Tags verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>