Publié le 14 janvier 2014 - par

Picamera pour piloter intégralement la caméra de votre Raspberry Pi en Python

picamera_250Si vous possédez un module caméra pour votre Raspberry Pi, vous avez certainement utilisé raspistill et raspivid, qui sont les outils disponibles en ligne de commande pour mettre en œuvre la caméra.

Dave JONES, administrateur de base de données, développeur et gourou SQL basé à Manchester a développé l’équivalent complet de ces deux programmes en Python.

Cela signifie que vous pouvez accéder au module de la caméra directement à partir d’un script Python, sans utiliser os.system ou l’exécution d’un sous-processus.

La mise en œuvre de picamera est simple et c’est vraiment une magnifique bibliothèque à utiliser. Elle fonctionne très bien pour des démonstrations à l’aide de la caméra du Raspberry Pi, ainsi que pour des applications réelles. L’attrait pour le Raspberry Pi, est en grande partie due au fait qu’il est possible de travailler sur des projets électroniques embarqués sans avoir à connaître les langages de bas niveau ou devoir programmer un microprocesseur. Au contraire, vous avez le choix d’une gamme de langages de haut niveau accessibles – tels que Python – et c’est une extension de ce genre qui ouvre un monde infini de possibilités pour une grande variété de projets !

Le module en Python est disponible dans sa version 1.0 sur Github mais il est beaucoup plus simple de l’installer directement depuis Raspbian. Pensez à mettre votre distribution à jour dans un premier temps :

pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get upgrade
pi@raspberrypi ~ $ sudo apt-get install python3-picamera
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Paquets suggérés :
python-picamera-docs
Les NOUVEAUX paquets suivants seront installés :
python3-picamera
0 mis à jour, 1 nouvellement installés, 0 à enlever et 1 non mis à jour.
Il est nécessaire de prendre 52.3 ko dans les archives.
Après cette opération, 285 ko d'espace disque supplémentaires seront utilisés.
Réception de : 1 http://archive.raspberrypi.org/debian/ wheezy/main python3-picamera armhf 1.0-1 [52.3 kB]
52.3 ko réceptionnés en 1s (44.4 ko/s)
Sélection du paquet python3-picamera précédemment désélectionné.
(Lecture de la base de données... 65651 fichiers et répertoires déjà installés.)
Dépaquetage de python3-picamera (à partir de .../python3-picamera_1.0-1_armhf.deb) ...
Paramétrage de python3-picamera (1.0-1) ...
pi@raspberrypi ~ $

A partir de maintenant, les mises à jour seront faites automatiquement sur picamera quand vous mettrez votre système à jour.

Dave a présenté son module lors du Raspberry Pi jam en novembre 2013 à Manchester :

Dave a également montré la mise en œuvre d’une application web basée sur picamera. Dans cette vidéo, il déclare : « C’est un cas où disposer d’une bibliothèque est particulièrement utile. Si nous faisions cela, disons avec raspistill et raspivid, si vous souhaitez modifier la luminosité de votre aperçu, il faut arrêter le programme, modifier la ligne de commande, puis redémarrer le programme. Ici, nous n’avons qu’à « configurer une propriété ». C’est pourquoi une bibliothèque est préférable pour une application interactive de ce genre. raspistill et raspivid conviennent très bien pour faire ce pour quoi ils ont été prévus. Mais ils ne sont pas adaptés à la construction de ce type d’application. Si vous voulez de l’interactivité, utilisez une bibliothèque. « 

Autant l’installation de la bibliothèque est facile, autant la documentation en ligne est vraiment bien faite (mais en anglais pour l’instant).

L’installation est bien détaillée dans les différents cas possibles, aussi bien avec Python 2.7 qu’avec Python 3.2 !

Une prise en main rapide vous propose quelques exemples faciles à mettre en oeuvre avec picamera, par exemple lancer une prévisualisation de 10 secondes :

import time
import picamera

camera = picamera.PiCamera()
try:
    camera.start_preview()
    time.sleep(10)
    camera.stop_preview()
finally:
    camera.close()

L’exemple suivant montre qu’il est possible de régler la luminosité « en direct » :

import time
import picamera

with picamera.PiCamera() as camera:
    camera.start_preview()
    try:
        for i in range(100):
            camera.brightness = i
            time.sleep(0.2)
    finally:
        camera.stop_preview()

Plutôt simple non ?
Vous avez également à votre disposition un tas de recettes de base ainsi que des solutions plus avancées. Vous saurez par exemple enregistrer l’image dans un fichier, l’envoyer dans un flux , l’envoyer à OpenCV ou encore capturer une image brute (RAW) pour traitement ultérieur…

