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 ?

Share Button

À 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. .

20 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

  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

Laisser un commentaire

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

Complétez ce captcha SVP * Time limit is exhausted. Please reload CAPTCHA.