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.

Raspberry Pi Zero W - Configurado como Câmera de Time Lapse

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

Raspberry Pi Zero W - Configurado como Câmera de Time Lapse e com suporte de energia por powerbank

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:

  1. Instalar câmera no Raspberry
  2. Se conectar no Raspberry Pi: com teclado e monitor ou por SSH
  3. Executar o raspi-config e habilitar o módulo de câmera
  4. Criar um shell scrip configurado com o raspistill e timestamp para realizar as fotografias e inserir os nomes numéricos corretamente
  5. 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

Raspberry Pi Time Lapse - Executar o 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

Raspberry Pi Time Lapse - Executar o raspi-config - ir menu interface options
Raspberry Pi Time Lapse - Executar o raspi-config - habilitar 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

Raspberry Pi Time Lapse - realizar uma fotografia para testar a camera

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

Raspberry Pi Time Lapse - Mover foto criada para pasta compartilhada do NAS

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.

Raspberry Pi Time Lapse - copiar foto do raspberry para windows utilizando ssh scpRaspberry Pi Time Lapse - verificar a foto copiada do raspberry

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")

Raspberry Pi Time Lapse - padrão timestamp a ser adotado

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

Raspberry Pi Time Lapse - criar arquivo shell script 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).

Raspberry Pi Time Lapse - copiar código para dentro do arquivo

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

Raspberry Pi Time Lapse - criar pasta timelapse dentro da pasta compartilhada do NAS

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

Raspberry Pi Time Lapse - copiar código para dentro do arquivo caso tenha seguido o PASSO 2 e tenha configurado o NAS

Agora precisamos conceder permissão de execução para o shell script criado:

sudo chmod +x fotografar.sh

Raspberry Pi Time Lapse - garantir permissão de execução ao arquivo de script criado

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.

Raspberry Pi Time Lapse - executar o script fotografia.shRaspberry Pi Time Lapse - executar o script fotografia.sh e ver o resultado na pasta do NAS

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

Raspberry Pi Time Lapse - criar crontabRaspberry Pi Time Lapse - editar arquivo crontab

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.

Raspberry Pi Time Lapse - editar arquivo crontab

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

Raspberry Pi Time Lapse - editar arquivo crontab - modelo para setup como NAS

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/

Raspberry Pi Time Lapse - mover script de fotografar.sh para a pasta compartilhada do NAS para facilitar gerenciamento

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

Raspberry Pi Time Lapse - 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

Raspberry Pi Time Lapse - criar shell script que cria a lista de arquivos que farão parte do time lapse

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).

Raspberry Pi Time Lapse - critando shell script para criar lista de fotos para timelapse

Garante permissão de execução para o shell:

sudo chmod +x criar_lista_arquivos_timelapse.sh

Raspberry Pi Time Lapse - permitiar permissão de execução no arquivo de shell script

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

Raspberry Pi Time Lapse - criar novo arquivo de shell script denominado 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).

Raspberry Pi Time Lapse - editando o arquivo de shell script que realiza a criação do time lapse de vídeo com ffmpeg

Garante permissão de execução para o shell:

sudo chmod +x criar_timelapse.sh

Raspberry Pi Time Lapse - garantir permissão de execução script de criar time lapse

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.

Raspberry Pi Time Lapse - criar lista de arquivos para o timelapse executando o script criado

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.

Raspberry Pi Time Lapse - criar time lapse executando o scriptRaspberry Pi Time Lapse - arquivo de time-lapse criado com sucesso!

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!