giovedì 22 dicembre 2022

C# effettuare i video con la camera di Raspberry e .Net 6


In questo articolo vedremo come utilizzare la camera situata in una scheda Raspberry PI 4 dei video, e salvare il file.
Con la scheda Raspberry PI 4, ci permette di realizzare applicazioni di tipo Internet Delle Cose (IOT) con il quale possiamo effettuare progetti che vanno oltre all’utilizzo del cellulare e del computer.
Con la tecnologia .Net 6 e successive, e con l’ambiente di sviluppo Visual Studio 2022 Community, vedremo com’è semplice realizzare un’applicazione per la registrazione dei video tramite il linguaggio di programmazione C#.
Con la telecamera possiamo realizzare progetti di video sorveglianza e controllo, per la sicurezza, controllo ambientale, e tanti altri scenari che solo l’ambito IOT si offrire.
Il progetto sarà di tipo Console Application, e salverà in formato mp4 il video registrato fino a quando l’utente non fermerà la registrazione, tramite la digitazione di un pulsante.




Figura 1 - Il video realizzato

Creazione del progetto

Si crea un nuovo progetto di tipo “App Console” , selezionando nel menu delle categorie in alto a destra, la voce “Console” e tra i modelli proposti quello con la dicitura “App Console” Progetto per la creazione di un’applicazione da riga di comando eseguibile in .NET in Windows, Linux e MacOS. Dopo aver selezionato tale progetto facciamo click sul pulsante “Avanti” nella finestra successiva, digitiamo il nome del progetto che vogliamo assegnare e facciamo click sul pulsante “Avanti”, nella finestra successiva selezioniamo la versione del Framework a “6” che è l’ultima.
A questo punto facciamo click sul pulsante “Crea”, in modo da creare il progetto.

Stesura del codice

A questo punto creato il progetto, che ricordiamo che i progetti di tipo “App Console” non hanno interfaccia grafica, dobbiamo aggiungere il componente “UnoSquare.Raspberry.IO” che permette di gestire i vari sensori e sistemi operativi della scheda Raspberry, tra cui le Camere. L’installazione del componente possiamo effettuarlo in due modi diversi o tramite riga di comandi oppure cercando il componente 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.
Qualora invece si vuole installare tramite finestra “Nuget” usando la 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 in cui stiamo scrivendo la versione è 0.27.1 con circa 93k installazioni.

Figura 2 - Il componente da installare.

Siamo giunti nella stesura del codice, nel file “Program”, in alto sopra ad ogni dichiarazione dobbiamo aggiungere lo spazio dei nomi (namespace) del componente appena aggiunto.
Lo spazio dei nomi fornisce le classi per gestire le camere di Raspberry, di seguito il frammento di codice delle suddette operazioni.


C#

using Unosquare.RaspberryIO;

using Unosquare.RaspberryIO.Camera;



Dopo aver aggiunto lo spazio dei nomi, scriviamo il codice che tramite metodi e classi, andremo a salvare un file di tipo mp4, nella cartella “pi”. Dopo lo spazio dei nomi, scriviamo subito dopo il codice che tramite il metodo  “OpenVideoStream” avvia la registrazione dei video, mentre tramite il metodo “CloseVideoStream” termina la registazione.
Prima di eseguire il metodo di registrazione, occorre impostare alcune proprietà della camera, permettendo di impostare alcune impostazioni del video che si andrà a creare, come la grandezza del video, il percorso dove salvarlo ed altre informazioni utili.
Al termine della registrazione, verrà visualizzato a video un messaggio con le informazioni del video, quali dimensione e durata.
Di seguito si riporta il frammento di codice delle suddette operazioni.


C#

var videoDimensioneByte = 0;

var videoEventi = 0;

var InizioRegistrazione = DateTime.UtcNow;

 

// Imposta le proprietà della camera tra cui dove salvare il file

var videoSettings = new CameraVideoSettings()

{

    CaptureTimeoutMilliseconds = 0,

    CaptureDisplayPreview = false,

    ImageFlipVertically = true,

    CaptureExposure = CameraExposureMode.Night,

    CaptureWidth = 1920,

    CaptureHeight = 1080,

     VideoFileName = "/home/pi/Video.mp4"

};

 

try

{

    

    

    //Metodo per la registrazione del video

    Pi.Camera.OpenVideoStream(videoSettings,

        onDataCallback: (data) => { videoDimensioneByte += data.Length; videoEventi++; },

        onExitCallback: null);

 

    

    InizioRegistrazione = DateTime.UtcNow;

    Console.WriteLine("Premi un qualsiasi pulsante per terminare la registrazione.");

    Console.ReadKey(true);

}

catch (Exception ex)

{

    Console.WriteLine($"{ex.GetType()}: {ex.Message}");

}

finally

{

    //Metodo per terminare la registrazione

    Pi.Camera.CloseVideoStream();

 

    //Visualizzo a video le informazioni sul file, dimensione, durata di registrazione e quante volte chiamato il metodo

    var DimensioneVideoMB = (videoDimensioneByte / (1024f * 1024f)).ToString("0.000");

    var TerminazioneRegistrazione = DateTime.UtcNow.Subtract(InizioRegistrazione).TotalSeconds.ToString("0.000");

    Console.WriteLine($"Video dimensione {DimensioneVideoMB} Mega bytes in  {videoEventi} chiamate per  {TerminazioneRegistrazione} secondi");

}




Conclusioni

L’articolo ha voluto fornire al lettore le informazioni di basa per poter utilizzare la camera della scheda Raspberry per la creazione di video.
Tramite il componente Unosquare, si possono scrivere interessanti progetti, in maniera rapida e semplice, visto le numerose classi messe a disposizione da questo componente e soprattutto la semplicità nell’utilizzarlo.
Per chi ha già creato progetti per windows application, non troverà difficoltà nel creare applicazioni per l’ambito di internet delle cose (IOT) visto che lo sviluppo in tale ambito è uguale.
Sul sito Kubii, qui https://www.kubii.it/  è possibile acquistare schede, sensori ed altri accessori o materiali per la scheda Raspberry.

Nessun commento: