C# effettuare le foto con la fotocamera in Raspberry PI 4 e .Net 6

Articolo introduttivo all'utilizzo della fotocamera in Raspberry con .Net 6 e linguaggio di programmazione C#.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

In questo articolo vedremo come utilizzare la tecnologia .Net 6, in particolar modo il linguaggio di programmazione C# e l’ambiente di sviluppo Visual Studio 2022 Community, per effettuare le foto tramite la fotocamera inserita nella scheda Raspberry PI 4.
L’articolo vuole fornire una piccola introduzione ed informazioni chiare su come gestire le camere delle schede Raspberry, per scattare le foto, il tutto per fare una semplice foto come mostrato in figura 1.

Figura 1 - Utilizzo della camera in Raspberry PI 4

Creazione del progetto

Si crea un nuovo progetto in .Net di tipo “Console Application” selezionando come linguaggio di programmazione “C#” e tra i modelli presenti selezionare quello denominato “App Console” con la descrizione “Progetto per la creazione di un’applicazione a riga di comando eseguibile in .NET in Windows, Linux e MacOS”.
Dopo aver selezionato  tale modello, fate click sul pulsante “Avanti” ed impostate un nome, fate di nuovo click sul pulsante “Avanti” e nella finestra successiva, nella scelta della versione del Framework, selezionate “.Net 6.0 (Supporto a lungo Termine) , a questo punto fate click sul pulsante “Crea”.

Dopo aver creato il progetto, che ricordiamo non ha interfaccia grafica,  dobbiamo aggiungere il componente “UnoSquare.Raspberry.IO” che permette di gestire i vari sensori e sistemi della scheda Raspberry, tra cui le Camere. L’installazione del componente possiamo effettuarlo in due modalità o tramite riga di comandi oppure cercando tramite la finestra di “Gestione Pacchetti”.
Nel caso che si vuole installare tramite riga di comando, dal menu strumenti, selezioniamo la voce “Gestione Pacchetti Nuget” e dal sottomenu selezioniamo la voce “Console di Gestione Pacchetti”, a questo punto digitiamo il seguente comando e facciamo click sul pulsante “Invio” della tastiera.

Install-Package Unosquare.Raspberry.IO

Aspettiamo che l’installazione venga completata con successo prima di procede alla stesura del codice.
Nell’eventualità invece che si vuole installare tramite ricerca del componente, dalla voce di menu “Strumenti” selezioniamo “Gestione pacchetti Nuget” e dal sottomenu la voce “Gestisci Pacchetti Nuget per la soluzione…” , nella finestra che viene aperta, nella paginetta “Sfoglia” digitiamo il componente “unosquare.raspberry.io” (figura 2) , al momento versione 0.27.1 con circa 93k installazioni.
 

Figura 2  - Il componente da installare.

Figura 2  - Il componente da installare.

 

Stesura del codice

Ora che abbiamo configurato il nostro progetto, ed installato il componente per la gestione della camera, dobbiamo scrivere il codice per effettuare le foto.
Il codice è molto semplice, rileva la foto e poi la salva in una cartella di sistema di Raspberry, nella root (cartella principale) di Raspberry.
Prima di scrivere il codice occorre aggiungere il rifermento allo spazio dei nomi per utilizzare le classi del componente. In alto sopra ad ogni dichiarazione, inseriamo lo spazio dei nomi a UnoSquare, di seguito il frammento di codice delle suddette operazioni.
 

C#
using Unosquare.RaspberryIO;

 

A questo punto, sempre nella classe “Programm” subito sotto, scriviamo il codice che tramite il metodo “CaptureImageJpeg” della classe “Camera” e della classe principale “PI”, estrapola lo stream di byte (array di byte) passando come parametri le dimensioni dell’immagine che voglia.
Una volta ottenuto lo stream dei dati, verifichiamo se esiste già un file con lo stesso nome su cui vogliamo salvare l’immagine, in tal caso lo eliminiamo, per poi salvarlo tramite il metodo “WriteAllBytes” della classe File. 
Di seguito si riporta il frammento di codice delle suddette operazioni.

C#
Console.WriteLine("Avvio cattura video!");
var ImmagineBytes = Pi.Camera.CaptureImageJpeg(640, 480);
var PercorsoFoto = "/home/pi/ImmagineCamera.jpg";
if (File.Exists(PercorsoFoto))
   File.Delete(PercorsoFoto);
File.WriteAllBytes(PercorsoFoto, ImmagineBytes);
Console.WriteLine($"Dimensione immagine: {ImmagineBytes.Length}");
Console.WriteLine("Salvata in: /home/pi/ImmagineCamera.jpg");

 

Ora non resta che copiare il nostro progetto con tutti i file comprese le dll nella scheda Raspberry ,   dalla console eseguire la dll del nome del progetto (in questo caso il progetto si chiama ConsoleRaspberryCamera) tramite il comando “DotNet”, qualora il Framework è installato, il tutto come mostrato in figura 3.
 

Figura 3 – Esecuzione del programma dalla finestra dei comandi.

Figura 3 – Esecuzione del programma dalla finestra dei comandi.

 

Il risultato sarà la creazione di un file immagine riguardante lo scatto di una foto dalla camera installata, il file si troverà nella cartella impostata nel codice per la creazione del file, nel nostro caso nella cartella PI, il tutto come mostrato in figura 4.


Figura 4 – La foto scattata dalla camera installata sulla scheda Raspberry PI 4


Conclusioni 

L’articolo ha voluto fornire al lettore una semplice introduzione all’utilizzo delle camere della scheda Raspberry PI 4, utilizzando il Framework 6 con il linguaggio di programmazione C#, aggiungendo un componente per la gestione della scheda Raspberry PI.
La semplicità del nuovo .Net con l’ambiente di sviluppo Visual Studio 2022 semplifica moltissimo la creazione di applicazioni in ambito di Internet delle Cose (IOT) portando in queste schede con installato un sistema operativo che non sia Windows, il codice C#.
Il programmatore che già scrive programmi in .Net, ed in particolar modo su ambiente Windows Application, non troverà difficoltà a scrivere applicazioni anche per questa tipologia di scenari, vista la semplicità offerta del nuovo .Net 6 e dall’ambiente di sviluppo Visual Studio 2022.

Sul sito Kubii, qui https://www.kubii.it/ è possibile acquistare schede, sensori ed altri accessori o materiali per la scheda Raspberry.