quarta-feira, 2 de setembro de 2015

Criando um Time-Lapse fácil com Raspberry Pi e módulo de câmera.

Olá!

Antes de começarmos, assista este time-lapse que eu fiz: um compacto de 3 horas em 23 segundos para que você possa se inspirar. Aí é só seguir este tutorial até o fim e fazer seus próprios Time-Lapses:


E aí, curtiu? Então vamos ao trabalho!


Eu estou presumindo que você, leitor, já tenha a sua Raspberry configurada, com módulo de câmera instalado, SSH funcionando e tudo mais para que possa fazer o que mostro aqui. Porém, caso não tenha uma das etapas abaixo, pode deixar um comentário abaixo que respondo o mais rapidamente possível e com certeza você irá fazer seu time-lapse!

Pré-requisitos: 

Atenção: deixe comentário no fim do artigo pedindo ajuda, se precisar
  • Ter uma Raspberry (dããã) com o Raspbian instalado;
  • Um destes Power Banks para alimentar a Raspberry, pois ela ficará fora da sua casa, fazendo fotos;
  • Ter o módulo de câmera nativo dela instalado e configurado;
  • Ter o SSH habilitado e configurado (Não sabe o que estou dizendo? Então peça minha ajuda);
  • Ter algum cliente de SFTP no seu PC para poder transferir os time-lapses da Raspberry para seu PC;
  • Ter uma lata de Neston vazia, claro!
    • Sim, isto mesmo. Sua Raspberry vai ficar ao léu para fazer as suas time-lapses, então vamos colocá-la dentro de uma lata de Neston para garantir um mínimo de proteção?


Juntando tudo:

Infelizmente eu não tinha um power bank para alimentar minha Raspberry, mas peguei emprestada uma bateria bem bacana da moto elétrica do meu filho. Esta bateria, porém, é de 6V então tive que fazer um regulador de tensão de 5V para alimentar a Raspberry, pois ela QUEIMA se ligarmos mais do que 5,25V nela.


Veja as fotos do processo de "montagem":

Todo material utilizado
Um "close" na bateria da moto e na lata com o furinho da câmera
Componentes para fazer o regulador de tensão
Regulador de tensão pronto!
Medindo a tensão da bateria.
Testando o regulador de tensão! Ele funciona!
Preparando a lata de Neston.
Preparando a bateria da moto elétrica.
Tudo certo!
Preparando a Raspberry e a Câmera.
Mais um pouco...
Pronto!

Juntando todo mundo... 
Trabalho concluído! Vamos configurar o programa para a time-lape!


Simples script que gera a time-lapse:


Como sou um cara muito gente fina, fiz o trabalho sujo de pesquisar, instalar, configurar, testar e, por fim, juntar tudo e fazer um script em shell comentado, bem prático e simples. Você poderá alterá-lo à vontade. É fácil!

Antes disto, entretanto, você precisará instalar na sua raspberry os seguintes programas:
  • ImageMagick: responsável por acrescentar a data e hora nas fotos;
  • Mencoder: responsável por juntar todas as fotos em um arquivo de vídeo.
Para instalar estes programas, basta executar os seguintes comandos:

sudo apt-get install imagemagick

Em seguida:

sudo apt-get install mencoder


Pronto! Agora você poderá rodar meu script.
Basta copiar o conteúdo abaixo e salvar em algum local, tipo /home/pi/timelapse/ por exemplo:

#!/bin/bash

#Declaracao das variaveis
Inicio=$SECONDS #Inicio do processo
Data=$(date +"%d-%m-%Y_%H-%M") #Auxiliar para determinar o nome do video
Tempo=3600000 #Tempo (em milissegundos) que a camera ficara tirando fotos
Intervalo=15000 #Milissegundos entre uma foto e outra
Largura=1920 #Largura da foto e do video
Altura=1080 #Altura da foto e do video
TamanhoLetra=40 #Precisa comentar?
PosicaoHorizontal=1530 #Posicao horizontal do texto contendo a data e hora
PosicaoVertical=1070 #Posicao vertical do texto
CorLetra=yellow #Tambem nao precisa comentar
BitRate=8000000 #Bitrate do video

#Tirando as fotos
raspistill -t $Tempo -tl $Intervalo -w $Largura -h $Altura -o foto_%04d.jpg

#Adicionando a data e a hora nas fotos
for file in *.jpg ; do
   convert "$file"  -pointsize $TamanhoLetra -fill $CorLetra -annotate +$PosicaoHorizontal+$PosicaoVertical %[exif:DateTimeOriginal] "data-${file}"
done

#Criando a lista com as fotos editadas
ls data-*.jpg > lista.txt

#Criando o video de time-lapse
mencoder -nosound -ovc lavc -lavcopts vcodec=mpeg4:aspect=16/9:vbitrate=$BitRate  \          -vf scale=$Largura:$Altura -o timelapse_$Data.avi -mf type=jpeg:fps=24 \            mf://@lista.txt

#Apagando as fotos e a lista de fotos
rm -rf *.jpg
rm -rf lista.txt

#Processo terminado, medindo o tempo que gastou e gerando o log
Fim="Processo concluido em $(($SECONDS - $Inicio)) segundos"

echo $Fim > timelapse_$Data.log

Atenção! Você pode baixar o script aqui!

Supondo que você salvou este script com o nome raspilapse.sh na pasta /home/pi/timelapse, será necessário dar permissão de execução para o mesmo. Isto é feito com este comando:

chmod a+x raspilapse.sh

Agora o script está pronto e poderá ser executado com este comando:

./raspilapse.sh

Pronto! Agora a Raspberry irá tirar as fotos e gerar o vídeo da time-lapse de acordo com as configurações do script.
No final do processo você poderá baixar o vídeo para seu PC, através de algum cliente SFTP.

Automatizando sua time-lapse:

Agora vem a cereja do bolo: você colocou a Raspberry, a câmera e um PowerBank dentro de uma lata de Neston e já está fazendo uns time-lapses bem bacanas, certo? Na maioria das situações não faz muito sentido você fazer tudo manualmente, né? No caso do vídeo do início deste artigo a Raspberry começou a bater fotos às 5:20 da manhã e eu estava dormindo! Então agora você vai colocar a sua Raspberry pra fazer sozinha os time-lapses!

Para automatizar é extremamente simples! O Linux tem um agendador de tarefas nativo chamado cron. É só colocar lá uma instrução sobre quando o cron deverá executar o script pra você que ele fará! Simples assim!

Mas... como funciona o cron?

Simples! Veja só o que diz a Wikipedia!

Supondo que você queira que o cron inicie o script às 5 da manhã, faça isto:

crontab -e

Isto irá abrir o cron em modo de edição, para que você possa colocar o comando necessário para iniciar seu script.

com o cron em modo de edição, adicione a seguinte linha ao final do arquivo:

20 5 * * * cd /home/pi/fotos/ && ./raspilapse.sh &

Explicando a linha acima, seria assim:
20 minutos, às 5 horas, todos os dias o cron irá 'entrar' na pasta /home/pi/fotos/ e em seguida irá executar o script raspilapse.sh em segundo plano.

Após esta alteração, pressione as teclas ctrl+o (letra ó) para gravar e depois ctrl+x para sair.

Coloquei um print da minha tela pra você ver como tem que ficar o seu cron:



Bom, é isto! Agora você está apto a criar time-lapses de qualquer coisa que imaginar.
Se estiver com alguma dúvida, crítica, elogio ou sugestão, não deixe de comentar!

Obrigado pela paciência e até mais!

Nenhum comentário: