- Présentation du projet
- Présentation du matériel
- Présentation de la Raspberry Pi
- Configuration de la Raspberry Pi
- Installation des dépendances
- Personnalisation du programme
- Lancement du programme
- Réalisations supplémentaires
- Documents supplémentaires
- Crédit
- Possibilités supplémentaires
- Liens
- Contact
Dans ce projet nous utilisons une Raspberry Pi 3B+. La caméra de surveillance fonctionne avec OpenCV4 pour la détection de mouvement. La caméra enverra un mail contenant une image prise lors d'un mouvement. En complément, un détecteur de mouvement IR permet de détecter le mouvement d'une personne. La caméra possède aussi un serveur pour voir une vidéo en direct.
La Raspberry Pi 3 B+ possède le Wifi 2,4GHz et 5GHz faciitant la connexion de la Raspberry à internet. La Raspberry possède un port éthernet qui permet d'avoir un débit internet plus fiable pour la Raspberry Pi. Vous pouvez vous référez à la documentation officielle de la Raspberry Pi : présentation.
Nous utilisons aussi le PIR HC-SR501 qui possède une détection de mouvement par infra-rouge.
Pour connecter la caméra, il faut brancher chaque broche du cable de la caméra dans le port Camera de la Raspberry Pi.
Dans ce projet, nous utiliserons les pins 2 - 6 - 26 mais vous pouvez utiliser d'autres ports en suivant la documentation de la Raspberry.
Identifiez chaque port du PIR en soulevant le "petit chapeau" :
Tout à d'abord connectez le pin VCC du PIR sur le pin 2 (VCC 5V) de la Raspberry Pi.
Après connectez GRND du PIR sur le pin 6 (GRND) de la Raspberry Pi.
Pour finir sur le dernier port du PIR (OUT) sur le pin 26 (GPIO 7) de la Raspberry Pi.
Dans ce projet, nous utilisons une Quimat Raspberry Pi Camera IR. Avant il faut activer la caméra sur la Raspberry.
Ouvrez le terminal et exécutez :
sudo raspi-config
Sélectionnez Interface Options
puis Camera
et activez-la et cliquez sur Finish
.
Pour vérifier que la caméra marche entrez :
sudo raspistill -o image.png
Nous avons besoin d'OpenCV4 (Python 3) pour la détection de mouvement d'objet.
Commencez par faire les mises à jour de la Raspberry Pi :
sudo apt-get update && sudo apt-get upgrade
Installez les outils de développement (CMake) :
sudo apt-get install build-essential cmake unzip pkg-config
Installez des bibliothèques d'images et de vidéos :
sudo apt-get install libjpeg-dev libpng-dev libtiff-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
Installez une interface graphique utilisateur backend (GTK) :
sudo apt-get install libgtk-3-dev
Installez un paquet pour GTK :
sudo apt-get install libcanberra-gtk*
Installez deux paquets qui contiennent des optimisations numériques pour OpenCV4 :
sudo apt-get install libatlas-base-dev gfortran
Installation Python 3 :
sudo apt-get install python3-dev
Naviguez jusqu'au dossier Home
de votre Raspberry Pi.
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.0.0.zip
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.0.0.zip
unzip opencv.zip
unzip opencv_contrib.zip
Renommez les répertoires :
mv opencv-4.0.0 opencv
mv opencv_contrib-4.0.0 opencv_contrib
Installez un Python Paquet Manager, pip :
wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py
Installez virtualenv
et virtualenvwrapper
pour un environnement virtuel Python :
sudo pip install virtualenv virtualenvwrapper
sudo rm -rf ~/get-pip.py ~/.cache/pip
Modifiez ~/.profile
:
echo -e "\n# virtualenv and virtualenvwrapper" >> ~/.profile
echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.profile
echo "export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3" >> ~/.profile
echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.profile
Vous pouvez aussi le modifier avec vim ou nano (un éditeur de texte du terminal).
source ~/.profile
Créez l'environnement virtuel OpenCV4 + Python 3:
mkvirtualenv cv -p python3
Vérifiez que vous êtes bien dans l'environnement cv
workon cv
Installez le paquet Python prérequis pour OpenCV, NumPy :
pip install numpy
cd ~/opencv
mkdir build
cd build
Exécution CMake pour OpenCV4 :
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D ENABLE_NEON=ON \
-D ENABLE_VFPV3=ON \
-D BUILD_TESTS=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D BUILD_EXAMPLES=OFF ..
Vérifiez que dans le terminal vous avez Non-free algorithms: YES
.
Dans Python 3
:
Interpreter: .../.virtualenvs/cv/...
numpy: .../.virtualenvs/cv/...
Compilation d'OpenCV4 :
make -j4
Si des erreurs apparaissent vous pouvez seulement faire make
.
Installation d'OpenCV4
sudo make install
sudo ldconfig
Créez un lien symbolique depuis l'installation d'OpenCV dans le répertoire system site-packages vers votre environnement virtuel :
cd ~/.virtualenvs/cv/lib/python3.5/site-packages/
ln -s /usr/local/python/cv2/python-3.5/cv2.cpython-35m-arm-linux-gnueabihf.so cv2.so
OpenCV fonctionne sur un environnement virtuel. Pour y accéder utilisez les commandes suivantes :
source ~/.profile
workon cv
Fask est un microframework pour des applications web Python, pour le routage d'URL de site.
pip install flask
PiCamera est un paquet qui permet d'avoir une interface pour le module caméra Raspberry Pi pour Python 3.
pip install picamera
Imutils est une série de fonctions de traitement d'image plus simple pour OpenCV4 et Python 3.
pip install imutils
Flask-BasicAuth est une extension Flask qui permet de protéger une page web grâce à une authentification par accès de base HTTP.
pip install Flask-BasicAuth
Vous pouvez modifier la partie main
en modifiant l'authentification au serveur de la raspberry pi :
app.config['BASIC_AUTH_USERNAME'] = 'admin' #Changez l'utilisateur
app.config['BASIC_AUTH_PASSWORD'] = 'admin' #Changez le mot de passe
app.config['BASIC_AUTH_FORCE'] = True
Dans le main, la modification de paramètres :
email_update_interval = 10 #N'envoie un courriel qu'une seule fois dans cet intervalle de temps
video_camera = VideoCamera(flip=True) #Crée un objet caméra, retournez verticalement
object_classifier = cv2.CascadeClassifier("models/facial_recognition_model.xml") #OpenCV classifier
Vous pouvez aussi utiliser d'autres objets de détection en changeant "models/facial_recognition_model.xml"
dans object_classifier = cv2.CascadeClassifier("models/facial_recognition_model.xml")
par les autres objets de détection qui sont dans le dossier models
.
Modifiez aussi les informations du mail :
fromEmail = 'adressemaile@gmail.com' #Entrez une adresse mail Google d'envoie du mail
fromEmailPassword = 'mdp' #Entrez le mot de passe du compte Google (Pas de double authentification)
toEmail = 'adressemaild@gmail.com' #Entrez une adresse mail de réception
Lancez le programme avec la commande :
python main.py
Vous pouvez choisir quel type de reconnaissance vous souhaitez :
main.py
: reconnaissance avec la caméra (OpenCV) et envoi d'un mail avec prise d'une photo du mouvementmain2.py
: reconnaissance avec le PIR et envoi d'un mail avec textemain2.1.py
: reconnaissance avec le PIR et envoi d'un mail et prise d'une photo du mouvementmain3.py
: reconnaissance avec le PIR et la caméra (facial) et envoi d'un mail et prise d'une photo du mouvement
On peut voir le flux vidéo en direct en allant sur http://<ip_raspberry>:5000
dans un navigateur internet sur le réseau local.
Pour visionner depuis l'extérieur, vous pouvez ouvrir un port de votre box pour la Raspberry : http://<ip_box>:<port_ouvert>
(Méthode non sécurisée).
De plus, pour un fonctionnement optimal, vous pouvez utiliser une ip statique pour la Raspberry pour éviter de rechercher l'ip à chaque fois.
Pour connaître l'adresse ip de la Raspberry Pi vous pouvez taper dans le terminal : hostname -I
.
Début de l'application un prototype de l'application faite sur Adobe XD.
Prototype (Adobe XD)
Prototype (zip --> png)
Prototype (zip --> png(iPhone - iPad - Android (Mobile et Tablette))
Prototype Final
Développement de l'application avec Ionic
Réalisation du prototype de support sur SolidWorks puis son impression 3D grâce à l'imprimante 3D Ultimaker.
Plan de la carte Raspberry Pi 3B+
Plan de la boite Raspberry Pi 3B+
Fichier SolidWorks du support (zip)
Manuel d'utilisation
Cahier des charges
Planning
Compte Rendu
Nous avons aussi la possibilité d'envoyer une notification push sur votre téléphone (iOS ou Android) en utilisant IFTTT.
Intégrez l'API de IFTTT dans votre code Python (vous pouvez la trouver en recherchant Webhooks dans IFTTT).
Par la suite, vous devez créer une Applet de la manière suivant : If Webhooks
then Notifications
.
Vous pouvez sinon vous utiliser le bot IFTTT comme par exemple sur Messenger pour vous envoyer des messages lors de la détection de mouvement.
Projet de première année STPI à l'INSA Centre Val de Loire.
Membre de l'équipe :
- Alexis Brunet
- Matthieu Maindroux
- Omar Hadhar
- Roman Magnier
Mail : projetcamera2019@gmail.com