Skip to content

JoanCano/SequoiaCam

Repository files navigation

SequoiaCam

Lectura y decodificación de los metadatos en imágenes de la cámara Sequoia

Tipos de metadatos en imágenes

Los metadatos son datos que nos proporcionan información sobre los datos, entre ellos los descriptivos, estructurales y administrativos. Estos pueden ser escritos en iḿagenes como las que toma nuestra cámara, que ayudarán en el proceso posterior de producción a partir de palabras clave.

Las imágenes pueden contener diferentes metadatos, regidos por las normas creadas por organizaciones encargadas de ello; algunas de estas normas son:

  • IPTC
  • IPTC para XMP
  • XMP
  • EXIF
  • Dublin Core
  • PLUS
  • VRA

Librerías de lectura de metadatos: Exiftools

Al haber tratado ya los metadatos de las imágenes de la Sequoia, avanzo la necesidad de interpretar metadatos del estandar XMP, una marca registrada por Adobe Systems que cuando pasó a ser ISO, dejó se ser propietaria.

Por lo tanto, necesitaremos buscar un software (libre) capaz de leer XMP, a continuación los que he probado:

GIMP y ImageMagick vienen por defecto en Debian. Sin embargo Exiftool lo tenemos que instalar:

# instalar exiftool
 apt-cache install libimage-exiftool-perl

Mostrar los metadatos de una imagen

exiftool imagen.tif

ImageMagick también se puede ejecutar desde la terminal:

identify -verbose imagen.tif

Resultados exiftool, Resultados ImageMagick


Lectura de los metadatos de una imagen:

system ("exiftool /home/joan/multispectralcam/test/IMG_170825_082736_0004_NIR.TIF")

Exportar metadatos a csv

output <- system ( "exiftool -n -csv /home/joan/multispectralcam/test/IMG_170825_082736_0004_NIR.TIF" , intern = TRUE ) 
df <- read.csv ( textConnection ( output ), stringsAsFactors = FALSE )
write.csv(df, file = "/home/joan/Escritorio/test.csv")

Decodificar formato Base64 mediante Python

Se pueden apreciar metadatados muy valiosos para la investigación, como:

  1. Yaw, pitch y roll
  2. Viñeteado
  3. Valor de luminosidad
  4. Calibraciones
  5. Corriente oscura
  6. etc...

Pero.. ¿Y la etiqueta IrradianceList? Esta etiqueta viene codificada en Base64, un sistema de numeración posicional que utiliza el 64 como base y carácteres ASCII (usa el rango entre A-Z, a-z y 0-9, más dos símbolos que pueden variar). De manera que tenemos la siguiente cadena de carácteres:

U5UwEQAAAABaBa4CAQBkAHAJ6sLRfAHBo95bwBegMxEAAAAAnAXQAgEAZACLX+zCj/G+wImc0b/ rrDYRAAAAAKIF0wIBAGQAltDqwi1DusAigqS/M8I5EQAAAADNBGgCAQBkANc958JGokfBxkHAPsbZ PBEAAAAA+AP9AQEAZACYTeXCGYhEwV7Bsb833z8RAAAAAOQD8gEBAGQA21LqwrSgfcHvtz3ACeVCE QAAAADzA/oBAQBkAICY+cK6j6HBPJaJQLL3RREAAAAAbAO3AQEAZAC0rQPD67Hbwa0xNEE+CUkRAA AAAM8D6AEBAGQAS8j8wj+alsH7+SrBeA1MEQAAAAAPBYkCAQBkAA/iBMP/TBjCafi/wPkFTxEAAAAA rgRZAgEAZABL0ATDLYzwwSFcr78KF1IRAAAAAI0FyAIBAGQAfjkBw6Iwc8FEj6LAcyRVEQAAAABsBb gCAQBkAJ/d+8K8cFbBgX6owA==


Para poder decodificarlo se han utilizado una serie de librerías en Python:

Este es el script:

import exiftool
import base64
import struct
import glob
import os

tag = "XMP:IrradianceList"

directorio = 'test'
canales = ['GRE','RED','REG','NIR']

index = 0

for canal in canales:
    files = glob.glob(os.path.join(directorio, '*' + canal + '*'))

    with exiftool.ExifTool() as et:
        metadata = et.get_tag_batch(tag, files)

        #print metadata
        for file_metadata in metadata:
            decoded = base64.b64decode(file_metadata)

        index += 1

        for i in range(0, len(decoded), 28):
            print struct.unpack("qHHHHfff", decoded[i:i+28])


Resultados

irradianceList <-read.table("/home/joan/multispectralcam/decode.csv", header= T, sep=",")
knitr::kable(irradianceList)

Como se puede apreciar, aparecen muchas filas de datos, sin embargo solo necesitamos 1, la última obtenida por imagen. Las filas pueden variar según la imagen, esto es debido a que parece que la cámara guarda información a 5Hz.

About

This is a repository dedicated to research with the multispectral camera Parrot Sequoia

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages