Dans le tutoriel précédent, nous avons vu comment piloter (afficher l’image en live, enregistrer un cliché et un clip vidéo à l’aide du clavier) sur un Raspberry Pi sous Raspbian. Dans ce tutoriel, nous allons faire la même chose mais sur un Orange Pi Lite (version WiFi). Il n’est malheureusement pas possible d’utiliser la librairie Picamera qui a été conçue pour fonctionner exclusivement pour le Raspberry Pi. Nous allons donc devoir utiliser OpenCV qui est une librairie Open Source extrêmement puissante.

Matériel utilisé

Comme nous l’avons vu dans cet article, le connecteur CSI de l’Orange Pi est différent de celui du Raspberry Pi. Je me suis procuré la caméra 2MP vendu par Orange Pi (environ 6€ sur Aliexpress). La qualité de l’image est loin d’égaler celle de la caméra v2.1 8MP du Raspberry Pi, mais pour débuter, le rapport qualité/prix est imbattable.

orange pi lite h3 computer board Orange Pi Lite

11,50€ (+ 3,50€ de frais de port environ)

orange pi alimentation 5v 3a jack Alimentation 5V – 3A

Environ 11€

Ou un cable USB, environ 2,50€

carte sd Armbian sur carte SD 8Go classe 10

A partie de 6,90€

camera orange pi 2MP csi Caméra carte 2MP d’origine Orange Pi

environ 7€ (port gratuit)

Préparation de l’environnement

Commençons par préparer l’environnement.

Mise à jour du système Armbian

Sauf si vous venez de le faire, le mieux est de toujours commencer par une petite mise à jour du système

sudo apt-get update
sudo apt-get upgrade

Installation de python 2.7

Une fois le système à jour, on peut installer Python 2.7. Pourquoi pas Python 3 me direz-vous ? C’est possible sans aucun problème. A vous de choisir en fonction de votre niveau. Si vous débutez, vous trouverez beaucoup plus d’exemples sur Python 2.7.

sudo apt-get install python-dev

On en profite pour installer le gestionnaire de paquets pour python (pip). En effet, tous les dépôts risquent de ne pas être déclarés dans les sources de la distribution Armbian. Excécutez la commande suivante pour installer la commande pip :

sudo apt-get install python-pip

Installation d’OpenCV pour Python

On trouve beaucoup de tutoriels sur internet qui expliquent comment installer OpenCV (sur Raspberry Pi ou Orange Pi) dans un environnement virtuel à partir du code source. C’est une solution, mais pour l’avoir testé, c’est long (une grosse demi-journée de compilation sur mon Orange Pi Lite) et surtout l’utilisation de l’environnement virtuel est fastidieuse, surtout pour si vous débutez. Ici, on va suivre le chemin le plus court, on va simplement installer la librairie avec cette simple commande

sudo apt-get install python-opencv

Acceptez toutes les questions posées.

Programme test : affichage en direct de la caméra de l’Orange Pi

Placez vous dans le répertoire de votre choix et ouvrez un nouveau document, par exemple testcam_orangepi.py. Collez le code ci-dessous.

import cv2
c = cv2.VideoCapture(0)

while(1):
  _,f = c.read()
  cv2.imshow('Camera Orange Pi',f)
  k = cv2.waitKey(5)
  if k==1048603:
      #Esc key to stop, or 27 depending your keyboard
      #Touche ESC appuyee. le code peut dependre du clavier. Normalement 27
      break
  elif k==-1:
      continue
  #uncomment to know the code of of the key pressed
  #Decommenter pour connaitre le code de la touche pressee 
  #else:
      #print k 

cv2.destroyAllWindows()

Que fait ce code ?

On appel la librairie OpenCV 2 (import cv2)

On créé un objet qui capture le flux vidéo envoyé par la caméra (0), c’est à dire celle qui est reliée à /dev/video0.

c = cv2.VideoCapture(0)

On affiche l’image de la caméra jusqu’à ce que la touche Escape soit pressée

On lit le flux vidéo (c.read) et on le stocke dans la variable f  (_,f = c.read()).

Ensuite on affiche le flux vidéo à l’aide de la fonction imshow qui prend comme paramètre :

  • Le titre de la fenêtre dans laquelle sera diffusé le flux vidéo
  • La variable qui contient le flux vidéo
cv2.imshow('Camera Orange Pi',f)

Premier test

