Scattare foto con Picamera 2 e Raspberry PI usando le coroutine in Python
Usare la libreria Picamera2 e Camera Module 3 è uno dei tanti modi per scattare foto co Raspberry PI. Il modo più semplice per usarla da programma è in Python, usando la libreria Picamera2. Una volta installato il modulo si può provare il codice proposto dalla documentazione ufficiale (The Picamera 2 Manual, cap 2.3):
Questo programma avvia una finestra di preview, quindi in una board Raspberry Pi 4 headless (senza monitor e tastiera) può essere semplificato:
Se il programma è complesso e le elaborazioni sulle foto richiedono tempo, si può trarre vantaggio dall’esecuzione concorrente sui core del processore della scheda Raspberry. Python offre la libreria asyncio (Asynchronous I/O) che permette l’uso della sintassi async/await
.
Quando il programma deve svolgere un compito gravoso, lo lancia in parallelo, aspettando la fine dell’esecuzione solo quando avrà bisogno dei risultati, come in figura:
Nell’esempio seguente, uso solo le api di avvio e sincronizzazione delle coroutines: le funzioni concorrenti vengono dichiarate come async e vengono lanciate in parallelo con asyncio.create_task()
. Questo metodo restituisce un oggetto Task
, che poi può essere usato per una sincronizzazione successiva usando il comando await
:
Riferimenti
- 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