Como extrair dados exif de arquivos de imagens para montar uma base de dados ou planilha.

O exiftool é uma ferramenta de nível avançado, desenvolvida por Phil Harvester (em linguagem Perl), desde 2003.
O utilitário tem desenvolvimento ativo e versões para Linux, MacOS e Windows.

Links para download, ao final do artigo.
Este post não vai mostrar como desenvolver o banco de dados ou a planilha, em si… mas apenas como obter a base de dados, em texto, que você precisa para analisar suas imagens dentro de uma planilha completa ou dentro de um banco de dados de verdade.

O exiftool permite verificar imagens recursivamente em um diretório (pasta) e oferece suporte a aproximadamente 200 tipos de arquivos.
Dentre estes, a ferramenta é capaz de ler dados EXIF de arquivos JPEG e RAW de diversas marcas e modelos de câmeras.
Nos meus exemplos, vou mostrar predominantemente o uso do utilitário em arquivos .CR2 (um dos formatos RAW da Canon).

Se você tiver dúvidas, leia outros artigos sobre o exiftool, neste mesmo site.

Como usar o exiftool recursivamente

Abra um terminal e vamos à diversão! 😉
Em outros posts, mostrei como rodar o utilitário sobre um único arquivo.

exiftool nome-do-arquivo

Também mostrei como usar o find para executar o programa sobre uma grande quantidade de arquivos, recursivamente, espalhados por vários subdiretórios.
Desta vez, vamos dispensar o find — mas o comando grep ainda será usado para refinar nossos resultados.

Para rodar o exiftool recursivamente, a partir do diretório atual, use a opção -r seguida do nome do diretório ou (no Linux e no MacOS) use um ‘./’:


exiftool -r ./ 

A depender da quantidade de arquivos presentes, a execução pode ser um pouco demorada.

Como refinar as buscas para obter resultados mais enxutos

Como você deve ter notado, o aplicativo possui vários campos, dentro dos quais escreve as informações obtidas dos arquivos.

Você pode fazer uma filtragem dos resultados por strings (usando o grep ou não) ou pelas tags (etiqueta) para ser encontrada e exibida.
Os meus exemplos estão aí para serem editados, alterados para atender às suas necessidades.

Como restringir a busca a um tipo de arquivo (cr2, no meu caso) dentro de um diretório (Imagens/junho) recursivamente (-r):


exiftool -ext cr2 -r Imagens/junho/

Veja como restringir a sua busca a apenas um tipo de lente:


exiftool -ext cr2 -T -r ./ | grep "18.0 - 55.0"

Se você usa câmeras Canon, pode obter listagens com o formato padrão da marca, acrescentando ‘-l -canon’ à linha de comando:


exiftool -ext cr2 -l -canon -r 05/

No exemplo, acima, ’05/’ é o nome da pasta em que a busca está sendo feita.


exiftool -T -aperture -ext cr2 -r 05/

Você pode ignorar os outros campos de dados EXIF e listar apenas os nomes dos arquivos que satisfaçam alguma condição:


exiftool '-*EF75-300mm*' -r 05/

Como passar os resultados para uma planilha

Os resultados podem ser formatados, de maneira bem básica, com as opções -T ou -t e serem gravadas em um arquivo. Para gravar o resultado da sua consulta em um arquivo, basta acrescentar ‘> nome-do-arquivo.txt’ ao final da linha de comando.
Este arquivo poderá ser aberto por qualquer aplicativo de planilhas, posteriormente.


exiftool -ext cr2 -t -l -canon -r 05/ > maio2018.txt

Se preferir, use ‘-common’ para restringir o resultado às meta informações mais comuns:


exiftool -ext cr2 -t -common -r 05/ > maio2018.txt

… ou use ‘-T’ (em maiúscula) no lugar de ‘-t’, para obter uma separação dos dados em tabela. Acho esta formatação melhor para trabalhar em planilhas — para determinar a média de abertura que uso, quantas vezes usei uma determinada lente etc.
planiha libreoffice calc

Com um script (na sua linguagem preferida) também é possível iniciar e continuar alimentando um banco de dados com os dados EXIF das suas fotos.

referências

Usuários Linux já têm o exiftool instalado, na maioria das grandes distribuições.
Quem usa MacOS e Windows, pode baixar do site oficial: https://www.sno.phy.queensu.ca/~phil/exiftool/.

Use o exiftool para descobrir como você fotografa

