De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


Integrando a câmera Nikon D90 a um desktop livre

Colaboração: Bruno Buys

Data de Publicação: 14 de março de 2010

Recentemente adquiri uma câmera digital reflex Nikon D90. Essa câmera não é uma automática "aponte-e-clique": ela pertence ao grupo das semi-profissionais. Tem diversos recursos avançados, grava imagens em modo raw e possui lentes intercambiáveis.

O objetivo dessa dica é contribuir para desfazer a idéia de que não dá para usar software livre com esta classe de equipamentos, ou que não existem softwares adequados para uso pro ou semi-pro, ou que o GNU/Linux não está pronto para o desktop publishing e artes gráficas. Essa noção, embora não surpreendentemente, ainda está muito presente internet afora.

Digo que não surpreende porque o suporte oficial dado pelo fabricante ainda é restrito aos sistemas proprietários. Ao navegar pelo CD fornecido em conjunto, só se vê suporte a eles, e nenhuma informação que ajude a integrar e usar o equipamento com software livre.

Se você possui uma câmera digital reflex, mesmo que não seja a D90 (outra marca e modelo), ainda pode se beneficiar com essa dica. Alguns procedimentos e informações de referência que uso aqui podem ser facilmente adaptados.

Mãos à obra:

Dizer que a câmera trabalha bem em conjunto com software livre significa dizer que existem programas livres capazes de lidar com todos os arquivos e informações que a câmera gera. Em outras palavras, precisamos de programas para:

  1. Lidar com imagens raw e jpeg.
  2. Exibir e manipular filmes .avi.
  3. Exibir e manipular metadados em vários formatos.

1. Imagens

Bom, imagens jpeg são facilmente tratáveis através de várias ferramentas tradicionais de software livre, e nenhuma distribuição atual carece de suporte a elas. Portanto passo direto para o formato raw.

O raw pode ser melhor descrito como um tipo de arquivo, não um formato específico. Cada fabricante possui o seu: Nikon com o NEF, Canon com os CRW e CR2, MRW da Minolta, etc. O que eles têm em comum é o fato de que são uma espécie de "negativo digital": eles contêm toda a informação capturada pelo sensor, sem nenhuma edição feita pelo processador da câmera. Até pouco tempo atrás podia se dizer também que eram formatos sem perda (lossless), mas isso está mudando, e já existem formatos raw com compactação com perda de informação.

A maior vantagem de se configurar a câmera para usar o formato raw é que o processo de conversão do raw para o formato de saída (tiff, ou mesmo jpeg) pode ser feito no computador, sob controle do fotógrafo. Tornando-se assim mais uma etapa na elaboração da imagem final, e cujo domínio permite grande poder de influir no resultado.

