Nell’articolo di oggi vedremo come implementare un sistema di riconoscimento delle espressioni facciali e delle “emozioni” con una board Raspberry.
Applicheremo un modello pre-addestrato per riconoscere l’espressione facciale di una persona utilizzando la Raspberry Pi Camera tramite video in tempo reale.
Questo tipo di sistema di riconoscimento delle espressioni facciali può essere utilizzato per numerose applicazione, tra cui lo studio dei vari comportamenti umani in un luogo.
I materiali da utilizzare sono i seguenti:
- Raspberry Pi
- Pi camera
- Tastiera e Mouse
- Monitor
- Connessione a internet
INSTALLAZIONI PRELIMINARI
ATTENZIONE: questa procedura è valida solo per la Raspberry Pi Camera, non funzionerà con una webcam USB
Apri il terminale.
Per sicurezza effettuiamo un update:
1 2 |
sudo apt-get update sudo apt-get upgrade |
INSTALLAZIONE RASPBERRY PI CAMERA
Ho scritto una guida approfondito a riguardo, per leggerla potete utilizzare il seguente link: Come installare e configurare la Raspberry Pi Camera
Quali passaggi eseguire per il riconoscimento delle espressioni facciali?
Ci sono tre passaggi che implementeremo all’interno del codice
Passaggio 1: rileva i volti nel video real-time in ingresso.
Passaggio 2: trova la regione di interesse (ROI) dei volti.
Passaggio 3: applicare il modello di riconoscimento dell’espressione facciale per elaborare l’espressione della persona.
Useremo 6 (sei) “etichette” diverse: ‘Angry’, ‘Fear’, ‘Happy’, ‘Neutral’, ‘Sad’, ‘Surprise’
Installazione di OpenCV
OpenCV è una libreria open-source, scritta in C, per lo streaming video real-time, ovvero la Computer Vision e gira sotto Windows, Linux e MacOS X.
La libreria permette una semplice gestione di immagini trattandole come “matrici di pixel“, alle quali è possibile accedervi in maniera molto semplice e rapida. Prima di cimentarci nella vera e propria Computer Vision, che è un ambito di una vastità non indifferente, diamo una sguardo a quella che si può definire l’Image Processing, cioè l’Elaborazione delle Immagini attraverso la libreria in questione.
Digita i seguenti comandi per installare le dipendenze necessarie per installare OpenCV
1 2 3 4 5 6 |
sudo apt-get install libhdf5-dev sudo apt-get install libhdf5-serial-dev sudo apt-get install libatlas-base-dev sudo apt-get install libjasper-dev sudo apt-get install libqtgui4 sudo apt-get install libqt4-test |
Successivamente, digita il seguente comando per installare OpenCV:
1 |
pip3 install opencv-contrib-python==4.1.0.25 |
Installazione Tensorflow e Keras
Prima di installare Tensorflow e Keras, installa le seguenti librerie
1 2 3 4 5 6 7 8 9 10 |
sudo apt-get install python3-numpy sudo apt-get install libblas-dev sudo apt-get install liblapack-dev sudo apt-get install python3-dev sudo apt-get install libatlas-base-dev sudo apt-get install gfortran sudo apt -get install python3-setuptools sudo apt-get install python3-scipy sudo apt-get update sudo apt-get install python3-h5py |
Installa keras
Keras è una libreria open source (con licenza MIT) scritta in Python, frutto principalmente del lavoro dello sviluppatore di Google François Chollet nell’ambito del progetto ONEIROS (Open-ended Neuro-Electronic Intelligent Robot Operating System). Il 28 marzo 2015 è stata rilasciata la prima versione di questo software multipiattaforma. Lo scopo della libreria è permettere la configurazione rapida di reti neurali. Keras non funge da framework ma da interfaccia di facile utilizzo (API) per l’accesso e la programmazione a diversi framework di apprendimento automatico. Tra i vari framework supportati da Keras troviamo Theano, Microsoft Cognitive Toolkit (in precedenza CNTK) e TensorFlow.
1 |
pip3 install keras |
Installa tensorflow 2.1.0
TensorFlow è una libreria software open source usata nell’apprendimento automatico ( machine learning ). Il framework può essere implementato su diverse piattaforme.
1 2 3 |
cd Desktop mkdir tf_pi cd tf_pi |
Poi digita
1 2 3 |
python3 -m pip install virtualenv virtualenv env source env/bin/activate |
Poi digita i vari comandi:
1 2 3 4 5 6 7 8 |
sudo apt-get install -y libhdf5-dev libc-ares-dev libeigen3-dev python3 -m pip install keras_applications==1.0.8 --no-deps python3 -m pip install keras_preprocessing==1.1.0 --no-deps python3 -m pip install h5py==2.9.0 sudo apt-get install -y openmpi-bin libopenmpi-dev sudo apt-get install -y libatlas-base-dev python3 -m pip install -U six wheel mock python3 -m pip uninstall tensorflow |
Poi installa tensorflow:
1 2 3 |
wget https://github.com/Qengineering/Tensorflow-Raspberry-Pi/raw/master/tensorflow-2.1.0-cp37-cp37m-linux_armv7l.whl # install TensorFlow sudo -H pip3 install tensorflow-2.1.0-cp37-cp37m-linux_armv7l.whl |
Riavvia la scheda
1 |
sudo reboot |
Poi riapri il terminale e digita:
1 2 3 |
cd Desktop cd tf_pi source env/bin/activate |
Verifichiamo se tutto è ok digitando:
1 2 3 |
python3 import tensorflow tensorflow.__version__ |
Scarichiamo lo script
Lo script per il riconoscimento delle espressioni facciali può essere scaricato utilizzando il link sottostante:
Download della directory del progetto di riconoscimento delle espressioni facciali Raspberry Pi
La cartella del progetto scaricato contiene una sottocartella (Haarcascades), un file Python (emotion1.py) e il modello (ferjj.h5).
Avvia il codice importando i pacchetti menzionati di seguito
1 2 3 4 5 |
from tensorflow.keras import Sequential from tensorflow.keras.models import load_model import cv2 import numpy as np from tensorflow.keras.preprocessing.image import img_to_array |
Successivamente, è necessario caricare il modello pre-addestrato (fornito nella cartella del progetto) utilizzando la funzione load_model() importata dalla libreria Keras. Nella riga successiva viene creato un dizionario e vengono assegnate le 6 etichette..
1 2 3 4 |
# We have 6 labels for the model class_labels = {0: 'Angry', 1: 'Fear', 2: 'Happy', 3: 'Neutral', 4: 'Sad', 5: 'Surprise'} classes = list(class_labels.values()) # print(class_labels) |
La funzione sottostante serve per progettare il testo in sovrimpressione sui riquadri dell’immagine elaborata.
1 2 3 4 5 6 |
# This function is for designing the overlay text on the predicted image boxes. def text_on_detected_boxes(text,text_x,text_y,image,font_scale = 1, font = cv2.FONT_HERSHEY_SIMPLEX, FONT_COLOR = (0, 0, 0), FONT_THICKNESS = 2, rectangle_bgr = (0, 255, 0)): |
Per quanto riguarda il resto, per ogni porzione di codice viene definito il suo corrispettivo funzionamento.
TEST
Testiamo lo script.
Avvia lo script Python e se tutto va bene (potrebbe capitare molto probabilmente che ci siano problemi, basta che una sola dipendenza rimabga non risolta…) troverai una finestra che si apre con il video real-time. Una volta che il Raspberry Pi rileva l’espressione facciale il risultato dell’elaborazione sarà visuallizato in un riquadro verde.
Possibili problemi
Se ci sono problemi con lo script alcune possibili soluzioni potrebbero essere le seguenti.
Apri il terminale e digita:
1 |
pip3 install tensorflow |
Prova anche:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# get a fresh start $ sudo apt-get update $ sudo apt-get upgrade # remove old versions, if not placed in a virtual environment (let pip search for them) $ sudo pip uninstall tensorflow $ sudo pip3 uninstall tensorflow # install the dependencies (if not already onboard) $ sudo apt-get install gfortran $ sudo apt-get install libhdf5-dev libc-ares-dev libeigen3-dev $ sudo apt-get install libatlas-base-dev libopenblas-dev libblas-dev $ sudo apt-get install openmpi-bin libopenmpi-dev $ sudo apt-get install liblapack-dev cython $ sudo pip3 install keras_applications==1.0.8 --no-deps $ sudo pip3 install keras_preprocessing==1.1.0 --no-deps $ sudo pip3 install -U --user six wheel mock $ sudo -H pip3 install pybind11 $ sudo -H pip3 install h5py==2.10.0 # upgrade setuptools 40.8.0 -> 52.0.0 $ sudo -H pip3 install --upgrade setuptools # download the wheel $ wget https://github.com/Qengineering/Tensorflow-Raspberry-Pi/raw/master/tensorflow-2.1.0-cp37-cp37m-linux_armv7l.whl # install TensorFlow $ sudo -H pip3 install tensorflow-2.1.0-cp37-cp37m-linux_armv7l.whl # and complete the installation by rebooting $ sudo reboot |
Buon divertimento e buona sperimentazione!
Join our groups onTelegram…