在Python(Ubuntu)中使用exiftool和XMPtool解码某些图片的辐照度列表标记

2024-03-28 18:10:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图解码一些图片的辐照度标签,这是我的代码(这是我的注意我只是用它来尝试一些东西)。。你知道吗

import sys
import os
import glob
import exiftool
import base64
import struct

irradiance_list_tag = 'XMP:IrradianceList'
irradiance_calibration_measurement_golden_tag = 'XMP:IrradianceCalibrationMeasurementGolden'
irradiance_calibration_measurement_tag = 'XMP:IrradianceCalibrationMeasurement'

tags = [ irradiance_list_tag, irradiance_calibration_measurement_tag ]

directory = '/home/stagiaire/Bureau/DATA/'

channels = [ 'RED', 'NIR' ]

index = 0

for channel in channels:
    files = glob.glob(os.path.join(directory, '*' + channel + '*'))
    with exiftool.ExifTool() as et:
        metadata = et.get_tags_batch(tags, files)
        for file_metadata in metadata:
            irradiance_list = file_metadata[irradiance_list_tag]
            irradiance_calibration_measurement = file_metadata[irradiance_calibration_measurement_tag]

            irradiance_list_bytes = base64.b64decode(irradiance_list)

            print(files[index])
            index += 1

            for irradiance_data in struct.iter_unpack("qHHHHfff", irradiance_list_bytes):
                print(irradiance_data)

错误是这样的

irradiance_list = file_metadata[irradiance_list_tag]

这是错误。。你知道吗

KeyError: 'XMP:IrradianceList'

我想问题是在Python中安装XMP工具?你知道吗


Tags: inimportforindextagtagsfilesglob
1条回答
网友
1楼 · 发布于 2024-03-28 18:10:28
"""
Code in Python to decode the IrradianceList tag which is an array of the following structure:

  uint64_t timestamp (us)
  uint16_t CH0 (count)
  uint16_t CH1 (count)
  uint16_t gain index
  uint16_t integration time (ms)
  float    yaw
  float    pitch
  float    roll
"""

import sys
import os
import glob
import exiftool
import base64
import struct

irradiance_list_tag = 'XMP:IrradianceList'
irradiance_calibration_measurement_golden_tag = 'XMP:IrradianceCalibrationMeasurementGolden'
irradiance_calibration_measurement_tag = 'XMP:IrradianceCalibrationMeasurement'

tags = [ irradiance_list_tag, irradiance_calibration_measurement_tag ]

directory = 'test'

channels = [ 'RED' ]

index = 0

for channel in channels:
    files = glob.glob(os.path.join(directory, '*' + channel + '*'))
    with exiftool.ExifTool() as et:
        metadata = et.get_tags_batch(tags, files)
        for file_metadata in metadata:
            irradiance_list = file_metadata[irradiance_list_tag]
            irradiance_calibration_measurement = file_metadata[irradiance_calibration_measurement_tag]

            irradiance_list_bytes = base64.b64decode(irradiance_list)

            print(files[index])
            index += 1

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

相关问题 更多 >