O suporte a raw no mundo livre é baseado no software dcraw (http://www.cybercom.net/~dcoffin/dcraw). Ele funciona decodificando uma infinidade de formatos diferentes, de praticamente todos os fabricantes de câmeras.

O dcraw é um programa de linha de comando. Usá-lo diretamente tem a vantagem de permitir que você fique na vanguarda do desenvolvimento. O autor, Dave Coffin, é muito produtivo, e lança versões novas freqüentemente.

Baixando a última versão:

  wget http://www.cybercom.net/~dcoffin/dcraw/dcraw.c

Compilando:

  gcc -o dcraw -O4 dcraw.c -lm -ljpeg -llcms

ou

  gcc -o dcraw -O4 dcraw.c -lm -DNO_JPEG -DNO_LCMS

(sem suporte ao Little CMS)

Depois disso, copie o executável criado para algum lugar no seu $PATH.

Usando o dcraw:

Como toda ferramenta de linha de comando, o dcraw é bom para tratamentos em lotes.

Converte uma imagem raw da D90 em ppm:

  dcraw dsc_0001.nef

Converte para tiff em vez de ppm:

  dcraw -T dsc_0001.nef

Converte uma imagem raw em jpg: (nesse caso não é bem uma conversão. O que acontece é que as imagens raw geradas por câmeras digitais possuem uma miniatura embutida. só precisamos extrai-la)

  dcraw -e dsc_0001.nef

A extração da miniatura é muito mais rápida do que a revelação do raw. Na revelação o dcraw faz a interpolação dos pixels, o que demanda cpu e tempo.

Sendo a extração do jpeg tão rápida, não recomendo configurar a câmera para gerar arquivos jpeg, nem raw+jpeg. Isso só vai tomar espaço no seu cartão de memória. A menos que você realmente esteja convicto de que não vai querer editar as imagens depois de baixá-las no computador, não há motivo para gerar arquivos jpeg.

O dcraw possui ainda uma variedade de opções interessantes, e não vou cobrir todas aqui. Uma delas é a de embutir perfil de cores na imagem. Se estiver trabalhando com bureaus gráficos e os responsáveis pela impressão do seu arquivo pedirem perfil embutido, você pode usar o dcraw para isso. Há também opções para controle de balanço de branco, o que pode influenciar bastante o resultado.

Extraindo jpegs em um diretório com muitos arquivos raw:

  dcraw -e *.nef

ou, para evitar o famoso "argument list too long":

  for raw in *.nef ; do
        dcraw -e $raw
  done

Para edição interativa de raw, recomendo dois programas: o UFRaw e o Rawstudio. Ambos são muito bons, mas operam com conceitos um pouco diferentes. O UFRaw abre e edita foto por foto. O Rawstudio é mais focado em edição de um conjunto de imagens, por exemplo, uma coleção guardada em um diretório.

A desvantagem deles é que trazem sua própria versão do dcraw (no qual se baseiam para revelar as imagens), e que sempre está algumas versões atrás da atual.

Instalando

  apt-get install ufraw rawstudio

Usar o UFRaw é muito simples, clique o direito na imagem raw e peça para o gerenciador de arquivos abri-la com o UFRaw. Uma interface abrirá, com a foto à direita, e os controles necessários à esquerda. Dali você pode sair experimentando tudo. Quando a imagem estiver a gosto, o menu "Salvar" permite escolher formato de saída e local.

Se a sua versão do UFRaw disser que o balanço de branco da D90 (camera WB) não está disponível, atualize-o para a última versão. No Debian Lenny, a versão 0.16 já não tem esse problema.

Já o Rawstudio opera como um processador em lotes. Existem também controles para as ferramentas de transformação da imagem, mas a idéia é, depois que o tratamento a ser aplicado estiver definido, construir um "batch" de imagens e aplicá-lo em todas elas.

O Rawstudio também permite uso de perfil de cores, o que é cada vez mais importante em fotografia avançada.

Com as saídas em tiff e jpeg, você pode seguir com seu fluxo de trabalho integrando com o Gimp, Krita, ou qualquer outro software de sua preferência.

2. Filmes em formato .avi.

A D90 é a primeira câmera digital reflex a gravar filmes. E com áudio! Surpreendentemente, a Nikon não optou por nenhum formato bizarro de vídeo para essa funcionalidade. Ao contrário, usou o bom e velho .avi. O .avi, curiosamente, também não é bem um "formato de vídeo". Está mais para um conteiner, onde pode haver diversos fluxos de dados, como por exemplo, um fluxo de vídeo e um, dois, ou mais fluxos de áudio. A utilidade disso é termos, por exemplo, um áudio de um videoclip em português e o mesmo áudio em espanhol. Sendo assim, o usuário pode trocar de linguagem ao assistir, e tudo isso em um mesmo arquivo.

O .avi é muito bem suportado em software livre. Você pode escolher entre uma variedade de programas para assisti-lo ou editá-lo. Indico o mplayer e o vlc para exibição, e o avidemux e o mencoder para edições simples.

  apt-get install mplayer vlc mencoder avidemux

Existem interfaces gráficas para o mplayer, para quem gosta delas. Se você pedir para instalar somente o "mplayer" provavelmente acabará só com o programa de linha de comando.

O avidemux permite abrir um filme avi, cortar as partes relevantes, com uma ótima interface gráfica, remontá-las em um videoclip caseiro. Pode também remover barras pretas e logotipos. Pode inclusive recodificar o vídeo e áudio para outros formatos, como o h.264.

Aqui estão informações sobre o vídeo gravado pela D90, usando-se o mplayer com o parâmetro -identify para sondá-las:

  Playing dsc_0001.avi.
  AVI file format detected.
  ID_VIDEO_ID=0
  [aviheader] Video stream found, -vid 0
  ID_AUDIO_ID=1
  [aviheader] Audio stream found, -aid 1
  VIDEO:  [MJPG]  1280x720  24bpp  24.000 fps  13754.0 kbps (1679.0 kbyte/s)
  ID_FILENAME=dsc_0001.avi
  ID_DEMUXER=avi
  ID_VIDEO_FORMAT=MJPG
  ID_VIDEO_BITRATE=13754040
  ID_VIDEO_WIDTH=1280
  ID_VIDEO_HEIGHT=720
  ID_VIDEO_FPS=24.000
  ID_VIDEO_ASPECT=0.0000
  ID_AUDIO_FORMAT=1
  ID_AUDIO_BITRATE=176400
  ID_AUDIO_RATE=0
  ID_AUDIO_NCH=0
  ID_LENGTH=80.00
  ID_SEEKABLE=1
  ==========================================================================
  Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
  Selected video codec: [ffmjpeg] vfm: ffmpeg (FFmpeg MJPEG decoder)
  ==========================================================================
  ID_VIDEO_CODEC=ffmjpeg
  ==========================================================================
  Opening audio decoder: [pcm] Uncompressed PCM audio decoder
  AUDIO: 11025 Hz, 1 ch, s16le, 176.4 kbit/100.00% (ratio: 22050->22050)
  ID_AUDIO_BITRATE=176400
  ID_AUDIO_RATE=11025
  ID_AUDIO_NCH=1
  Selected audio codec: [pcm] afm: pcm (Uncompressed PCM)
  ==========================================================================
  AO: [alsa] 48000Hz 1ch s16le (2 bytes per sample)
  ID_AUDIO_CODEC=pcm
  Starting playback...
  VDec: vo config request - 1280 x 720 (preferred colorspace: Planar 422P)
  Could not find matching colorspace - retrying with -vf scale...
  Opening video filter: [scale]
  VDec: using Planar 422P as output csp (no 1)
  O que tiramos de importante disso é:
  VIDEO:  [MJPG]  1280x720  24bpp  24.000 fps  13754.0 kbps (1679.0 kbyte/s)
  Vídeo Motion JPG, com quadros de 1280x720, a 24 quadros por segundo.
  Áudio PCM uncompressed, 176.4 kbit, e 1 canal (ou seja, o som é mono, veja: ID_AUDIO_NCH=1).

Para coisas como entrevistas, conversas entre duas pessoas, ou filmes bem simples, a câmera é muito boa. A imagem é bem clara, definida, e tem boa suavidade. Você só fica limitado ao espaço no cartão de memória. Mas mesmo isso, hoje em dia já não é tão problemático.

O som mono, porém, não ajuda a dar uma noção espacial à imagem. Se você filmar uma festa de aniversário, por exemplo, com muita gente falando ao mesmo tempo, perceberá que é difícil saber de onde vem o som.

3. Mexendo com metadados

Metadados da imagem são os dados que a câmera insere no arquivo fotográfico, além dos pixels, que são a informação visual da imagem, propriamente dita. São dados explicativos da imagem e das circunstâncias no momento que a foto foi feita. Ter acesso a eles é fundamental, pois eles podem estar levando consigo informações que você não deseja que levem, ou não estarem levando informações que poderiam beneficiá-lo muito.

O mundo dos metadados é complexo, e movediço. Existem diversos formatos de metadados diferentes, alguns muito conhecidos, como o exif e o iptc, e outros menos documentados, como formatos proprietários (sempre eles...) e os mais recentes. É difícil até mesmo saber se o que você vê na tela são todos os metadados que sua imagem possui. Alguns são binários, como os perfis de cores, embora a maioria seja texto puro.

Por isso tudo, vou me deter em exemplos simples e úteis aqui.

Para ter acesso aos metadados de uma imagem raw, use o script perl exiftool. Ele consegue ler, gravar e apagar metadados de uma boa quantidade de tipos de arquivo diferentes, para uma quantidade maior ainda de formatos de metadados.

  apt-get install libimage-exiftool-perl

Ainda existem as possibilidades de se usar o próprio dcraw, ou o exiv2. Mas, sinceramente, com o exiftool em mãos, você não vai querer usar nenhum outro.

  apt-get install exiv2

Usando o dcraw para ver metadados:

  bruno@boson:~/d90/geotag$ dcraw -i -v dsc_0001.nef
  Filename: dsc_0001.nef
  Timestamp: Sat Feb 20 03:08:20 2010
  Camera: NIKON D90
  ISO speed: 200
  Shutter: 1/6.0 sec
  Aperture: f/3.5
  Focal length: 18.0 mm
  Embedded ICC profile: no
  Number of raw images: 1
  Thumb size:  4288 x 2848
  Full size:   4352 x 2868
  Image size:  4310 x 2868
  Output size: 4310 x 2868
  Raw colors: 3
  Filter pattern: GBRGGBRGGBRGGBRG
  Daylight multipliers: 2.008508 0.925194 1.076160
  Camera multipliers: 1.917969 1.000000 1.187500 0.000000

O que o dcraw mostra aqui são os metadados relevantes para revelação fotográfica, como ISO, abertura e velocidade. Mas existem muitos outros que não foram mostrados aqui.

  bruno@boson:~/d90/geotag$ exiv2 dsc_0001.nef
  Warning: Size 6600 of Exif.Nikon3.0x0091 exceeds 4096 bytes limit. Not decoded.
  File name       : dsc_0001.nef
  File size       : 9583969 Bytes
  MIME type       : image/tiff
  Image size      : 4352 x 2868
  Camera make     : NIKON CORPORATION
  Camera model    : NIKON D90
  Image timestamp : 2010:02:20 03:08:20
  Image number    :
  Exposure time   : 1/6 s
  Aperture        : F3.5
  Exposure bias   : 0
  Flash           : No flash
  Flash bias      :
  Focal length    : 18.0 mm (35 mm equivalent: 27.0 mm)
  Subject distance:
  ISO speed       : 200
  Exposure mode   : Manual
  Metering mode   : Multi-segment
  Macro mode      :
  Image quality   : RAW
  Exif Resolution : 4352 x 2868
  White balance   : CLOUDY
  Thumbnail       : None
  Copyright       :
  Exif comment    : (C)BRUNO BUYS, 2010

O exiv2 mostra a tag do comentário exif:

  dsc_0001.nef         Exif comment    : (C)BRUNO BUYS, 2010

Então, você pode ver que nos metadados está dito quais aberturas de lente você usou, se o flash disparou ou não, etc. Poder controlar quem tem acesso a estes dados é muito importante.

No exiftool:

  exiftool dsc_0001.nef

Esse comando gera uma saída de 249 linhas (a mais completa que há), portanto não vou inseri-lo aqui.

Exiftool mostrando o comentário exif:

  User Comment                    : (C)BRUNO BUYS, 2010

Então tanto exiv2 quanto exiftool mostram a tag que a câmera inseriu no arquivo.

Só que quando extraio a miniatura jpg contida no raw, a tag de comentário com a linha do autor não é colocada. Temos que inseri-la, porque o jpg é que é o arquivo que iremos colocar no flickr, em blogs, na internet, etc. O raw provavelmente vai ficar guardado nos seus arquivos e backups.

Inserindo a linha de autor:

  exiftool -Comment='(c)Fulano 2010' dsc_0001.jpg

Inserindo em lotes:

  for jpg in *jpg ; do
  exiftool -Comment='(c)Fulano 2010' $jpg
  done

Evidentemente, você pode usar o campo de comentário para qualquer coisa, além de seu nome de autor.

Com isso, se alguém pegar uma foto sua e usar em algum site, você tem meios de verificar sua autoria. Claro, há meios de apagar a linha de comentário. O método não é 100% seguro.

Apagando metadados:

  exiftool -all= dsc_0001.nef

GPS e Coordenadas Geográficas

Existem metadados que podem armazenar coordenadas geográficas. Isso permite que uma foto seja facilmente localizada no Google Earth, ou qualquer outro programa semelhante.

Para usar essa funcionalidade, você precisa ter um dispositivo GPS que possa ser adaptado na câmera. Com o dispositivo ligado, a câmera lê as coordenadas de GPS e as insere como metadados em cada foto que é feita.

A D90 permite pelo menos dois dispositivos GPS: o da própria Nikon (http://www.nikonusa.com/Find-Your-Nikon/Photography-Accessories/Miscellaneous/25396/GP-1-GPS-Unit.html) e o nGPS, da Columbus (http://www.pocketgpsworld.com/Columbus-nGPS-geotagging-dongle-for-Nikon-cameras-review-3722.php).

Quando equipada com um GPS, a câmera insere os metadados relacionados:

  bruno@boson:~/d90/dica_d90$ exiftool 0002.NEF | grep -i gps
  GPS Version ID                  : 2.2.0.0
  GPS Latitude Ref                : North
  GPS Longitude Ref               : West
  GPS Altitude Ref                : Above Sea Level
  GPS Time Stamp                  : 02:46:36
  GPS Satellites                  : 12
  GPS Map Datum                   :
  GPS Date Stamp                  : 2009:11:23
  GPS Altitude                    : 5 m Above Sea Level
  GPS Date/Time                   : 2009:11:23 02:46:36Z
  GPS Latitude                    : 49 deg 18' 35.21" N
  GPS Longitude                   : 123 deg 4' 55.42" W
  GPS Position                    : 49 deg 18' 35.21" N, 123 deg 4' 55.42" W

Esta imagem é de uma cidade no Canadá. Gentilmente cedida por John Biehler (http://johnbiehler.com/).

O interessante aqui é a posição (GPS Position), que contém as duas coordenadas necessárias para localização do ponto no Google Earth. Outros dados interessantes são o número de satélites (12) a que o dispositivo tinha acesso quando a foto foi feita. Isso é uma medida da precisão da coordenada. Quanto mais satélites, melhor. Essa foto foi feita no hemisfério norte. Não sei se existem diferenças de lá para cá, na recepção de satélites GPS, mas até hoje só consegui no máximo 9 satélites.

Há um probleminha aqui, o exiftool usa "deg" para exprimir o caractere de grau, nas coordenadas. Com isso, não é possível colar essa coordenada diretamente no Google Earth, ele precisa mesmo da coordenada expressa como 49° 18' 35.21" N, 123° 4' 55.42" W (com a "bolinha" no grau).

Para remediar essa situação, eu escrevi esta pequena função que usa o exiftool e o sed para editar a coordenada e torná-la diretamente apropriada ao GE:

  pos(){
  exiftool -composite:all "$1" | grep Position | sed -e "s/ deg/°/g" -e "s/GPS Position                    : //g"
  }

Com essa função no seu .bashrc, você pode simplesmente comandar:

  pos 0002.NEF

e obterá:

  49° 18' 35.21" N, 123° 4' 55.42"W 

(se nunca fez isso, experimente copiar e colar essa coordenada no GE).

Para ver a coordenada graficamente, e com a conveniência de um gerenciador de arquivos, eu criei outro script e um serviço no menu Actions, no konqueror.

O script:

  #!/bin/bash
  . ~/.bashrc
  pos(){
  exiftool -composite:all "$1" | grep Position | sed -e "s/ deg/°/g" -e "s/GPS Position                    : //g"
  }
  POSICAO=`pos $1`
  if [ -z $POSICAO ] ; then
  POSICAO="Não há coordenada GPS para essa imagem"
  fi
  kdialog -title "Latitude x Longitude" --msgbox "$POSICAO"
  #fim do script

Salvei este script em ~/bin e depois criei um serviço com nome gps.desktop em ~/.kde/share/apps/konqueror/servicemenus, contendo o seguinte conteúdo:

  #
  # Bruno Buys, 2010. Para KDE da série 3!
  # Sob a GPLv3.
  # Copie para $HOME/.kde/share/apps/konqueror/servicemenus.
  #
  [Desktop Entry]
  ServiceTypes=image/*
  Actions=Mostra gps
  [Desktop Action Mostra gps]
  Name=Mostra coordenadas GPS
  Icon=googleearth
  Exec=/home/bruno/bin/kpos

Com isso, o kdialog mostra graficamente a saída do comando exiftool para gerar as coordenadas, e o sed o edita para ser diretamente colado no GE.

Você pode ainda adaptar essa infra-estrutura para mostrar outros metadados que sejam relevantes para você, basta modificar a parte dos comandos referente ao exiftool, e ao grep "position". Não precisa ficar limitado aos GPS. Essa é uma das belezas do software livre: tudo se adapta.

Essa última parte de metadados geográficos eu desenvolvi para poder colar no GE as coordenadas de fotos da viagem de férias que estou com minha esposa, a Fernanda, que começou na terça-feira, 2 de março. Se você quiser acompanhar-nos (e ver o poder dos metadados GPS em ação), veja o nosso blog de viagem, em http://www.nandaebruno.com.br.

Com isso tudo em mãos, você tem a sua D90 (ou outras digitais reflex) integrada sem problemas ao seu desktop livre.

Até a volta, e feliz hacking!!

Outras dicas relevantes sobre fotografia digital

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Bruno Buys