Differenze tra le versioni di "Timelapse"
m (→Introduzione) |
|||
Riga 40: | Riga 40: | ||
</code> | </code> | ||
− | == | + | == Codice == |
<pre><nowiki> | <pre><nowiki> | ||
− | #/bin/bash | + | |
+ | #!/bin/bash | ||
# | # | ||
− | + | ## Questa variabile indica lo zoom da impostare alla macchina all'avvio del demone | |
+ | ZOOM= | ||
− | + | ## Credenziali di accesso al server FTP remoto per l'upload dell'immagine scattata | |
− | + | HOST='' | |
− | + | USER='' | |
+ | PASS='' | ||
− | + | ## Cartella di destinazione sul server FTP remoto | |
− | + | DEST='' | |
− | + | ## Tempo di attesa tra uno scatto e l'altro | |
− | + | WAIT=240 | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | ## Funzione di avvio del demone capture | |
− | echo " | + | function start_capture() { |
− | exit 1 | + | ## Viene controllato che si abbiano i permessi di scrittura nella cartella /var/run/ altrimenti lo script termina |
− | + | if [ ! -w '/var/run' ]; then | |
+ | echo -n `basename $0` | ||
+ | echo -e ": Non si hanno abbastanza privilegi per avviare il demone\n"; | ||
+ | exit 1; | ||
+ | fi | ||
+ | |||
+ | ## Viene avviato il demone e viene salvato il pid in un file | ||
+ | capture start | ||
+ | pidof capture > /var/run/capture.pid | ||
+ | |||
+ | ## Imposta lo zoom della macchina e imposta il demone per la cattura a risoluzione ridotta | ||
+ | capture "zoom $ZOOM" | ||
+ | capture 'size small' | ||
+ | } | ||
− | + | function stop_capture() { | |
− | + | ## Viene controllato che si abbiano i permessi di scrittura nella cartella /var/run/ altrimenti lo script termina | |
− | + | if [ ! -w '/var/run' ]; then | |
− | + | echo -n `basename $0` | |
+ | echo -e ": Non si hanno abbastanza privilegi per avviare il demone\n"; | ||
+ | exit 1; | ||
+ | fi | ||
+ | |||
+ | ## Viene terminato il demone e viene rimosso il file contenente il pid | ||
+ | capture quit | ||
+ | rm /var/run/capture.pid | ||
+ | } | ||
− | |||
− | |||
− | |||
case "$1" in | case "$1" in | ||
start) | start) | ||
− | + | start_capture | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
;; | ;; | ||
− | + | ||
stop) | stop) | ||
− | + | stop_capture | |
− | |||
;; | ;; | ||
− | + | ||
− | + | start-loop) | |
− | + | while true | |
− | + | do | |
+ | ## Se non esiste il file del pid lancia il demone | ||
+ | if [ ! -e '/var/run/capture.pid' ]; then | ||
+ | start_capture | ||
+ | fi | ||
+ | |||
+ | ## Ricava il pid del processo demone e controlla che sia stato avviato | ||
+ | PID=`cat /var/run/capture.pid` | ||
+ | ps -p $PID > /dev/null | ||
+ | |||
+ | ## Se il processo del demone non esiste, lo avvia | ||
+ | if [ $? -eq 1 ]; then | ||
+ | start_capture | ||
+ | fi | ||
+ | |||
+ | ## Cattura l'immagine | ||
+ | capture 'capture /tmp/capture-image.jpg' | ||
+ | |||
+ | ## Ricava la data e l'ora attuali e li inserisce nell'immagine | ||
+ | DATE=$(/bin/date '+%d/%m/%Y %H:%M:%S') | ||
+ | convert /tmp/capture-image.jpg -gravity southeast -pointsize 20 -stroke black -strokewidth 4 \ | ||
+ | -annotate 0 "$DATE" -stroke white -strokewidth 1 -fill white -annotate 0 "$DATE" \ | ||
+ | /tmp/capture-image-date.jpg | ||
+ | |||
+ | ## Invia l'immagine al server FTP remoto | ||
+ | ncftpput -u $USER -p $PASS -C $HOST /tmp/capture-image-date.jpg $DEST | ||
+ | |||
+ | ## Attende fino al successivo scatto | ||
+ | sleep $WAIT | ||
+ | done | ||
;; | ;; | ||
+ | esac | ||
− | |||
</nowiki></pre> | </nowiki></pre> | ||
+ | |||
+ | == Sintassi == | ||
+ | Per la messa in moto del sistema bisogna prima di tutto avviare il demone di capture con <code>./timelapse start</code><br> | ||
+ | Per fare ciò c'è bisogno che si abbiano i privilegi di scrittura sulla cartella /var/run, quindi è necessario dare il comando come utente root o tramite sudo.<br> | ||
+ | Dopo di che, per avviare la cattura ciclica delle immagini si deve usare il comando <code>./timelapse start-loop</code> (anche come utente semplice).<br> | ||
+ | Per terminare il demone usare il comando <code>./timelapse stop</code> | ||
== Ringraziamenti == | == Ringraziamenti == |
Versione delle 19:51, 11 mar 2009
Ideato da: Gigiv Licenza: GPL Download:
Indice
Introduzione
Questo script serve ad utilizzare una semplice fotocamera digitale per l'acquisizione ciclica di scatti, applicare data e ora allo scatto acquisito ed inviarlo ad un server remoto tramite FTP
Requisiti
Per la realizzazione del tutto è stato usato:
Hardware
- PC dotato di porta USB equipaggiato con Ubuntu 7.04 Server (la potenza della macchina è ininfluente. Se riesce a girare Ubuntu, riuscirà a girare anche lo script)
- Fotocamera Canon Powershot A400/A520 (potete vedere le fotocamere supportate sul sito del software di cattura citato più avanti)
Software
- Software di cattura degli scatti da fotocamere Canon. In alternativa potete usare gPhoto2 che supporta anche Nikon e Olympus.
- Tools di modifica dinamica delle immagini. Utilizzato per l'aggiunta di data e ora all'immagine.
- Client FTP per l'uppload della foto sul server remoto.
- Librerie di comunicazione con la fotocamera. Necessarie per il funzionamento di Capture.
- Librerie per l'accesso agli USB Device. Necessarie per il funzionamento di Capture.
Capture
Capture è un ottimo software di controllo di fotocamere Canon.
Il funzionamento è gestito tramite linea di comando con un ampia gamma di opzioni.
Per il lancio e lo stop del demone si utilizza rispettivamente
~$ capture start
~$ capture quit
Per il passaggio delle opzioni al demone si devono includere le opzioni con i rispettivi valori tra apici singoli.
Ad esempio per zommare si dovrà usare
~$ capture 'zoom 5'
Codice
#!/bin/bash # ## Questa variabile indica lo zoom da impostare alla macchina all'avvio del demone ZOOM= ## Credenziali di accesso al server FTP remoto per l'upload dell'immagine scattata HOST='' USER='' PASS='' ## Cartella di destinazione sul server FTP remoto DEST='' ## Tempo di attesa tra uno scatto e l'altro WAIT=240 ## Funzione di avvio del demone capture function start_capture() { ## Viene controllato che si abbiano i permessi di scrittura nella cartella /var/run/ altrimenti lo script termina if [ ! -w '/var/run' ]; then echo -n `basename $0` echo -e ": Non si hanno abbastanza privilegi per avviare il demone\n"; exit 1; fi ## Viene avviato il demone e viene salvato il pid in un file capture start pidof capture > /var/run/capture.pid ## Imposta lo zoom della macchina e imposta il demone per la cattura a risoluzione ridotta capture "zoom $ZOOM" capture 'size small' } function stop_capture() { ## Viene controllato che si abbiano i permessi di scrittura nella cartella /var/run/ altrimenti lo script termina if [ ! -w '/var/run' ]; then echo -n `basename $0` echo -e ": Non si hanno abbastanza privilegi per avviare il demone\n"; exit 1; fi ## Viene terminato il demone e viene rimosso il file contenente il pid capture quit rm /var/run/capture.pid } case "$1" in start) start_capture ;; stop) stop_capture ;; start-loop) while true do ## Se non esiste il file del pid lancia il demone if [ ! -e '/var/run/capture.pid' ]; then start_capture fi ## Ricava il pid del processo demone e controlla che sia stato avviato PID=`cat /var/run/capture.pid` ps -p $PID > /dev/null ## Se il processo del demone non esiste, lo avvia if [ $? -eq 1 ]; then start_capture fi ## Cattura l'immagine capture 'capture /tmp/capture-image.jpg' ## Ricava la data e l'ora attuali e li inserisce nell'immagine DATE=$(/bin/date '+%d/%m/%Y %H:%M:%S') convert /tmp/capture-image.jpg -gravity southeast -pointsize 20 -stroke black -strokewidth 4 \ -annotate 0 "$DATE" -stroke white -strokewidth 1 -fill white -annotate 0 "$DATE" \ /tmp/capture-image-date.jpg ## Invia l'immagine al server FTP remoto ncftpput -u $USER -p $PASS -C $HOST /tmp/capture-image-date.jpg $DEST ## Attende fino al successivo scatto sleep $WAIT done ;; esac
Sintassi
Per la messa in moto del sistema bisogna prima di tutto avviare il demone di capture con ./timelapse start
Per fare ciò c'è bisogno che si abbiano i privilegi di scrittura sulla cartella /var/run, quindi è necessario dare il comando come utente root o tramite sudo.
Dopo di che, per avviare la cattura ciclica delle immagini si deve usare il comando ./timelapse start-loop
(anche come utente semplice).
Per terminare il demone usare il comando ./timelapse stop