Pierre Porcheret




Voir la liste des articles



05 11 2014


Reconnaissance faciale avec camera raspberry

 Je voulais une solution simple qui puisse reprendre mon fontionnement actuel à savoir :

Camera -> Enregistrement de l'image (en jpg) dans un dossier -> stream de cette image via http

Et le tout sans utilisé (trop) de ressources (j'arrive a environ 30% du CPU avec des pics de charges).

Apres avoir tester dans tous les sens le tutorial de Pierre

En attendnat de passe le Step 3, j'ai mis en place un solution secondaire, la reconnaissance faciale via pyhon.

Je n'ai pas trouvé de script tout fait pour récupérer l'image du module camera, l'analyser avec opencv et la ressortir en jpg pour la streamer avec ma solution actuelle.

Prérequis :

#Installer les paquet Opencv (python)
aptitude install libcv-dev libopencv-dev libcv2.3 python-pip python-dev
#Installation du module pour la caméra raspberry
pip install picamera

#Récupération du cascade (fichier d'algo pour la reconnaissance d'un visage)
wget https://github.com/shantnu/FaceDetect/blob/master/haarcascade_frontalface_default.xml

Ecriture du script :

nano script.py
 


import cv2
import sys
import numpy as np
import picamera
import io

#Si vous voulez entrer le lien vers l'algo au moment de lancer le script : python $prog.py /lien/vers/algo.xml"
#cascPath = sys.argv[1]

#lien vers le fichier d'algo
cascPath = "haarcascade_frontalface_default.xml"
faceCascade = cv2.CascadeClassifier(cascPath)

while True:

        data = io.BytesIO()
        # Parametre de la camera (resolution, format d'image)
        with picamera.PiCamera() as camera:
                camera.resolution = (320, 240)
                camera.capture(data, format='jpeg')

        data = np.fromstring(data.getvalue(), dtype=np.uint8)
        # Recupere l'image de la camera (frame) et l'analyse.
        frame = cv2.imdecode(data, 1)
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

        faces = faceCascade.detectMultiScale(
                gray,
                scaleFactor=1.1,
                minNeighbors=5,
                minSize=(30, 30),
                flags=cv2.cv.CV_HAAR_SCALE_IMAGE
        )

        # Dessine un rectange autour du visage
        for (x, y, w, h) in faces:
            cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 1)

        # Decommentez si vous voulez voir une sortie sur l'ecran du raspberry
#       cv2.imshow('Video', frame)
        #Enregistre l'image pour etre streamer
        cv2.imwrite('/data/mjpg/test1.jpg', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
                break
# Nettoyage
cv2.destroyAllWindows()
camera.close()
 


Ressources :

http://thinkrpi.wordpress.com/2013/05/22/opencv-and-camera-board-csi/
https://realpython.com/blog/python/face-detection-in-python-using-a-webcam/
https://learn.adafruit.com/raspberry-pi-face-recognition-treasure-box/overview


 


categorie :