O exiftool é uma ferramenta CLI voltada para a obtenção de informações EXIF ou meta tags de arquivos diversos.
Se você usa MacOS ou Windows, baixe sua cópia do programa no site oficial (link ao final do artigo).

Se você usa Linux (que nem eu!), ele provavelmente já estará instalado aí, com suporte a aproximadamente 200 tipos de arquivos.

Neste universo de possibilidades, a ferramenta suporta a leitura de dados contidos em arquivos de imagens JPEG, bem como, em arquivos RAW de vários fabricantes.

O próprio Flickr usa o exiftools para manipular e analisar as informações das imagens de suas comunidades.

Neste post, vou mostrar como usar o programa para obter informações, de dentro dos arquivos. Vou, ainda, mostrar como associar o utilitário aos comandos grep e find, para refinar a sua busca e obter apenas resultados relevantes para o seu contexto.

Se você já tem dezenas de milhares de fotos e já usou várias lentes para produzir suas imagens, com estas ferramentas é possível montar algumas estatísticas sobre os seus hábitos ao fotografar.

Este tipo de informação pode ser muito útil para quem pensa em comprar uma nova lente, mas se encontra em dúvida sobre se o investimento irá ser realmente útil ou não.

Em outras palavras, faz sentido conhecer a distância focal que você prefere usar — mesmo nas lentes de zoom — antes de começar a analisar as opções disponíveis nas lojas.

Por exemplo, se você já se encontra há um ano usando uma das lentes que costuma vir com os kits de câmera e está pensando em qual poderia ser a próxima aquisição, seria muito interessante saber como você prefere trabalhar antes de tirar a carteira do bolso.

As lentes do kit costumam ser lentes de zoom, com distâncias focais variando entre 18-55mm, 55-250mm ou 75-300mmm (pelo menos, no caso da Canon).
Dentro da distância focal da lente do seu kit, você deve estar usando uma ou outra com predominância.

Isto quer dizer que, se você costuma fotografar frequentemente a aproximadamente 40mm, esta poderia ser a lente prime a ser sondada, na próxima compra.

As ferramentas descritas neste texto já foram abordadas com maior profundidade em outros posts, caso você queira saber um pouco mais sobre cada uma delas:

  1. O comando grep
  2. O comando find
  3. O comando exiftool

Execute o exiftool diretamente no arquivo

A ferramenta pode ser simplesmente aplicada a um ou vários arquivos de um diretório:


exiftool minhasfotos/img_2365.cr2

Para analisar todas os arquivos do diretório (ou da pasta), use-a assim:


