Lampone Pi – Riconoscimento facciale

Innanzitutto! questa settimana sarò al VMworld di Barcellona con un piccolo gruppo di blogger e crack, Chiunque voglia condividere bei momenti dovrebbe inviarmi un'e-mail e vederci lì! Bene, con torrone, Vi lascio questo documento con i passaggi seguiti per ottenere un Raspberry Pi con una fotocamera USB collegata, Riconoscere i volti!

 

Dovremo installare OpenCV e poi attraverso l'uso di uno script impareremo i volti che ci interessano, Gli mostrerò il mio e quello del mio txabala. Con un altro script avvieremo la funzione di riconoscimento e quando rileverà il mio volto eseguirà uno script e uno diverso quando riconoscerà il txabala.

 

La prima cosa sarà installare i prerequisiti OpenCV o qualsiasi altro di cui potremmo aver bisogno:

[linguaggio del codice sorgente=”Pianura”]sudo apt-get install build-essential cmake pkg-config python-dev libgtk2.0-dev libgtk2.0 zlib1g-dev libpng-dev libjpeg-dev libtiff-dev libjasper-dev libavcodec-dev swig unzip vim
sudo apt-get install python-numpy python-opencv
sudo apt-get install python-pip
sudo apt-get install python-dev
sudo pip installare picamera
sudo pip install rpio
sudo apt-get install v4l2ucp v4l-utils libv4l-dev[/Codice sorgente]

 

Nos descargamos OpenCV, lo compilamos y lo instalamos:

[linguaggio del codice sorgente=”Pianura”]WGET HTTP://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.9/opencv-2.4.9.zip
decomprimi opencv-2.4.9.zip
CD OpenCV-2.4.9
cmake -DCMAKE_BUILD_TYPE=RILASCIO -DCMAKE_INSTALL_PREFIX=/usr/locale -DBUILD_PERF_TESTS=OFF -DBUILD_opencv_gpu=OFF -DBUILD_opencv_ocl=OFF
fare
sudo make install[/Codice sorgente]

 

Non male, para el reconocimiento facial, nos descargaremos primeramente una pequeña BD de caras, in modo che abbia una migliore precisione e a cui aggiungeremo il nostro viso o quelli che ci interessano a posteriori. Scarichiamo il DB di esempio del Database AT dei Volti&Laboratori T Cambridge, In precedenza creiamo la cartella in cui metteremo tutti i nostri contenuti e la decomprimiamo:

[linguaggio del codice sorgente=”Pianura”]mkdir /home/pi/recoFacial
cd /home/pi/recoFacial
WGET HTTP://www.cl.cam.ac.uk/Research/DTG/attarchive/pub/data/att_faces.zip
Decomprimi att_faces.zip[/Codice sorgente]

 

Ora scarichiamo questo XML e lo decomprimiamo in /home/pi/recoFacial/:

[linguaggio del codice sorgente=”Pianura”]WGET HTTP://www.bujarra.com/wp-content/uploads/2016/08/haarcascade_frontalface_alt.zip
Decomprimi haarcascade_frontalface_alt.zip[/Codice sorgente]

 

Alla fine del documento, Vi lascio un paio di file python, Uno sarà quello di imparare i volti (capture.py) e l'altro a riconoscerli (reconocimiento.py), Dovrai renderli eseguibili:

[linguaggio del codice sorgente=”Pianura”]chmod +x reconocimiento.py capture.py[/Codice sorgente]

 

E una raccomandazione, Sarebbe aumentare il numero di immagini che cattura per riconoscere il nostro volto quando lo impara, In tal caso, in capture.py, Invece di 20 Immagini predefinite, possiamo mettere ad esempio 100.

 

Per imparare un volto correremo:

[linguaggio del codice sorgente=”Pianura”]python capture.py nomePersona[/Codice sorgente]

 

Per iniziare a rilevare e riconoscere i volti:

[linguaggio del codice sorgente=”Pianura”]Python reconocimiento.py[/Codice sorgente]

 

Riconoscimento facciale Raspberry Pi

 

 

capture.py

[linguaggio del codice sorgente=”Pianura”]
Importa CV2, sistema, Intorpidito, tu
dimensione = 4
fn_haar = 'haarcascade_frontalface_alt.xml’
fn_dir = 'att_faces/orl_faces’
fn_name = sys.argv[1]
percorso = os.path.join(fn_dir, fn_name)
se non os.path.isdir(Sentiero):
Os.mkdir(Sentiero)
(im_width, im_height) = (112, 92)
haar_cascade = cv2. Classificatore a cascata(fn_haar)
webcam = cv2. Acquisizione video(0)

