
写真に付与されたMakerNotesを読む
過去にexif情報の読み込み方法を紹介しましたが、pillowを用いた方法では、MakerNotesは取得できても内容を解読することはできませんでした。
Exifはどのメーカーのカメラでも存在するような必要最低限の設定項目しかわかりませんが、MakerNotesはもっと幅広い設定、また、各社固有の設定なども得られます。
私はSONYのカメラを利用しているのですが、調べてみるとSONYのMakernotesの中身を解読して公開されている方がいました。
さらには、「exiftool」というMakerNotes含むexif情報を読み込み、出力できるソフトを公開していました。
このソフトを使ってMakerNotesのデータ抽出を試みます
ExifToolの導入

私はWindows Executableの方をダウンロードしました。
zipファイルを展開するとexiftool(-k).exeというファイルがあります。Installation instructionsを読むとコマンドラインから利用する場合は、exiftool.exeという名前にリネームせよと書いてあります。今回私はコマンドラインから実行するためこれに従います。
ExifToolで情報をcsv出力する
exiftoolで得た情報を、オプション設定でcsv出力することが可能です。
コマンドのオプションについては、こちらの記事を参考にしました。
以下のコマンドでMakerNotesを含む情報を取得しました。
exiftool -G -csv hogehoge.JPG
-G:File, EXIF, MakerNotesなど、どのグループの情報源から取得されたかどうかを返します
-csv:結果をcsv出力してくれます。
これらのオプションを使用することで、1行目に「グループ名:項目名」の形式でヘッダが入り、1行目に各項目の値が入ります。
Pythonから実行
先述のコマンドだと、「グループ名:項目名」の形式でヘッダの入る横持のテーブルが生成されますが、そうではなく、縦持ちにしたうえで、グループ名,項目名,項目の値 の形で縦持ちのテーブルを作成したかったので、pythonで処理をしました。こうすることで、どのグループにどんな項目があるかがわかりやすくなります。
下記は、コマンドをたたくところからPythonでやっています。
import subprocess
from pathlib import Path
import pandas as pd
from io import StringIO
pct_path = "hogehoge.JPG"
exe_path = "exiftool"
cmd = f"{exe_path} -G -csv {pct_path}"
process = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, encoding='utf-8')
output, error = process.communicate()
df = pd.read_csv(StringIO(output)).T
df.columns = ["val"]
df["group"]=df.index.map(lambda x:x.split(":")[0])
df["item"]=df.index.map(lambda x:x.split(":")[-1])
MakerNotesの中身
MakerNotesからはこのような情報が得られます。

クリエイティブスタイルなど、ソニー独自の設定(似たような設定は他社にもありますが)も記録されています。また、ImageStabilization(おそらく手振れ補正)などもExifでは得られない情報です。
また、Exif情報では結果的にISOいくつで撮影されたかしか記録されませんが、MakerNotesにはISOをどう設定して撮影したかも記録されています。

他にも気になった点としては、バッテリーに関する情報も得ることができました。バッテリー温度が上がって強制終了してしまったときの原因調査に使えるかもしれません(私はそのような状態になったことはないですが)。

まとめと所感
今回はExifToolを使用して、MakerNotes情報の取得を行いました。Exifより多くの情報が見られて面白かったです。
本当はカメラで登録した撮影設定の内容をリスト形式で見られるようにしたく試してみたのですが、カメラ上の表示名とMakerNotes上の表示名の対応関係がぱっと見わからないものもあり、結局カメラ本体で設定確認するしかない感じでそこは残念でした。