Tutorial como criar câmera de time lapse no Raspberry Pi
Objetivos
Configurar o Raspberry Pi para funcionar como uma câmera de time lapse.
Neste exemplo utilizei a câmera module v2, mas também é funcional com a versão v1 e câmeras USB compatíveis. Outras versões do Raspberry Pi também são funcionais, neste teste optei pela versão Zero W por ser mais compacta e o case já permitir o acoplamento do módulo da câmera.
O que é um time lapse?
Neste contexto de utilizar o Raspberry Pi com uma câmera fotográfica, o time lapse é o processo de fotografar o mesmo local em janelas de tempo pré determinadas. Em seguida, é possível juntar estas imagens e formar um vídeo.
O efeito do time lapse é muito interessante, caso acople a câmera para captar uma paisagem, o vídeo gerado mostra evoluções ao longo do tempo. Existem vários vídeos interessantes de time lapse mostrando a evolução de uma paisagem diante as estações do ano. O time lapse também é utilizado para monitorar obras da construção civil e mostrar sua evolução. Na agricultura também pode ser utilizado acompanhando o crescimento da lavoura. O efeito é sempre o mesmo, captar toda a mudança que pode ter levado meses, em apenas alguns minutos.
Requisitos para criar câmera de time lapse com o Raspberry Pi
Para seguir este tutorial, é necessário que tenha um Raspberry Pi e também um módulo de câmera fotográfica compatível. Lembrando que o Raspberry possui 3 módulos de câmeras oficiais o v1, v2 e v3 (além da HQ camera) disponíveis para serem adquiridos.
Também é possível utilizar câmeras, webcams e módulos de outros fabricantes (arducam, por exemplo).
Mas para seguir este passo a passo, estes módulos de câmera precisam ser compatíveis com o Raspberry Pi e com a biblioteca do raspistill.
Tutorial passo a passo para configurar um raspberry pi como uma câmera fotográfica de time lapse
Um resumo para configurar um raspberry como camera de time lapse:
- Instalar câmera no Raspberry
- Se conectar no Raspberry Pi: com teclado e monitor ou por SSH
- Executar o raspi-config e habilitar o módulo de câmera
- Criar um shell scrip configurado com o raspistill e timestamp para realizar as fotografias e inserir os nomes numéricos corretamente
- Criar um cron job para executar o shell script do item acima em intervalos de tempo pré-determinados (a cada 1 minutos por exemplo)
Passo 1 – Conexão ao Raspberry Pi
O primeiro passo é se conectar ao seu Raspberry por conexão SSH. Caso não tenha um nome de usuário e senha configurados, conecte pelo usuário padrão. Neste exemplo nosso raspberry está configurado no ip 192.168.1.52. Então o comando para conexão será:
ssh pi@192.168.1.52
A senha padrão do Raspbian recém instalado é:
raspberry
Um alerta, por padrão o raspberry não vem com o servidor SSH habilitado. Na hora de salvar a imagem do sistema operacional no cartão SD pelo Raspberry Pi Imager é possível solicitar que o servidor SSH fique habilitado já no primeiro boot.
Passo 2 (Opcional) – Configurar servidor de arquivos
Este é um passo opcional, mas garante grande facilidade na utilização do seu raspberry como uma câmera de time lapse. Configurando a pasta onde guarda as fotografias como uma pasta compartilhada pela rede, permite facilmente acessar suas imagens e movê-las para seu computador.
Caso tenha interesse nesta feature, basta seguir este tutorial opcional:
Passo 3 – Habilitar o módulo de câmera
Caso esteja utilizando o Camera Module, é necessário verificar se o mesmo está ativado. Lembrando que estamos partindo do princípio que você já tem o sistema operacional Raspbian instalado no seu Raspberry Pi. Execute o comando para abrir o gerenciador do raspi-config:
sudo raspi-config
Caso o comando acima não seja encontrado, é possível que esteja utilizando uma outra imagem do sistema operacional no Raspberry e não o Raspbian. Caso esteja utilizando o Ubuntu, é possível instalar o raspi-config com o comando:
sudo apt install raspi-config
Quando o menu no raspi-config abrir, caminhe no menu até a opção:
3 Interface Options
Em seguida selecione o item:
I1 Legacy Camera
Passo 4 – Testar a câmera
Após realizar os passos anteriores, é possível então realizar uma fotografia de teste.
Ao executar o comando abaixo, vamos solicitar que o Raspberry tire 1 fotografia e salve a mesma em arquivo. Se estiver conectado diretamente no raspberry (com teclado e monitor), sem ser por conexão SSH, a imagem da câmera irá aparecer na tela por alguns segundos.
raspistill -o fotografia.jpg
Para verificar se o arquivo foi criado, é possível pesquisar no diretório e verificar os arquivos presentes:
ls -l
Caso tenha configurado o servidor de arquivos em rede (NAS) no seu raspberry, como descrito no Passo 2 deste tutorial, basta mover a imagem para sua pasta compartilhada, para que possa verificar a mesma em seu computador:
mv fotografia.jpg /home/fileserver/shared
Caso não tenha o servidor de arquivo e gostaria de verificar a imagem criada em seu pc, é possível enviar a mesma por ssh (scp). Em seu computador pessoal (com Windows, Linux ou Mac) abre o prompt de comando (caso windows) ou o terminal (caso linux ou Mac). Neste exemplo vamos conectar no Raspberry com o usuário padrão “pi” e o mesmo está configurado no IP “192.168.1.52”. Lembre-se de atualizar estas informações para as definidas em seu raspberry.
Caso utilize o windows, abra o prompt e digite o comando:
scp pi@192.168.1.52:/home/pi/fotografia.jpg "%userprofile%\Downloads"
O comando acima vai conectar no Raspberry, acessar o arquivo da imagem e copiar ela para a pasta Downloads no seu computador configurado com Windows.
Caso utilize o Mac Os ou Linux, abra o terminal e digite o comando:
scp pi@192.168.1.52:/home/pi/fotografia.jpg ~/
O comando acima vai fazer uma cópia da fotografia na pasta pessoal do seu usuário.
Passo 4 – Criar shell script para padronizar nome das fotos
Como queremos criar um time lapse, é importante que as imagens estejam com nomes que indicam a sequência em que foram criadas. No bash, o código abaixo retorna a data no padrão: AAAA-MM-DD_HHMM
$(date +"%Y-%m-%d_%H%M")
Ou seja, vamos pegar o dia 17 de junho de 2023 como exemplo, e o horário sendo 18 horas e 4 minutos; o código acima vai gerar uma data no formato: 2023-06-17_1804. Se pensarmos então no nome da imagem, ela vai ter o nome de 2023-06-17_1804.jpg
Vamos então agora criar o arquivo de shell script que basicamente vai informar qual shell vamos utilizar e o caminho dele (bash), definir o formato do nome da imagem que queremos (AAAA-MM-DD_HHMM.jpg) e o comando para efetivamente fotografar com o módulo de câmera e salvar o arquivo em disco em um diretório escolhido.
Primeiro crie o arquivo e abra para edição com o comando:
nano fotografar.sh
Agora copie o código abaixo para dentro do arquivo:
#!/bin/bash DATA=$(date +"%Y-%m-%d_%H%M") raspistill -o /home/pi/$DATA.jpg
Caso queira salvar as imagens em outra pasta, basta editar a última linha definindo o caminho “/home/pi/$DATA.jpg”. Neste exemplo estamos salvando as imagens dentro da pasta home do usuário pi (/home/pi).
Caso tenha seguido o Passo 2 deste tutorial, você pode optar por salvar as imagens dentro da pasta compartilhada em rede do seu Raspberry (NAS). Mas primeiro crie uma pasta time lapse:
mkdir /home/fileserver/shared/timelapse
E deixe seu shell script com o caminho atualizado:
#!/bin/bash
DATA=$(date +"%Y-%m-%d_%H%M")
raspistill -o /home/fileserver/shared/timelapse/$DATA.jpg
Agora precisamos conceder permissão de execução para o shell script criado:
sudo chmod +x fotografar.sh
Para testar o shell script criado, é possível executá-lo uma vez com o comando:
./fotografar.sh
A fotografia será salva na pasta escolhida. Caso tenha algum erro, talvez tenha definido o nome da pasta incorretamente, ou a pasta não existe. Ou talvez não tenha permissão de escrita na pasta.
Passo 5 – Criar um cron job para fotografar automaticamente em um intervalo de tempo definido (time lapse)
No passo anterior criamos um shell script que a cada vez que é executado, fotografa apenas 1 vez. Mas queremos que o Raspberry fique fotografando automaticamente em um intervalo de tempo definido.
Uma possível solução é criar um cron job, e definir de quanto em quanto tempo ele deve executar o shell script fotografar.sh.
Neste exemplo, vamos criar um cron job para executar o script criado a cada minuto. Ou seja, nosso time lapse terá um intervalo de 1 minuto entre cada fotografia.
Para criar o cron job, execute o comando:
sudo crontab -e
Caso seja a primeira vez que está utilizando o crontab, o editor mais fácil de utilizar é o nano. Você será perguntado qual deseja escolher na primeira execução.
Agora caminhe até a última linha do arquivo e insira o código:
* * * * * sh /home/pi/fotografar.sh 2>&1
Agora salve e feche o arquivo (ctrl+o, Enter, Ctrl+x)
Repare o termo “2>&1” no fim da linha, esta parte do código indica para direcionar qualquer saída de erro que a execução possa ocasionar (stderr) para a saída padrão (stdout). Os caracteres “*” presente no início da linha são utilizados para definir a periodicidade de execução do código.
Caso queira uma periodicidade diferente de a cada minuto, basta verificar na documentação as variáveis que precisa substituir no local de “* * * * *”, para atender suas necessidades de time lapse.
Caso esteja utilizando o raspberry como um NAS (Passo 2), lembre-se de atualizar o caminho do script no crontab:
* * * * * sh /home/fileserver/shared/fotografar.sh 2>&1
Se estiver utilizando o raspberry como NAS (Passo 2), mova seu arquivo fotografar.sh para dentro da pasta compartilhada:
mv fotografar.sh /home/fileserver/shared/
Ter um NAS configurado no Raspberry Pi é uma facilidade, pois para desligar a execução do time lapse é muito mais simples. Como o arquivo de shell (fotografar.sh) está dentro da pasta “/home/fileserver/shared”, caso queira desligar a criação das fotografias, basta comentar as linhas de código dentro do arquivo (inserir “#” no começo de cada linha). Desta forma não precisa conectar por SSH no Raspberry, acessar a crontab, e comentar a linha que executa o script.
Se chegou até aqui, tudo pronto! As fotos consecutivas foram criadas, mas como montar o time lapse em vídeo?
Como criar time lapse em vídeo com fotos consecutivas utilizando ffmpeg
Passo 1 – Instalando ffmpeg no Raspberry Pi
Vamos utilizar o ffmpeg para criar o vídeo de time lapse no formato mpeg. Mas primeiro precisamos instalar o ffmpeg no Raspberry Pi:
sudo apt install ffmpeg
Agora vamos organizar as imagens, o ffmpeg é meio chato, e usa uma sistemática numerada e ordenada para acessar as imagens. Mas podemos também criar uma lista dos arquivos e passar por parâmetro para que o ffmpeg siga esta ordem.
Partindo do pressuposto que suas fotos do time lapse estão dentro da pasta:
/home/fileserver/shared/timelapse/
Vamos criar um shell script para criar a lista:
nano criar_lista_arquivos_timelapse.sh
Agora insira o texto abaixo dentro do script:
#!/bin/bash
\ls /home/fileserver/shared/timelapse/*.jpg | sed "s/^/file '/;s/$/'/" > lista_timelapse.txt
Grave e feche o arquivo (ctrl +o, enter, ctrl+x).
Garante permissão de execução para o shell:
sudo chmod +x criar_lista_arquivos_timelapse.sh
Agora crie o arquivo de shell script para executar o ffmpeg, carregar a lista de arquivos e gerar o time lapse:
nano criar_timelapse.sh
Insira o código dentro do arquivo:
#!/bin/bash ffmpeg -f concat -safe 0 -i lista_timelapse.txt video_timelapse.mpeg
Grave e feche o nano (ctrl +o, enter, ctrl+x).
Garante permissão de execução para o shell:
sudo chmod +x criar_timelapse.sh
Com tudo pronto, primeiro crie a lista de arquivos que vão gerar o vídeo de time lapse com o comando:
./criar_lista_arquivos_timelapse.sh
Você pode abrir o arquivo criado para conferir se a lista está correta.
O próximo passo é executar o shell script para criar o vídeo de time lapse:
./criar_timelapse.sh
Dependendo da sua versão do raspberry e do número de imagens, o procedimento acima pode demorar bastante. Sugiro começar com um teste mais rápido, com uma gravação de 60 imagens (1h de time lapse = 1 foto por min = 60 imagens)
Executei o procedimento acima em um Raspberry Pi Zero W, com o câmera module V2 e demorou poucos minutos para o arquivo de vídeo ficar pronto.
Dependendo do programa player de vídeo que for executar, ele pode reclamar do formato do time lapse criado (mpeg). É possível alterar alguns parâmetros na execução do ffmpeg a fim de mitigar estes problemas também e aumentar a compatibilidade.
Conclusões
Neste passo a passo vimos como configurar o Raspberry Pi para que este funcione como uma câmera de time lapse. Foi possível também utilizar o próprio raspberry para gerar o vídeo de time lapse junto com o ffmpeg.
A etapa opcional de criar uma pasta compartilhada para transferência de arquivos (NAS) é muito útil, para gerenciar as imagens e vídeos criados, sendo uma etapa altamente recomendada.
O ffmpeg também permite customizações de formato de saída de vídeo, o que permite otimizar ainda mais o processo. É possível também desabilitar a criação do canal de áudio e aumentar a compatibilidade do arquivo para diversos players de vídeo.
Caso tenha alguma dúvida ou dificuldade em alguma etapa, basta informar nos comentários! Farei o possível para ajudar!