Prendre des photos avec Picamera 2 et Raspberry Pi à l'aide de coroutines en Python
L’utilisation de Picamera2 et du Camera Module 3 est l’une des nombreuses façons de prendre des photos avec Raspberry PI. Une fois installé le module hardware, vous pouvez essayer le code proposé par la documentation officielle (The Picamera 2 Manual, cap 2.3) :
Ce programme lance une fenêtre de prévisualisation, donc dans une carte Raspberry Pi 4 headless (sans écran ni clavier) cela peut être simplifié :
Si le programme est complexe et que le traitement des photos prend du temps, vous pouvez profiter d’une exécution simultanée sur les cores du processeur de la carte Raspberry. Python propose asyncio (Asynchronous I/O) qui permet l’utilisation de la syntaxe async/await
.
Lorsque le programme doit effectuer une tâche lourde, il la lance en parallèle, n’attendant la fin de l’exécution que lorsqu’il a besoin des résultats, comme dans la figure suivante :
Dans l’exemple suivant, j’utilise uniquement les functions de démarrage et de synchronisation des coroutines : les fonctions concurrentes sont déclarées comme async
et sont lancées en parallèle avec asyncio.create_task()
. Cette méthode renvoie un objet Task
qui peut ensuite être utilisé pour une synchronisation ultérieure à l’aide de la commande await
:
Références
- The Picamera 2 Manual : datasheets.raspberrypi.com/camera/picamera2-manual.pdf
- Raspberry Pi Camera Module 3 : datasheets.raspberrypi.com/camera/camera-module-3-product-brief.pdf
- Raspberry Pi 4 Model B Datasheet : datasheets.raspberrypi.com/rpi4/raspberry-pi-4-datasheet.pdf
- Python asyncio, Asynchronous I/O : docs.python.org/3/library/asyncio.html