Gesichtserkennung mit deinem Raspberry Pi: So funktioniert’s

Titelbild Gesichtserkennung

Titelbild Gesichtserkennung

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:

Raspberry Pi und Kamera.

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

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()

Unser Werksstudent Younes bei der Arbeit. Ihm verdanken wir sehr viel!
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.

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!

Die mobile Version verlassen