From 7aeb499dce7472f63a26abe103fe75eea3e75853 Mon Sep 17 00:00:00 2001 From: Bryan Kappa Date: Thu, 1 Oct 2020 11:25:14 -0700 Subject: [PATCH 1/3] add reconyx makernote mapping file, class handling --- .gitignore | 1 + exifread/classes.py | 10 +++ exifread/tags/makernote/reconyx.py | 103 +++++++++++++++++++++++++++++ 3 files changed, 114 insertions(+) create mode 100644 exifread/tags/makernote/reconyx.py diff --git a/.gitignore b/.gitignore index c774f864..ce43d8cf 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ # OS .directory +.DS_Store # Images *.jpg diff --git a/exifread/classes.py b/exifread/classes.py index 6a3b5ece..86cb7b37 100644 --- a/exifread/classes.py +++ b/exifread/classes.py @@ -520,6 +520,16 @@ def decode_maker_note(self): # def _olympus_decode_tag(self, value, mn_tags): # pass + def decode_cryptic_maker_note(self): + """ + This is simply a rewrite of decode_maker_note to accommodate + any cryptic or 'unknown' makernote formats + """ + note = self.tags['EXIF MakerNote'] + self.dump_ifd(note.field_offset, 'MakerNote', + tag_dict=makernote.reconyx.TAGS_HYPERFIRE) + return + def _canon_decode_tag(self, value, mn_tags): """ diff --git a/exifread/tags/makernote/reconyx.py b/exifread/tags/makernote/reconyx.py new file mode 100644 index 00000000..b076f965 --- /dev/null +++ b/exifread/tags/makernote/reconyx.py @@ -0,0 +1,103 @@ +from ...utils import make_string + +# maker notes for Reconyx Hyperfire cameras (ref PH) +# ported from https://fossies.org/linux/Image-ExifTool/lib/Image/ExifTool/Reconyx.pm +TAGS_HYPERFIRE = { + 0x00: ('MakerNoteVersion', make_string), # Sometimes binary + 0x01: ('FirmwareVersion', ), + 0x04: ('FirmwareDate', ), + 0x06: ('TriggerMode', ), + 0x07: ('Sequence', ), + 0x09: ('EventNumber', ), + 0x0b: ('DateTimeOriginal', ), + 0x12: ('MoonPhase', { + 0: 'New', + 1: 'New Crescent', + 2: 'First Quarter', + 3: 'Waxing Gibbous', + 4: 'Full', + 5: 'Waning Gibbous', + 6: 'Last Quarter', + 7: 'Old Crescent' + }), + 0x13: ('AmbientTemperatureFahrenheit', ), + 0x14: ('AmbientTemperature', ), + 0x15: ('SerialNumber', ), + 0x24: ('Contrast', ), + 0x25: ('Brightness', ), + 0x26: ('Sharpness', ), + 0x27: ('Saturation', ), + 0x28: ('InfraredIlluminator', ), + 0x29: ('MotionSensitivity', ), + 0x2a: ('BatteryVoltage', ), + 0x2b: ('UserLabel', ) +} + +# maker notes for Reconyx UltraFire cameras (ref PH) +# ported from https://fossies.org/linux/Image-ExifTool/lib/Image/ExifTool/Reconyx.pm +TAGS_ULTRAFIRE = { + 0x18: ('FirmwareVersion', ), + 0x1f: ('Micro1Version', ), + 0x26: ('BootLoaderVersion', ), + 0x2d: ('Micro2Version', ), + 0x34: ('TriggerMode', ), + 0x35: ('Sequence', ), + 0x37: ('EventNumber', ), + 0x3b: ('DateTimeOriginal', ), + 0x42: ('DayOfWeek', ), + 0x43: ('MoonPhase', { + 0: 'New', + 1: 'New Crescent', + 2: 'First Quarter', + 3: 'Waxing Gibbous', + 4: 'Full', + 5: 'Waning Gibbous', + 6: 'Last Quarter', + 7: 'Old Crescent' + }), + 0x44: ('AmbientTemperatureFahrenheit', ), + 0x46: ('AmbientTemperature', ), + 0x48: ('Illumination', ), + 0x49: ('BatteryVoltage', ), + 0x4b: ('SerialNumber', ), + 0x5a: ('UserLabel', ) +} + +# maker notes for Reconyx HF2 PRO cameras (ref 3) +# ported from https://fossies.org/linux/Image-ExifTool/lib/Image/ExifTool/Reconyx.pm +TAGS_HF2PRO = { + 0x10: ('FileNumber', ), + 0x12: ('DirectoryNumber', ), + 0x2a: ('FirmwareVersion', ), + 0x30: ('FirmwareDate', ), + 0x34: ('TriggerMode', ), + 0x36: ('Sequence', ), + 0x3a: ('EventNumber', ), + 0x3e: ('DateTimeOriginal', ), + 0x4a: ('DayOfWeek', ), + 0x4c: ('MoonPhase', { + 0: 'New', + 1: 'New Crescent', + 2: 'First Quarter', + 3: 'Waxing Gibbous', + 4: 'Full', + 5: 'Waning Gibbous', + 6: 'Last Quarter', + 7: 'Old Crescent' + }), + 0x4e: ('AmbientTemperatureFahrenheit', ), + 0x50: ('AmbientTemperature', ), + 0x52: ('Contrast', ), + 0x54: ('Brightness', ), + 0x56: ('Sharpness', ), + 0x58: ('Saturation', ), + 0x5a: ('Flash', ), + 0x5c: ('AmbientInfrared', ), + 0x5e: ('AmbientLight', ), + 0x60: ('MotionSensitivity', ), + 0x62: ('BatteryVoltage', ), + 0x64: ('BatteryVoltageAvg', ), + 0x66: ('BatteryType', ), + 0x68: ('UserLabel', ), + 0x7e: ('SerialNumber', ), +} From c6167d72c5a0e4e87fc0c19833a671a5ea3954e7 Mon Sep 17 00:00:00 2001 From: Bryan Kappa Date: Thu, 1 Oct 2020 11:37:54 -0700 Subject: [PATCH 2/3] add sub-definitions to reconyx.py --- exifread/tags/makernote/reconyx.py | 54 +++++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 8 deletions(-) diff --git a/exifread/tags/makernote/reconyx.py b/exifread/tags/makernote/reconyx.py index b076f965..a2698594 100644 --- a/exifread/tags/makernote/reconyx.py +++ b/exifread/tags/makernote/reconyx.py @@ -6,7 +6,12 @@ 0x00: ('MakerNoteVersion', make_string), # Sometimes binary 0x01: ('FirmwareVersion', ), 0x04: ('FirmwareDate', ), - 0x06: ('TriggerMode', ), + 0x06: ('TriggerMode', { + 'C': 'CodeLoc Not Entered', + 'E': 'External Sensor', + 'M': 'Motion Detection', + 'T': 'Time Lapse' + }), 0x07: ('Sequence', ), 0x09: ('EventNumber', ), 0x0b: ('DateTimeOriginal', ), @@ -27,7 +32,10 @@ 0x25: ('Brightness', ), 0x26: ('Sharpness', ), 0x27: ('Saturation', ), - 0x28: ('InfraredIlluminator', ), + 0x28: ('InfraredIlluminator', { + 0: 'Off', + 1: 'On' + }), 0x29: ('MotionSensitivity', ), 0x2a: ('BatteryVoltage', ), 0x2b: ('UserLabel', ) @@ -40,11 +48,23 @@ 0x1f: ('Micro1Version', ), 0x26: ('BootLoaderVersion', ), 0x2d: ('Micro2Version', ), - 0x34: ('TriggerMode', ), + 0x34: ('TriggerMode', { + 'M': 'Motion Detection', + 'P': 'Point and Shoot', + 'T': 'Time Lapse' + }), 0x35: ('Sequence', ), 0x37: ('EventNumber', ), 0x3b: ('DateTimeOriginal', ), - 0x42: ('DayOfWeek', ), + 0x42: ('DayOfWeek', { + 0: 'Sunday', + 1: 'Monday', + 2: 'Tuesday', + 3: 'Wednesday', + 4: 'Thursday', + 5: 'Friday', + 6: 'Saturday' + }), 0x43: ('MoonPhase', { 0: 'New', 1: 'New Crescent', @@ -57,7 +77,10 @@ }), 0x44: ('AmbientTemperatureFahrenheit', ), 0x46: ('AmbientTemperature', ), - 0x48: ('Illumination', ), + 0x48: ('Illumination', { + 0: 'Off', + 1: 'On' + }), 0x49: ('BatteryVoltage', ), 0x4b: ('SerialNumber', ), 0x5a: ('UserLabel', ) @@ -70,11 +93,23 @@ 0x12: ('DirectoryNumber', ), 0x2a: ('FirmwareVersion', ), 0x30: ('FirmwareDate', ), - 0x34: ('TriggerMode', ), + 0x34: ('TriggerMode', { + 'M': 'Motion Detection', + 'P': 'Point and Shoot', + 'T': 'Time Lapse' + }), 0x36: ('Sequence', ), 0x3a: ('EventNumber', ), 0x3e: ('DateTimeOriginal', ), - 0x4a: ('DayOfWeek', ), + 0x4a: ('DayOfWeek', { + 0: 'Sunday', + 1: 'Monday', + 2: 'Tuesday', + 3: 'Wednesday', + 4: 'Thursday', + 5: 'Friday', + 6: 'Saturday' + }), 0x4c: ('MoonPhase', { 0: 'New', 1: 'New Crescent', @@ -91,7 +126,10 @@ 0x54: ('Brightness', ), 0x56: ('Sharpness', ), 0x58: ('Saturation', ), - 0x5a: ('Flash', ), + 0x5a: ('Flash', { + 0: 'Off', + 1: 'On' + }), 0x5c: ('AmbientInfrared', ), 0x5e: ('AmbientLight', ), 0x60: ('MotionSensitivity', ), From 316a05057044cccd72ba2cc7f77e5d667fbc1a7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?ianar=C3=A9=20s=C3=A9vi?= Date: Wed, 3 May 2023 01:17:59 +0200 Subject: [PATCH 3/3] fix lint --- exifread/classes.py | 1 - 1 file changed, 1 deletion(-) diff --git a/exifread/classes.py b/exifread/classes.py index cf067dd3..52f3f19b 100644 --- a/exifread/classes.py +++ b/exifread/classes.py @@ -543,7 +543,6 @@ def decode_cryptic_maker_note(self): 'MakerNote', tag_dict=makernote.reconyx.TAGS_HYPERFIRE ) - return def _canon_decode_tag(self, value, mn_tags): """