Enfin la référence de l’API vous procure toutes les informations nécessaires à la mise en œuvre de toutes les fonctionnalités de la classe picamera.

Comme picamera est disponible sur pypi Dave a bénéficié de nombreux retours sur les forums ainsi que de rapports de bugs très détaillés. Il a aussi reçu l’aide de James Hughes, l’auteur de  raspistill, et celle d’Alex Bradbury lors de la préparation du paquet pour Raspbian.

Si vous utilisez picamera, n’hésitez pas à faire part de vos impressions dans les commentaires ci-dessous, et pourquoi pas nous proposer vos réalisations ?

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. Auteur de plusieurs livres sur le Raspberry Pi publiés aux Editions ENI.

31 réflexions au sujet de « Picamera pour piloter intégralement la caméra de votre Raspberry Pi en Python »

  1. Ping : Picamera pour piloter intégralement la c...

  2. Ping : Picamera pour piloter intégralement la c...

  3. Ping : Picamera pour piloter intégralement la c...

  4. eleve

    Bonjour,
    j’ai un probleme, avec ma classe nous devont réaliser un projet d’envoyer un ballon sonde a 30 km d’altitude avec un raspberry pi.
    La camera raspberry pi enregistrera la video du vol sur la carte sd mais mon probleme se situe qu’il faut que je fasse des captures d’images de la video afin de les envoyer a la station terrestre pour que l’on puisse voir l’acension du ballon mais est ce que un tel programme existe en c?

    Répondre
  5. Eddie

    Bonjour,

    Moi je cherche à faire une class mais avec un moteur PAP pour faire un time lapse. J’ai vraiment du mal à associer les 2.
    Les scripts marchent indépendamment mais pas ensemble. Je dois donc passer par une class mais j’ai du mal à comprendre..

    Une astuce ?

    Répondre
      1. tilke

        bonjour
        Merci de répondre si vite , alors pour moi j ai bien le voyant qui s allume mais pas de visu ni de fichier .

        import time
        import picamera

        camera = picamera.PiCamera()
        try:
        camera.start_preview()
        time.sleep(10)
        camera.stop_preview()
        finally:
        camera.close()

        Répondre
        1. François MOCQ Auteur de l’article

          commencez déjà par une commande du style raspistill -o test.jpg
          voir déjà si ça crée un fichier
          après raspistill -v -o test.jpg il devrait y avoir une prévisu

          quand tout ça ça fonctionne vous pouvez passer au Python sinon ça ne sert à rien de continuer
          testez déjà par étape ça aide à déterminer d’où vient la panne
          cordialement
          françois

          Répondre
          1. tilke

            L’action me capture bien l’image et me la met bien dans le dossier home mais pas de previsu blizzard merci quand même.

            ps : sympas votre site

            Répondre
      2. Claude

        Bonjour,
        J’ai fait votre commande et obtenu enfin une image,merci!
        Ou est-il possible de trouver une doc sur la façon d’organiser les commandes sous raspistill et raspivid.
        Je suis sous Jessie.

        Claude

        Répondre
  6. Gregoire

    Bonjour,

    Je viens d’installer une raspberry Pi A+ avec une caméra en suivant tout votre tutoriel.
    Mais comment faire pour démarrer l’application de la caméra ?

    Merci

    Répondre
  7. Gregoire

    Super !! Merci.
    A noter que dans mon cas, je dois me placer dans le répertoire Pictures, sinon, mon raspberry refuse d’ecrire quoique ce soit.

    Merci encore.

    Répondre
  8. Gregoire

    Bonjour,

    Sur ma framboise, j’ai python 2 et python 3.
    Comment faire pour mettre à jour Python 3 ?
    Et pour appeler le programme que j’ai écrit avec Python 3, et pas python 2 ?

    Merci.

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour Grégoire
      fastoche : tapez python => lance python 2
      tapez python3 => lance python 3 🙂
      exemple :
      pi@raspberrypi:~ $ python
      Python 2.7.9 (default, Mar 8 2015, 00:52:26)
      [GCC 4.9.2] on linux2
      Type « help », « copyright », « credits » or « license » for more information.
      >>> exit()

      pi@raspberrypi:~ $ python3
      Python 3.4.2 (default, Oct 19 2014, 13:31:11)
      [GCC 4.9.1] on linux
      Type « help », « copyright », « credits » or « license » for more information.
      >>>

      ça vous va ?
      cordialement
      François

      Répondre
  9. Gregoire

    Bonjour,

    Suite à vos conseils et recherche sur les forums, j’ai fait un petit programme en python qui me permet avec les 5 boutons de mon écran de faire :
    1er bouton : prise de photo enregistrée sur une clef avec increment du nom de 1.jpg à…..
    2eme : n&b ou couleur
    3eme : contraste plus ou moins fort
    4eme : arret du programme
    5eme : arret complet (shutdown)

    Mais j’ai encore quelques soucis.
    Le premier est que la prévisualisation est saccadée, alors que si je lance un « preview » seul, c’est fluide
    Mon second problème est que, bien que mon image prévisualisée prend tout mon écran, l’image prise est plus grande.
    Comment faire pour résoudre ces petits problèmes ?

    Enfin, à chaque fois que j’arrete mon programme, la numérotation de mes photos redemarre à 1.jpg., donc j’efface mes photos dejà sur la clef.
    Comment faire pour redemarrer à partir de la dernière photo ?

    Merci.

    Pour ceux que ca interesse, je laisse à dispo mon programme à qui le voudra.

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour sur
      https://www.raspberrypi.org/documentation/raspbian/applications/camera.md
      ils parlent de la taille du preview mais c’est avec raspivid ou raspistill
      –fullpreview, -fp Full Preview mode
      Il faudrait voir la doc de PiCamera…
      Pour l’effacement si le programme numérote à partir de 1 c’est normal 🙂
      Il faudrait lire les fichiers présents dans le répertoire, noter le numéro de diapo le plus élevé et démarrer la numérotation au nombre suivant.
      Autre possibilité : horodater les images qui auront alors un nom unique composé de la date et de l’heure d’enregistrement… 20160227_16-14.jpg par exemple
      cordialement
      François

      Répondre
  10. Gregoire

    Bonjour,

    Pour horodater, il faut que je mette mon raspi à l’heure à chaque démarrage, non ?
    Mais justement, comment faire pour lire les fichiers présents dans le répertoire, noter le numéro de diapo le plus élevé et démarrer la numérotation au nombre suivant ? Quel est le code ?

    Pour la fluidité du preview, rien n’est dit dans votre lien.
    Par contre, j’ai entendu parler de thread. Dans mon cas, ca pourrait etre utile ?

    Merci.

    Répondre
  11. Frank

    bonjour… svp j’ai une préoccupation.. comment faire pour prendre une série de 4 ou 8 photos avec picamera,les enregistrés et les mergées et les groupeés ensemble pour ne faire qu’une seule photo.. en réalité j’ai envie de faire un photomaton et je bloque vraiment sur cette partie… et par la suite comment imprimer cette dernière à partir d’une imprimante photo…
    merci de me répondre

    Répondre
  12. kriss

    Bonjour
    je voudrais capturer mes films super 8 avec une camera PI a partir d’un projecteur en placant la camera a la place de l’optique quel programme utilisé ?
    et comment ne pas avoir de barre qui defile a l’ecran genre synchro ou plutot trouver la bonne synchronisation

    Répondre
      1. kriss

        Bonjour
        merci pour la reponse rapide mais il ne fait pas la capture en direct il fait du pas a pas moi je voudrait enregistrer mes films en direct c’est a dire entre 18 et 24 images seconde
        est ce qu’il y a possibilité de regler le shutter ou le FPS de la camera

        cdlt
        kriss

        Répondre
        1. François MOCQ Auteur de l’article

          De toute façon le défilement d’un film super 8 n’est pas continu. L’image est amenée devant l’objectif par « saccades » donc en pas à pas et la transition entre 2 images est masquée par un obturateur. c’est donc bien du pas à pas. Il faudrait ajouter un capteur qui déclenche la prise de vue lorsque l’image est stabilisée devant l’objectif…
          https://www.raspberrypi.org/blog/digitising-reels-pi-film-capture/

          Après avec le temps de prise de vue et le stockage de chaque image je ne suis pas sur que le Raspberry Pi puisse suivre la cadence. Le film est capturé image par image à la cadence qui permet d’enregistrer les images. Ensuite à partir des images individuelles on recrée une vidéo (mp4 ?) , mais à la restitution la vitesse sera bien en 24 ou 25 images par seconde.

          Répondre
  13. kriss

    oui tout a fait
    le bur est de capturer a vitesse normale
    en fait j’ai un projecteur 16mm qui etait équipé d’un capteur CCD mais en 720×576 en SD et je voudrais passer en HD ou 4K avec une camera raspberry ou autre puis sortir le signal video et l’enregistrer en exterieur pas sur le PI

    Répondre
  14. kriss

    et sur mon appareil il n’y avait pas de capteur de defilement ou de synchro la camera devait avoir eté modifié ou caler sur la frequence d’image je suppose
    en fait il faut soit trouver comment entrer un synchro ou un trigger sur la camera ou sur le raspberry ou bien avoir acced au frequence de balayage de la camera via le raspberry ?? je ne sait pas trop ??

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP *

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