Introduction

Dans un précédent article, nous avions parlé de raspistill et raspivid pour piloter le module caméra de votre Raspberry. C’était cool mais nous allons aller plus loin.

Dans la cas où vous voudriez inclure l’utilisation de votre caméra dans un programme Python, cette méthode (raspistill/raspivid) implique de lancer ces utilitaires pour en récupérer le résultat par la suite. C’est faisable mail il y a beaucoup mieux: la librairie Picamera. Elle va vous permettre de piloter le module caméra de votre Pi directement depuis votre script Python.

Dans ce premier article on va se contenter d’utiliser les fonctionnalités basiques de la librairie.

Installation

Je ne reviendrai pas ici sur la connexion de la caméra et son activation. De plus, normalement, si vous avez Raspbian comme OS sur votre Pi, la librairie Picamera est déjà installée.

Pour commencer on va donc lancer les classiques procédures de mise à jour du système :

sudo apt-get update
sudo apt-get upgrade

Pour vérifier que tout est ok, lancer Python et tenter d’importer la librairie en tapant simplement la ligne ci-dessous

import picamera

Si tout va bien vous ne devriez pas avoir d’erreur.

On va donc poursuivre avec les instructions de base.

 

Aperçu

Pour afficher à l’écran un aperçu de ce que « voit » la caméra, Picamera possède les méthodes start_preview et stop_preview.

Le script ci-dessous permet d’afficher cet aperçu pendant une durée de 30 secondes.

from picamera import PiCamera

camera=PiCamera()
camera.resolution=(640,480)
camera.start_preview()
sleep(30)
camera.stop_preview()

 

Capturer une image fixe

Pour capturer une image et l’enregistrer dans un fichier, il faut utiliser la méthode capture. Voici notre premier script :

from time import sleep
from picamera import PiCamera

camera=PiCamera()
camera.resolution=(1024,768)
camera.start_preview()
sleep(2)
camera.capture('test.jpg')
camera.stop_preview()

Suivant comment est branchée et positionnée votre caméro, l’image peut être à l’envers. Pas de panique, il suffite de renseigner l’attribut rotation avant de faire la capture (c’est la rotation à appliquer à l’image en degrés).

On va donc compléter le script de façon à appliquer une rotation de 180° :

from time import sleep
from picamera import PiCamera

camera=PiCamera()
camera.resolution=(1024,768)
camera.rotation=180
camera.start_preview()
sleep(2)
camera.capture('test.jpg')
camera.stop_preview()

Avec capture, il est également possible d’enregistrer l’image dans une autre résolution que celle de la caméra. L’attribut résolution des scripts précédents permet de régler la résolution de la caméra. Pour changer cette résolution dans l’image crée, il faut compléter la méthode de la façon suivante :

from time import sleep
from picamera import PiCamera

camera=PiCamera()
camera.resolution=(1024,768)
camera.rotation=180
camera.start_preview()
sleep(2)
camera.capture('test.jpg', resize=(320,240))
camera.stop_preview()

L’attribut resolution permet d’indiquer la résolution de la caméra, tandis que resize dans la méthode capture permet de donner la résolution de l’image créée par capture.

 

Enregistrer une vidéo

Pour enregistrer une vidéo dans un fichier, PiCamera propose l’utilisation des méthodes start_recording et stop_recording. Dans l’exemple ci-dessous, on enregistre une vidéo de 30 secondes. Dans le même temps start_preview et stop_preview montrent à l’écran ce qui est enregistré.

from picamera import PiCamera

camera=PiCamera()
camera.resolution=(640,480)
camera.rotation=180
camera.start_preview()
camera.start_recording('ma_video.h264')
camera.wait_recording(30)
camera.stop_recording()
camera_stop_preview()

Remarque : la méthode wait_recording aurait pu être remplacée par un sleep(30). La différence est que wait_recording permet de vérifier d’éventuelles erreurs au cours de l’enregistrement (ce qu’un sleep ne ferait pas). Par exemple un espace disque insuffisant.

Eteindre la LED de la caméra

Quand la caméra de votre Pi est en cours d’utilisation, la LED rouge figurant à coté de son objectif s’allume. Ce fonctionnement peut être gênant dans certains cas d’utilisation. Dans mon cas, je prévois de faire une bird box pour prendre des photos des oiseaux de mon jardin. Pas sûr qu’ils apprécient cette petite lumière.

PiCamera propose de désactiver cette LED via l’attribut LED :

camera.led=False

Malheureusement cela ne fonctionne pas avec un Raspberry 3 modèle B.

Une autre façon de régler ce problème consiste à désactiver cette LED au démarrage du Raspberry. Pour cela, dans le fichier boot/config.txt, il faut ajouter la ligne suivante et redémarrer le Raspberry :

disable_camera_led=1

 

Conclusion

Voilà pour une première approche de la librairie PiCamera. On s’est contenté ici des méthodes et attributs de base. Je pense qu’on va rapidement aller plus loin et donc faire une suite à cet article. Au programme et comme indiqué plus une bird box et certainement faire du time lapse.

N’hésitez pas à commenter. Et amusez-vous bien !