Câmera all sky e time-lapse

Uma câmera de céu inteiro (“all sky” ou “whole sky”) é uma câmera para capturar uma fotografia de todo o céu, com o horizonte como borda. Os primeiros modelos eram baseados em uma série de fotos com lentes inclinadas para o horizonte a uma elevação de 45 graus. Com uma lente cobrindo um campo angular de 90 graus, essa câmera girava em torno de um eixo vertical. Atualmente, existem diferentes tipos de instrumentos para registrar o céu com objetivo meteorológico, como:

  • Whole/All sky camera (WSC) – câmera de vídeo digital colorida montada com uma lente olho de peixe (campo de visão de 180°) apontada para o zênite
  • Total sky imager (TSI) – câmera de vídeo digital colorida montada para olhar para baixo em um espelho curvo, visando fornecer uma visão de horizonte a horizonte do céu (campo de visão efetivo de 160°)
  • Whole sky imager (WSI) – medir radiações em faixas distintas de comprimento de onda em todo o hemisfério
  • Ground-based cameras – pode ser um nome geral para qualquer uma das outras ou definir especificamente uma câmera apontada para uma região do céu

Câmeras “all sky” geralmente são utilizadas em astronomia e em meteorologia, particularmente para o estudo de nuvens. Ela pode ser equipada com um dispositivo de rastreamento solar para bloquear a forte luz do sol. Visando minimizar o efeito da iluminação excessiva, também podem ser obtidas duas imagens quase simultâneas usando uma abertura menor em uma delas, para captar objetos brilhantes, ou fazer uso de técnicas como HDR, que permitem tirar fotografias de alta faixa dinâmica.

Imagem obtida com câmera all sky. Fonte: LABREN/INPE
Imagem obtida com câmera all sky. Fonte: LABREN/INPE

O “time-lapse” é um processo cinematográfico em que a frequência de cada foto ou quadro (“frame”) por segundo de filme é muito menor do que aquela em que o filme será reproduzido. Ou seja, quando visto a uma velocidade normal, o tempo parece correr mais depressa e saltar (“lapsing”), sendo uma ferramenta muito útil para mostrar eventos que demoram muito tempo para acontecer em um curto período.

Uma das formas de unir várias imagens formando um vídeo time-lapse é através do software FFmpeg, que é composto de uma coleção de software livre e bibliotecas de código aberto (como a libavcodec). O FFmpeg (nome que veio da sigla em inglês para “fast forward”) grava, converte e cria stream de áudio e vídeo em diversos formatos, sendo executado em linha de comando.

Considerando que suas imagens tenham o padrão de nomes “20181206*.jpg”, você pode executar o seguinte comando para juntar todos os arquivos com esse padrão em um vídeo chamado “teste.mp4” (estando no mesmo diretório dos arquivos):

ffmpeg -pattern_type glob -i "20181206*.jpg" -q:v 0 -filter:v "setpts=4*PTS" teste.mp4

O parâmetro “-pattern_type glob” indica que as imagens devem ser listadas para uso considerando um padrão de nomes; “-i” contém esse padrão. Para manter a qualidade original das imagens, é aplicado o parâmetro “-q:v 0”. Finalmente, o filtro definido multiplica por 4 o tempo do vídeo original, ao multiplicar o número de frames por 4. Outro filtro, de “montion interpolation”, produz resultados interessantes de continuidade de movimento: “minterpolate=’mi_mode=mci:mc_mode=aobmc:vsbmc=1:fps=120′”.

Se for utilizar outro padrão de nomes dos arquivos, esse link tem informações interessantes: FFMPEG An Intermediate Guide/image sequence. Para estampar as imagens usando shell script, veja o código no post Como criar vídeos time-lapse.

O vídeo a seguir é um exemplo de uma sequência de imagens obtidas com câmera all sky a cada 5 minutos, colapsadas em um vídeo usando o comando acima para formar um vídeo time-lapse:

Observa-se o ciclo diurno sobre a unidade do INPE de São Martinho da Serra em 6 de dezembro de 2018. Com a aproximação de uma frente fria, observam-se nuvens cumulus (os elementos mais individualizados) e cirrostratus: uma camada horizontal branca formada de cristais de gelo, que geram o círculo luminoso ao redor do Sol, chamado halo.

Esse outro vídeo também mostra uma sequência de imagens do mesmo local, mas com todas as fotografias tiradas do mesmo horário, próximo ao meio dia (1500 UTC). A primeira e a última imagens são dos dias em que ocorre o solstício de verão no hemisfério sul (21 de dezembro de 2018 e 2019). Desse modo, pode-se observar o movimento do sol a cada dia ao longo de um ano – do centro da imagem para a parte esquerda superior, atingindo o ponto mais baixo no solstício de inverno (21 de junho de 2019) e voltando ao ponto inicial no solstício de verão. Não se assuste com o passarinho nem com a sujeira dele em algumas imagens da lente 😛

Já esse último vídeo é uma sequência de imagens em Caicó/RN, começando no solstício de inverno (21 de junho de 2019) até o mesmo evento do ano seguinte. O movimento aparente do sol no céu ao longo do ano acontece ao contrário do outro vídeo por causa disso – já que os dois locais estão no hemisfério sul. As imagens têm menos nuvens e sem interferências aviárias – só com uma aranha.

Para selecionar as imagens de um mesmo horário em diferentes dias, foi utilizado o script a seguir. Como as imagens estavam separadas por pastas para cada dia e em um servidor remoto, foi feito uso de métodos no python que permitissem trabalhar com os arquivos dessa forma. Assim, ele deve fazer uma lista com os dias (diretórios) disponíveis e fazer uma verificação se o arquivo existe.

import os
import subprocess
import pipes

def exists_remote(host, path):
    '''
    Test if a file exists at path on a host accessible with SSH
    '''
    status = subprocess.call(
     ['ssh', host, 'test -f {}'.format(pipes.quote(path))])
    if status == 0:
        return True
    if status == 1:
        return False
    raise Exception('SSH Failed')

path = '/path'
host = '[email protected]'
cmd = 'ssh {0} ls {1}'.format(host, path)
list_files = os.popen(cmd).read()
list_files = list_files.splitlines()

for dir in list_files:
    # 11 - normal exposure
    datetime = '{0}150000_11'.format(dir)
    filename = '{0}/{1}/{2}.jpg'.format(path, dir, datetime)
    print(filename)
    if exists_remote(host, filename):
        cmd = 'rsync -azv {0}:{1} figs'.format(host, filename)
        os.system(cmd)
        #break
    else:
        print('Whitout image')
    #exit()

A consulta remota é feita usando ssh, e a cópia, usando rsync.

Compartilhe :)

One comment

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.