HomeLinuxUbuntu: come comandare la webcam da terminale con fswebcam

Ubuntu: come comandare la webcam da terminale con fswebcam

Oggi vedremo come impostare la webcam per scattare una foto all’avvio di sessione.
Premesso che la distribuzione che sto utilizzando al momento è Ubuntu 19.04, potrete fare altrettanto -coi dovuti adattamenti- con tutte le altre derivate e rilasci che supportino l’applicazione in oggetto.

Per prima cosa, create una cartella denominata “webcamphotos” all’interno della vostra home. Naturalmente potete prediligere altri nomi e percorsi, purchè prendiate nota dei dettagli. Si tratta del path di destinazione delle nostre immagini.

Aprite una finestra del terminale e scaricate swebcam. Su Debian e derivate, lo potrete fare tramite il gestore di pacchetti apt

apt install fswebcam

fswebcam è il software che consente di utilizzare le cam connesse al dispositivo direttamente da riga di comando.

Lanciando il solo comando seguito dal percorso per il salvataggio, il programma lavorerà secondo i suoi parametri predefiniti, ovvero la prima webcam disponibile, a risoluzione minima e qualità media, quindi lanciando il comando seguente

fswebcam /home/$USER/webcamphotos

potrete giusto verificare quali siano i predefiniti per il vostro hardware; digitando

fswebcam -help

visualizzerete la lista dei parametri impostabili (qui un approfondimento).

Potrete impostare un loop, un ritardo di scatto, aggiungere una sovraimpressione, scattare foto a colori invertiti, o in scala di grigio e molto altro ancora.

Una stringa più completa per l’utilizzo è la seguente

fswebcam -d /dev/video0 -r 640×480 –jpeg 85 -D 0 -F 1 /home/$USER/webcamphotos/$(date +”%m-%d-%y-%H-%M-%S”).jpeg

Due parole riguardo alle opzioni specificate:

-d indica il path del device da utilizzare e si può tranquillamente omettere nel caso in cui fosse presente una sola webcam. Nel nostro caso /dev/video0. Servitevi di  lsusb per la lista dei device disponibili (la vostra webcam, anche se interna sarà connessa via usb);

-r  indica la risoluzione: se incompatibile col vostro dispositivo, verrà corretta automaticamente al valore più vicino supportato. In questo caso ho optato per il minimo 640×480; a seguire trovate il formato –-jpeg ed il factor, ovvero la qualità in una scala che va da -1 a 100.

-D esprime il numero di secondi che la webcam debba attendere prima di scattare la foto e –F il numero di frames da catturare (utile per i video). In questo caso l’attesa è zero e viene catturato un solo frame. Si tratta di parametri che possono essere  omessi.

Per praticità ho optato per l’estrazione del nome utente tramite la variabile $USER;

il nome del file è invece impostato tramite l’output della funzione date, i cui parametri, disposti in questo modo consentono l’ordine data, mese, anno, ora, minuti e secondi, separati da trattini nell’ordine “italiano”.

Eseguendo il file, se sarà tutto a posto, troverete la vostra foto nella cartella precedentemente creata, ed il suo nome sarà composto della successione di data ed orario fino al secondo, in modo da rispettare una certa univocità.

Ora che avete imparato a scattare foto servendovi del terminale potete passare alla  seconda fase, quella da veri fighi.
Incollate la stringa precedentemente formattata in un file vuoto, servendovi del vostro editor preferito, aggiungete l’header che trovate di seguito all’inizio del file

#!/bin/bash

e il comando di chiusura alla fine

exit 0

Così facendo il vostro script potrà essere eseguito correttamente.

Salvate il file col nome che preferite, purché abbia estensione .sh (io l’ho chiamato scattafoto.sh), quindi cliccate su di esso col tasto destro e dalla scheda permessi, flaggate la voce”permetti esecuzione come programma“.

linux file consenti esecuzione come programma

Se il vostro ambiente desktop non dovesse avere questa opzione, tornate nel terminale ed assegnate i permessi di esecuzione come segue

chmod +x /home/scattafoto.sh

fatto ciò, inseritelo in avvio automatico nelle impostazioni di sessione o secondo le modalità consentite dal vostro DE. Nel caso di Ubuntu (e flavor annessi) è disponibile un inequivocabile sezione chiamata “Applicazioni d’avvio”, ma si può ottenere lo stesso risultato seguendo altre strade.

Non vi resta che testare il programma, e attendere qualche mese per realizzare una simpatica animazione con le vostre espressioni “di login”. Se volete spingervi un pochino più in la, piuttosto che inserire uno script in esecuzione automatica, potete -rullo di tamburi- assegnargli un cron job.
Un cron job è un’operazione pianificata o ciclata in base ad una sorta di agenda, chiamata cron tab, gestita direttamente dal Sistema Operativo. Si tratta di un sistema comodo e potente per operazioni di manutenzione e backup, ma -e lo stiamo vedendo oggi- può anche fare da base ad altri progetti. Digitando il comando

crontab -e

accederete al file di configurazione (per conoscere eventuali operazioni pianificate in atto, il comando è invece crontab -l).

Ciascuna voce (croinjob) avrà  sul lato sinistro le indicazioni temporali, e sul destro le istruzioni da eseguire o il path dello script. Per evitare che il cronjob venga eseguito basterà porre un ‘#’ all’inizio della riga che lo riguarda.

I cinque parametri del suddetto timing, alla sinistra del comando sono:
minuto (0-59), ora (0-23), giorno del mese (1-31), mese dell’anno (1-12), giorno della settimana (0-7, dove 0 è domenica). (qui un approfondimento )

Da notare che la settimana inizia di domenica (per il lunedi, indicherete 1).
Nel nostro caso, volendo scattare una foto per ogni ora di lavoro, il comando sarà così conformato

*/60 * * * */home/g/scattafoto.sh

come si nota, per indicare un intervallo indipendente dall’orario, va mantenuto l’asterisco e il parametro numerico va va fatto precedere da uno slash . Come si nota, l’asterisco è inteso come carattere jolly, quindi indica “tutto”, e in questo caso -perlappunto- indica “ogni 60 minuti”

se volessimo eseguirlo ogni ora al minuto 7

7 * * * * /home/g/scattafoto.sh

ogni giorno alle 12,30

30 12 * * * /home/g/scattafoto.sh

ogni lunedi alle 9 del mattino

0 9 * * 1 /home/g/scattafoto.sh

Stabiliti gli intervalli potremmo fermarci qui, o potremmo fare ancora tante altre cose, come effettuare l’upload su un server, acquisire video piuttosto che immagini fisse e trasformare il nostro pc in un piccolo sistema di videosorveglianza (qui un tutorial molto interessante).

Sky is the limit!

Luigi Lacquaniti
Luigi Lacquaniti
Tecnico e Web designer freelance.

Ultime dal Blog