exiftool minhasfotos/*.cr2

Altere os meus exemplos à sua realidade, aí.
Este segundo comando pode ser modificado para mostrar resultados mais específicos.
Veja como obter os valores das aberturas (aperture) usadas nas fotografias desta mesma pasta:


exiftool minhasfotos/*.cr2 | grep "Aperture" 

Note que os arquivos .cr2 correspondem aos “arquivos crus” das câmeras Canon. Se você tem arquivos com extensões diferentes, adeque o comando ao seu caso.
A tag (ou etiqueta) “Aperture” também pode variar em função das preferências do fabricante.
Se você fotografa sempre em JPEG, estas informações também estarão lá.
Fique atento.
Decida qual a meta tag mais importante para você e faça a sua busca.

O comando find pode ser usado para serviço mais pesado. No exemplo que segue, todas as pastas serão vasculhadas, recursivamente, a partir do diretório atual.

Neste caso, o resultado pode demorar bastante — vai depender da quantidade de imagens que você tem aí.
No meu caso, são milhares de imagens, dentro do diretório ‘Imagens’, espalhadas em vários subdiretórios. Decidi por todas as referências a abertura (Aperture) em um arquivo aberturas.txt — para verificar posteriormente, em separado. Ficou assim:


find ./ -name '*.cr2' -exec /usr/bin/exiftool {} \; | grep "Aperture" > aberturas.txt

O arquivo ficou com aproximadamente 8 mil linhas, embora sejam apenas 1564 arquivos de imagens RAW — mas a palavra “aperture” aparece, em média, mais de 4 vezes no resultado do exiftool de cada um.

Para saber quantas vezes usei a abertura 1.8, posso recorrer novamente ao grep:


cat aberturas.txt | grep "Aperture                        : 1.8"| wc -l

456

Este resultado mostra que o valor é usado em quase 1/3 das fotos.

Como descobrir a distância focal favorita nas suas fotos

Este é um dado bastante interessante, para quem pretende comprar uma lente nova — principalmente se for uma fixa (ou prime).
Saber qual a distância focal (ou focal length) que você mais usa nas suas sessões, pode ajudar determinar qual lente seria mais útil para você.
Para encontrar o meu resultado, novamente usei aqueles 3 comandos:


find ./ -name '*.cr2' -exec /usr/bin/exiftool {} \; | grep "Focal Length                    :" > distfocal.txt

No meu caso, o campo “Focal Length” se repete para cada foto em uma linha em que é dada uma distância focal equivalente. Para excluir esta redundãncia, acrescentei um “grep -v” ao final da linha de comando:


find ./ -name '*.cr2' -exec /usr/bin/exiftool {} \; | grep "Focal Length                    :" | grep -v "equivalent" > distfocal.txt

Desta forma, consigo obter um arquivo distfocal.txt com exatamente 1564 linhas — número igual ao de arquivos de imagens RAW .cr2.

Uso muito a lente do kit 75-300mm, e creio que seria interessante saber, exatamente, qual a distância focal mais usada dentro destes limites.
Esta informação pode ajudar a determinar qual lente prime seria mais útil para o meu caso: 85mm, 100mm, 135mm etc.

Conclusão

Por um lado, acredito que 1564 fotos pode ser um número muito pequeno para ser analisado, com o objetivo de determinar qual a sua distância focal favorita.
Isto varia de pessoa para pessoa.
Neste momento, acho os meus dados insuficientes para determinar “a minha maneira favorita” de fotografar.

Levar os dados obtidos para dentro de uma planilha é uma alternativa mais eficiente para obter informações sobre a maneira como você usa seu equipamento.

Eu prefiro sair para uma sessão de fotos, com apenas uma lente de zoom e brincar bastante.
Ao voltar, transfiro minhas imagens para o computador. Em seguida, rodo o exiftool, combinado com o grep, na pasta das fotos e observo as minhas estatísticas.

Me conte se você já descobriu qual a sua maneira favorita de fotografar e qual a sua lente ou distância focal preferida 😉

Link para o site oficial de downloads e documentação: https://sno.phy.queensu.ca/~phil/exiftool/.

Leia também meus outros artigos sobre o exiftool.

Use o exiftool para extrair detalhes sobre seus arquivos multimídia

O exiftool é uma ferramenta CLI, que pode ser usada para obter informações de diferentes tipos de arquivos de áudio, imagem e vídeo.
Pode também ser usado para alterar ou acrescentar novos dados meta em seus arquivos.

Neste post, vou mostrar como a ferramenta pode ser usada para extrair algumas informações.
Usarei como exemplo alguns arquivos de imagem RAW, mas os princípios são os mesmos para outros tipos de arquivos, tais como JPEG, MP3, FLAC, AVI, MPEG etc.

Consulte o manual (man exiftool) para obter uma lista de tipos de arquivos suportados — são aproximadamente 200.

Relação de tipos de arquivos suportados pelo exiftool
Clique para ver detalhes.

Quem tem vários arquivos de áudio (MP3, OGG, FLAC etc) pode editar nomes de autores, de álbum etc dentro dos arquivos. Estas informações (meta tags ou etiquetas meta), em geral, são lidas e exibidas no visor do seu MP3 Player.
Nas câmeras, estas informações são armazenadas nos arquivos “crus” ou nos JPEGS — e costumam dar informações importantes como data, local, distância focal da lente etc. relacionadas às suas fotos.

Canon JPEG meta tags
Clique para ver detalhes.

O acesso a estas informações ajuda o seu sistema a organizar arquivos de mídia a partir das informações contidas neles.

Como obter informações de arquivos de mídia a partir do exiftool

No gerenciador de arquivos Nautilus, estas informações podem ser obtidas sem o uso do exiftool. Para isso, selecione o arquivo e tecle Ctrl + Enter sobre ele. As meta tags costumam ser listadas na última aba do painel de informações do arquivo.

Na CLI (linha de comando), o programa oferece uma interface e um uso bem simplificado. Basta executá-lo, seguido do nome de um arquivo:


exiftool img_4380.cr2

No exemplo, acima, rodei o exiftool em um arquivo de imagem RAW da Canon.

O comando grep pode ajudar a refinar o resultado, listando apenas as informações que se deseja obter. No exemplo, a seguir, o comando é usado para extrair a informação sobre a duração de uma música, de um arquivo MP3.


exiftool ~/Música/Chico\ Buarque/Caravanas/04\ -\ Jogo\ de\ Bola.mp3 | grep -i duration

Duration                        : 0:02:51 (approx)

Para obter informações de arquivos de vídeo ou imagem siga a mesma lógica.
Abaixo, veja como obter informações sobre a lente usada para tirar uma foto:


exiftool ./06/05/img_4380.cr2 | grep -i lens

Lens Type                       : Canon EF 17-35mm f/2.8L USM or Sigma Lens
Lens Info                       : 30mm f/?
Lens Model                      : 30mm
Lens Serial Number              : 0000000000
Lens                            : 30.0 mm
Lens ID                         : Sigma 30mm f/1.4 EX DC HSM
Lens                            : 30.0 mm (35 mm equivalent: 47.2 mm)

A ferramenta pode ser usada também para levantar dados de arquivos remotos, em sites da Internet. Para isto, você usa o piping acompanhando o comando do curl, assim:


curl -s https://assets.ubuntu.com/v1/8dd99b80-ubuntu-logo14.png | exiftool -fast -

ExifTool Version Number         : 11.00
File Type                       : PNG
File Type Extension             : png
MIME Type                       : image/png
Image Width                     : 540
Image Height                    : 243
Bit Depth                       : 8
Color Type                      : RGB with Alpha
Compression                     : Deflate/Inflate
Filter                          : Adaptive
Interlace                       : Noninterlaced
SRGB Rendering                  : Perceptual
Background Color                : 255 255 255
Pixels Per Unit X               : 2834
Pixels Per Unit Y               : 2834
Pixel Units                     : meters
Modify Date                     : 2011:06:28 17:04:37
Image Size                      : 540x243
Megapixels                      : 0.131

Use o shotwell para transferir imagens da sua câmera para o computador

O aplicativo Shotwell faz parte dos repositórios oficiais de várias distribuições GNU/Linux e pode ser usado para visualizar, organizar e editar suas imagens.
De fato, ele pode vir pré-instalado apenas na versão “visualizador” em algumas distribuições.

Se você não o tiver instalado aí, use o gerenciador de pacotes da sua distro para encontrá-lo.
O visualizador básico, contudo, se já estiver presente, é o suficiente para quem apenas quiser transferir arquivos de imagens de um cartão de memória ou diretamente da câmera.
Shotwell install

Transferência de imagens

Usualmente, ao inserir um cartão (micro)SD no leitor do laptop, o Nautilus irá abrir o seu conteúdo e mostrar um botão de sugestão “para abrir as imagens no Shotwell”, conforme a imagem abaixo.
Shotwell botão no nautilus

Ao clicar no botão “Shotwell”, o visualizador irá exibir as últimas imagens importadas.

Para acessar o cartão de memória, o dispositivo de armazenamento externo ou a câmera, clique em “Mass storage…” dentro da aba lateral, à esquerda.

A depender da velocidade de acesso do dispositivo, pode demorar um pouco para exibir os arquivos de imagens disponíveis para transferência.
janela do shotwell

Neste ponto, eu costumo clicar em “Importar todas”, no rodapé (à direita) da janela do Shotwell.
Com esta opção, apenas os arquivos que ainda não foram transferidos, serão baixados.
Não se preocupe. Você não vai acabar com arquivos redundantes no seu computador.

Quando ele terminar a importação, irá perguntar se mantém os arquivos no dispositivo de armazenamento externo ou acoplado. É seguro selecionar “Apagar”, para liberar espaço.
Se houver arquivos redundantes, você será avisado também.
arquivos redundantes

Na aba “Última importação”, são mostrados os arquivos que você transferiu recentemente.

Você também pode ver os seus arquivos dentro do gerenciador de arquivos da sua distro. Como comportamento padrão, o Shotwell irá criar uma pasta com o ano constante nas informações de gravação de seus arquivos (2018, 2019 etc) dentro da pasta Imagens, no seu sistema.

Outras subpastas (subdiretórios) serão criados para os meses e dias relativos a cada imagem.

O Shotwell lida com seus arquivos RAW

Se você costuma fotografar em RAW, o Shotwell irá baixar suas imagens neste formato, sempre retirando a versão em JPEG, embutida (embedded) no arquivo “cru”.
Assim, o gerenciador de arquivos irá exibir as duas versões (RAW e JPEG) lado a lado na pasta.
Ubuntu Nautilus

Este comportamento torna mais ágil a análise das imagens, de outros visualizadores que só podem ler JPEG. Este formato é carregado muito mais rápido, o que permite fazer uma pré-seleção (i.e. jogar fora o que você não quer, por exemplo) muito mais eficiente e ágil.

Atualmente, o Shotwell tem suporte a edição das imagens RAW — não destrutiva, claro.

Ou seja, o Shotwell não modifica suas fotografias originais.
As edições (corte, ajuste de cores etc.) são guardadas em um arquivo à parte, enquanto o original permanece intocado.
Ao carregar a imagem novamente, o banco de dados de retoques será consultado para mostrá-la com as alterações que você fez.
Isto quer dizer que sempre será possível desfazer as alterações feitas em suas imagens, usando o Shotwell.

A tecla Shift também pode ser usada, para mostrar as imagens na tela, conforme estavam originalmente.

Como evitar arquivos RAW corrompidos e danificados

Recentemente, tive que lidar com uma grande quantidade de arquivos de imagens RAW corrompidos durante o processo de transferência do cartão de memória para o HD interno do meu laptop.
Para contextualizar, a câmera usada era uma Canon EOS Rebel T6 (ou 1300D, a depender do mercado em que é comercializada). Mas a culpa não é da câmera — pelo menos não neste caso.

O problema ocorria tanto no Windows 10, como no uso do Linux (Debian 10 e POP_OS). Não testei no MacOS. Sorry…

Por que as imagens se corrompem durante a transferência

Vários fatores podem concorrer para estragar as suas imagens RAW durante a transferência do cartão para o computador.

Este tipo de imagem é muito maior que as imagens em JPEG e carregam uma quantidade muito maior de informações sensíveis. Se algo se perder no caminho, a imagem inteira poderá restar inutilizada.

Atualmente, prefiro usar sempre o Shotwell para fazer as minhas transferências. Uma das boas características do programa é que ele extrai o JPEG embutido no RAW e grava no mesmo diretório para o qual está copiando seus arquivos.
No meu caso, isto ajudava a ter pelo menos uma cópia em JPEG usável, quando o RAW estava corrompido.
Ubuntu Nautilus

Arquivos “crus” .CR2 e .CR3 da Canon contém imagens JPEG embutidos e já tratados pelo processamento interno da sua máquina fotográfica. Por este motivo, não é necessário usar a configuração de registrar em RAW+JPEG, presente no menu do seu equipamento.
O único efeito desta redundância é sobrecarregar o “buffer” da sua máquina, o que diminui a velocidade do modo contínuo (ou burst mode).

Eu vou listar algumas situações que podem causar danos aos seus arquivos durante a transferência:

  1. Ao usar um leitor de cartões USB externo, você tem pelo menos 3 conexões críticas pelas quais os dados precisam passar: do cartão para o leitor; do leitor para o cabo USB; do cabo USB para o computador. Se houver algum problema em um destes pontos, você provavelmente terá alguns arquivos estragados.
  2. Se você usa um cartão de memória “combo”, ou seja um micro SD dentro de um adaptador SD, adicione uma conexão a mais ao problema.

Para mim, o estrago ocorria por uma sucessão de fatores. Usar um cartão combo, no meu laptop Dell, era um deles.
Como o leitor embutido do notebook não é muito apertado, provavelmente permite alguma folga entre o microSD e o invólucro adaptador SD, que causava pequenas interrupções nos contatos e, consequentemente, interrompia o fluxo de dados.

Como resolvi o problema

Eu pude resolver o problema com as seguintes ações:

  • Usar um adaptador SD/MicroSD mais justo/apertado.
  • Usar um leitor externo com uma entrada muito apertada e que não permite folgas entre cartão, adaptador e leitor USB.
  • Substituir o MicroSD com adaptador por um cartão SD “puro”, de alta velocidade. Neste caso, ele funcionou perfeitamente, ao ser conectado ao leitor interno do laptop.

Qualquer uma destas medidas resolveu o problema de arquivos RAW corrompidos para mim.

Espero que este relato possa ajudá-lo(a) a resolver o seu problema, aí.

Referências

Câmera Canon EOS Rebel T6: https://amzn.to/2k9JyOc.
Cartão SDHC Extreme: https://amzn.to/2LiJO9V.