Enregistrez le script (CTRL+X puis Y) et lancez le

python testcam_orangepi.py

Ah, ça ne fonctionne pas !

libv4l2: error setting pixformat: Operation not permitted
HIGHGUI ERROR: libv4l unable to ioctl S_FMT
libv4l2: error setting pixformat: Operation not permitted
libv4l1: error setting pixformat: Operation not permitted
libv4l2: error setting pixformat: Operation not permitted
libv4l1: error setting pixformat: Operation not permitted
HIGHGUI ERROR: libv4l unable to ioctl VIDIOCSPICT

OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file /usr/local/opencv-2.4.10/modules/highgui/src/window.cpp, line 261
Traceback (most recent call last):
  File "testcv.py", line 7, in <module>
    cv2.imshow('e2',f)
cv2.error: /usr/local/opencv-2.4.10/modules/highgui/src/window.cpp:261: error: (-215) size.width>0 && size.height>0 in function imshow

Pourquoi ça ne marche pas  ?

Tout d’abord, on sait que la librairie cv2 (OpenCV) fonctionne. C’est déjà une bonne nouvelle, nous ne serons pas obligés de tout compiler à partir des sources ! En googlisant l’erreur (libv4l2: error setting pixformat: Operation not permitted), on tombe rapidement sur cet article du concepteur du script vidcopy qui permet de recopier le flux vidéo produit par la librairie v4l2loopback.

Installation de v4l2loopback et vidcopy

On va simplement suivre le tutoriel de Leonardo Lontra.

Installation de v4l2loopback

Inscrivez-vous à la newsletter hebdomadaire

Aucun spam et aucun autre usage ne sera fait de votre email. Vous pouvez vous désinscrire à tout moment.

Promos à ne pas louper

6
Poster un Commentaire

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

  S’abonner  
Notifier de
Migui Pda

Bonjour, en effet, deux tests à effectuer pour finaliser cet excellent article : 1) de la reconnaissance de movement pour ne garder que les piétons (ainsi, en la plaçant comme judas sur la porte, on ne tiens pas compte des voitures qui passent, mais seulement des passants, voire des gens se présentant à la porte). Petit sous-test : mémoriser les passants/visiteurs récurant pour les definer comme relevant ou non relevant (ainsi, on ne tient pas compte des voisins, mais bien des visiteurs curieux qui s’intéressent à savoir si il y a quelqu’un chez soi:autement dit, des voleurs)) 2) la reconnaissance… Lire la suite »

Bonjour Migui. Je suis d’accord. On pourrait développer une version DIY de la caméra de surveillance Netatmo Presence (amzn.to/2mj5yZu). Pour le moment, je dois mettre mes compétences à jour en vision industrielle et en analyse d’image. Ca fait quelques années que je n’y ai pas touché. C’est dans un coin de ma tête 😉 A très bientôt.

Migui Pda

Bonjour,

voice déjà une partie de la réponse quant à la capture de detection de movement avec un envoi vers Dropbox (on peut alors porter cela vers un serveur perso) avec lequel on peut peut-être jouer avec IFTTT pour envoyer un signal (sms, mail, vocal dans la maison, …) signalant une detection 😉

http://www.pyimagesearch.com/2015/06/01/home-surveillance-and-motion-detection-with-the-raspberry-pi-python-and-opencv/

Sinon il faut creuser le travail effectué par Robin David :
http://www.robindavid.fr/opencv-tutorial/motion-detection-with-opencv.html

https://github.com/RobinDavid/Motion-detection-OpenCV/blob/master/MotionDetector.py

Ou autre 😉
http://blog.cedric.ws/opencv-simple-motion-detection
https://github.com/cedricve/motion-detection

A+

Super, merci beaucoup. Tu vas plus vite que moi sur le sujet :-). Je vais regarder tout ça de près. Bon week end en tout cas.

Migui Pda

Bonjour,

désireux de faire advancer le chmilblik, je viens de découvrir cet article de sept étapes pour faire tourner cela sur un RPi (donc très certainement idem pour OPi, BPi, …) :

https://thinkrpi.wordpress.com/2013/05/22/opencv-and-camera-board-csi/

A+

Merci pour l’info. Oui ça fonctionne sur OPI https://www.projetsdiy.fr/orange-pi-armbian-piloter-camera-python-opencv/ Je me suis arrêté à l’étape 6 🙂

Domotique et objets connectés à faire soi-même