conteggio = 0
mentre conta > 100:
(RVAL, Im) = webcam.read()
im = cv2.flip(Im, 1, 0)
grigio = cv2.cvtColor(Im, CV2. COLOR_BGR2GRAY)
mini = cv2.resize(grigio, (grigio.forma[1] / grandezza, grigio.forma[0] / grandezza))
facce = haar_cascade.detectMultiScale(Mini)
Facce = Ordinate(Facce, chiave=lambda x: x[3])
se facce:
face_i = facce[0]
(x, e, w, h) = [v * Dimensione per V in face_i]
viso = grigio[e:e + h, x:x + w]
face_resize = cv2.resize(faccia, (im_width, im_height))
pin=ordinato([Int(n[:n.trova(‘.’)]) for n in os.listdir(Sentiero)
se n[0]!=’.’ ]+[0])[-1] + 1
cv2.imwrite('%s/%s.png’ % (Sentiero, spilla), face_resize)
cv2.rettangolo(Im, (x, e), (x + w, e + h), (0, 255, 0), 3)
cv2.putText(Im, fn_name, (x – 10, e – 10), CV 2. FONT_HERSHEY_PLAIN,
1,(0, 255, 0))
conteggio += 1
cv2.immostra('OpenCV', Im)
key = cv2.waitKey(10)
tasto if == 27:
rompere
[/Codice sorgente]

 

reconocimiento.py

[linguaggio del codice sorgente=”Pianura”]
Importa CV2, sistema, Intorpidito, tu
dimensione = 4
fn_haar = 'haarcascade_frontalface_alt.xml’
fn_dir = 'att_faces/orl_faces’
# Parte 1: Creando fisherRecognizer
Stampare('Formando…’)
# Crear una lista de imagenes y una lista de nombres correspondientes
(Immagini, Etichette, Nomi, Id) = ([], [], {}, 0)
per (Sottotitoli, dirs, file) in os.walk(fn_dir):
per subdir in dir:
Nomi[Id] = sottodirectory
subjectpath = os.path.join(fn_dir, sottodir)
per il nome del file in os.listdir(subjectpath):
percorso = percorso soggetto + ‘/’ + Filename
lable = id
immagini.append(cv2.imread(Sentiero, 0))
lables.append(Int(etichetta))
id += 1
(im_width, im_height) = (112, 92)
# Crear una matriz Numpy de las dos listas anteriores
(Immagini, Etichette) = [numpy.array(Lis) per lis in [Immagini, Etichette]]
# OpenCV entrena un modelo a partir de las imagenes
modello = cv2.createFisherFaceRecognizer()
model.train(Immagini, Etichette)
# Parte 2: Utilizzo di fisherRecognizer in esecuzione della fotocamera
haar_cascade = cv2. Classificatore a cascata(fn_haar)
webcam = cv2. Acquisizione video(0)
mentre Vero:
(RVAL, cornice) = webcam.read()
frame=cv2.flip(cornice,1,0)
grigio = cv2.cvtColor(cornice, CV2. COLOR_BGR2GRAY)
mini = cv2.resize(grigio, (grigio.forma[1] / grandezza, grigio.forma[0] / grandezza))
facce = haar_cascade.detectMultiScale(Mini)
Per me nel raggio d'azione(Len(Facce)):
face_i = facce[io]
(x, e, w, h) = [v * Dimensione per V in face_i]
viso = grigio[e:e + h, x:x + w]
face_resize = cv2.resize(faccia, (im_width, im_height))
# Cercando di riconoscere il volto
previsione = modello.prevedere(face_resize)
cv2.rettangolo(cornice, (x, e), (x + w, e + h), (0, 255, 0), 3)
# Digitazione del nome del volto riconosciuto
# [1]
Previsione if[1]>500:
cv2.putText(cornice,
'%s – %.0f’ % (Nomi[predizione[0]],predizione[1]),
(x-10, Y-10), CV 2. FONT_HERSHEY_PLAIN,1,(0, 255, 0))
#La variabile facciale avrà il nome della persona riconosciuta
Teste = '%s’ % (Nomi[predizione[0]])
#Nel caso in cui il viso sia quello di Hector
if face == "HECTOR":
os.system("/home/pi/hector.sh")
#Nel caso in cui il viso sia quello di Seila
elif cara == "SEILA":
os.system("/home/pi/seila.sh")
#Se il viso non è familiare, Metti sconosciuto
altro:
cv2.putText(cornice,
'Sconosciuto',
(x-10, Y-10), CV 2. FONT_HERSHEY_PLAIN,1,(0, 255, 0))
#Non c'è nessuno
s.sistema("/home/pi/nadie.sh")
cv2.immostra('OpenCV', cornice)
key = cv2.waitKey(10)

tasto if == 27:
rompere
[/Codice sorgente]

 

 

Post consigliati

Autore

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, Non esitate a contattarmi, Cercherò di aiutarti ogni volta che potrò, Condividere è vivere ;) . Goditi i documenti!!!