MakerNotesには各メーカーの個性がある |
『MakerNotesって何?』と感じる人も居ると思うので、ちょっと説明すると、デジカメで撮影した写真画像には撮影情報が付いています。 その撮影情報の記述内容や記述方法は規格として定められています。 カメラ映像機器工業会(CIPA)で規格化されたもので、Exif情報と呼んでいます。 この、記録する情報に関して、各メーカーが独自の内容を独自の方法で記録したい場合があり、その為にExifに「MakerNotes」というタグを用意して、各メーカーが独自情報を記録しています。 この「MakerNotes」の内容は原則的に非公開ですが、様々な手段を使って内容を解析してみると、各メーカーの個性があって面白い。
MakerNotes以外は各社共通なの?
Exif情報の内容は必須情報と非必須情報があるので、Exif情報の構成も各社で同一ではない。 もっと言えば、非必須情報の方が多いし、気が利かないメーカーは『あれれぇ、入ってないのかよ?』って事も多い。例えば、撮影日時に関する情報「DateTimeOriginal」は各メーカーとも大抵は入っているけど、秒より小さい「SubSecTime」については、ニコン機やキヤノン機では記録されているけど、ソニー機やフジフィルム機では記録されていない。
「SubSecTime」はプロ機にとっては大変重要で、報道・通信社のワークフローによっては、撮影した写真がサーバーに保存される時に、ファイル名が「ちんぷんかんぷん」な名前に書き換えられてしまう。 連写した写真の撮影順序は撮影日時が重要になるけど、年月日時分秒までが同じ駒が多数あり、「SubSecTime」が無いと撮影順序が判らなくなるのだ。
MakerNotesは各メーカーの性格
各メーカーのExif情報を並べてみると、細かい記録情報の有無はあるけど、どのメーカーも(全社のカメラを調べた訳じゃないけど)情報番号であるタグコードが昇順に並んでいる。 Exif情報は様々な方(主にソフト屋)が閲覧するので、洋服で言えば綺麗に正装している感じだ。ところが、一般人は覗かない(内容が判らないからね)MakerNotesを解析してみると、奇天烈な順番で並べてるメーカーがある。
MakerNotesの情報コード例
NIKON D5 MakerNotes Tag List | SONY α9 MakerNotes Tag List | EOS-1D X II MakerNotes Tag List | ||||||
Tag Code | Tag Type | Count | Tag Code | Tag Type | Count | Tag Code | Tag Type | Count |
0x0001 | UNDEFINED | 0x00000004 | 0x1003 | LONG | 0x00000010 | 0x0001 | SHORT | 0x00000031 |
0x0004 | ASCII | 0x00000008 | 0x2000 | UNDEFINED | 0x00000001 | 0x0002 | SHORT | 0x00000004 |
0x0005 | ASCII | 0x0000000d | 0x2002 | LONG | 0x00000001 | 0x0003 | SHORT | 0x00000004 |
0x0007 | ASCII | 0x00000007 | 0x2003 | ASCII | 0x00000100 | 0x0004 | SHORT | 0x00000022 |
0x0008 | ASCII | 0x0000000d | 0x2004 | SLONG | 0x00000001 | 0x0006 | ASCII | 0x00000017 |
0x0009 | ASCII | 0x00000014 | 0x2005 | SLONG | 0x00000001 | 0x0007 | ASCII | 0x00000018 |
0x000b | SSHORT | 0x00000002 | 0x2006 | SLONG | 0x00000001 | 0x0009 | ASCII | 0x00000020 |
0x000c | RATIONAL | 0x00000004 | 0x2007 | SLONG | 0x00000001 | 0x000d | UNDEFINED | 0x00000600 |
0x000d | UNDEFINED | 0x00000004 | 0x2008 | LONG | 0x00000001 | 0x0010 | LONG | 0x00000001 |
0x000e | UNDEFINED | 0x00000004 | 0x2009 | SHORT | 0x00000001 | 0x0013 | SHORT | 0x00000004 |
0x0016 | SHORT | 0x00000004 | 0x200a | LONG | 0x00000001 | 0x0019 | SHORT | 0x00000001 |
0x0017 | UNDEFINED | 0x00000004 | 0x200c | LONG | 0x00000003 | 0x0026 | SHORT | 0x00000111 |
0x0018 | UNDEFINED | 0x00000004 | 0x200d | RATIONAL | 0x00000001 | 0x0035 | LONG | 0x00000004 |
0x0019 | SRATIONAL | 0x00000001 | 0x2014 | SLONG | 0x00000002 | 0x0038 | UNDEFINED | 0x0000004c |
0x001b | SHORT | 0x00000007 | 0x2026 | SLONG | 0x00000002 | 0x0093 | SHORT | 0x00000026 |
0x001c | UNDEFINED | 0x00000003 | 0x3000 | UNDEFINED | 0x00000186 | 0x0095 | ASCII | 0x0000004a |
0x001d | ASCII | 0x00000008 | 0xb020 | ASCII | 0x00000010 | 0x0096 | ASCII | 0x00000010 |
0x001e | SHORT | 0x00000001 | 0xb021 | LONG | 0x00000001 | 0x0097 | UNDEFINED | 0x00000400 |
0x001f | UNDEFINED | 0x00000008 | 0xb022 | LONG | 0x00000001 | 0x0098 | SHORT | 0x00000004 |
0x0022 | SHORT | 0x00000001 | 0xb023 | LONG | 0x00000001 | 0x0099 | LONG | 0x000000cf |
0x0023 | UNDEFINED | 0x00000044 | 0xb024 | LONG | 0x00000001 | 0x009a | LONG | 0x00000005 |
0x0024 | UNDEFINED | 0x00000004 | 0xb025 | LONG | 0x00000001 | 0x00a0 | SHORT | 0x00000011 |
0x0025 | UNDEFINED | 0x0000000e | 0xb026 | LONG | 0x00000001 | 0x00aa | SHORT | 0x00000006 |
0x002a | SHORT | 0x00000001 | 0xb029 | LONG | 0x00000001 | 0x00b4 | SHORT | 0x00000001 |
0x002b | UNDEFINED | 0x00000010 | 0xb02b | LONG | 0x00000002 | 0x00d0 | LONG | 0x00000001 |
0x002c | UNDEFINED | 0x0000023e | 0xb02c | LONG | 0x00000002 | 0x00e0 | SHORT | 0x00000011 |
0x0035 | UNDEFINED | 0x00000008 | 0xb000 | BYTE | 0x00000004 | 0x4001 | SHORT | 0x00000638 |
0x003b | RATIONAL | 0x00000004 | 0x0102 | LONG | 0x00000001 | 0x4008 | SHORT | 0x00000003 |
0x003c | SHORT | 0x00000001 | 0x0104 | SRATIONAL | 0x00000001 | 0x4009 | SHORT | 0x00000003 |
0x003e | SHORT | 0x00000001 | 0x0112 | LONG | 0x00000001 | 0x4010 | ASCII | 0x00000020 |
0x003f | SRATIONAL | 0x00000002 | 0x0115 | LONG | 0x00000001 | 0x4011 | UNDEFINED | 0x000000fc |
0x0040 | UNDEFINED | 0x0000000c | 0xb001 | SHORT | 0x00000001 | 0x4012 | ASCII | 0x00000020 |
0x0041 | UNDEFINED | 0x00000006 | 0x200b | LONG | 0x00000001 | 0x4013 | LONG | 0x0000000b |
0x0042 | UNDEFINED | 0x00000006 | 0x200e | SHORT | 0x00000001 | 0x4015 | UNDEFINED | 0x00000264 |
0x0043 | UNDEFINED | 0x0000000c | 0x200f | LONG | 0x00000001 | 0x4016 | LONG | 0x0000000a |
0x0044 | SHORT | 0x00000001 | 0x2011 | LONG | 0x00000001 | 0x4018 | LONG | 0x0000000d |
0x0047 | UNDEFINED | 0x0000000c | 0x2012 | LONG | 0x00000001 | 0x4019 | UNDEFINED | 0x0000001e |
0x0083 | BYTE | 0x00000001 | 0x2013 | LONG | 0x00000001 | 0x4021 | LONG | 0x00000005 |
0x0084 | RATIONAL | 0x00000004 | 0x2015 | SHORT | 0x00000001 | 0x4027 | LONG | 0x00000006 |
0x0087 | BYTE | 0x00000001 | 0xb027 | LONG | 0x00000001 | 0x4028 | LONG | 0x00000014 |
0x0089 | SHORT | 0x00000001 | 0xb02a | BYTE | 0x00000008 | |||
0x008a | SHORT | 0x00000001 | 0x2016 | SHORT | 0x00000001 | |||
0x008b | UNDEFINED | 0x00000004 | 0x2017 | LONG | 0x00000001 | |||
0x0091 | UNDEFINED | 0x00000170 | 0x2018 | LONG | 0x00000001 | |||
0x0095 | ASCII | 0x00000005 | 0x2019 | LONG | 0x00000001 | |||
0x0097 | UNDEFINED | 0x00000998 | 0x201a | LONG | 0x00000001 | |||
0x0098 | UNDEFINED | 0x00000021 | 0x201b | BYTE | 0x00000001 | |||
0x009e | SHORT | 0x0000000a | 0x201c | BYTE | 0x00000001 | |||
0x00a2 | LONG | 0x00000001 | 0x201d | SHORT | 0x00000002 | |||
0x00a3 | BYTE | 0x00000001 | 0x201e | BYTE | 0x00000001 | |||
0x00a7 | LONG | 0x00000001 | 0x201f | BYTE | 0x00000004 | |||
0x00a8 | UNDEFINED | 0x000000a3 | 0x2020 | BYTE | 0x0000000a | |||
0x00b0 | UNDEFINED | 0x00000010 | 0x2021 | BYTE | 0x00000001 | |||
0x00b1 | SHORT | 0x00000001 | 0x202a | UNDEFINED | 0x00000042 | |||
0x00b6 | UNDEFINED | 0x00000008 | 0x2023 | LONG | 0x00000001 | |||
0x00b7 | UNDEFINED | 0x00000054 | 0x2025 | BYTE | 0x00000004 | |||
0x00b8 | UNDEFINED | 0x000000ac | 0x5001 | RATIONAL | 0x00000001 | |||
0x00b9 | UNDEFINED | 0x00000004 | 0x5002 | BYTE | 0x00000001 | |||
0x00bb | UNDEFINED | 0x00000008 | 0x2027 | SHORT | 0x00000004 | |||
0x00bf | SHORT | 0x00000001 | 0x2028 | SHORT | 0x00000002 | |||
0x00c0 | UNDEFINED | 0x00000008 | 0x202b | BYTE | 0x00000001 | |||
0x202c | SHORT | 0x00000001 | ||||||
0x202d | SRATIONAL | 0x00000001 | ||||||
0x2029 | SHORT | 0x00000001 | ||||||
0x202e | SHORT | 0x00000002 | ||||||
0x2001 | UNDEFINED | 0x00000000 | ||||||
0x202f | UNDEFINED | 0x00000006 | ||||||
0xb041 | SHORT | 0x00000001 | ||||||
0xb045 | SHORT | 0x00000001 | ||||||
0xb046 | SHORT | 0x00000001 | ||||||
0xb048 | SSHORT | 0x00000001 | ||||||
0xb049 | SHORT | 0x00000001 | ||||||
0xb04a | SHORT | 0x00000001 | ||||||
0xb04b | SHORT | 0x00000001 | ||||||
0xb04c | RATIONAL | 0x00000001 | ||||||
0xb04d | SHORT | 0x00000001 | ||||||
0xb04f | SHORT | 0x00000001 | ||||||
0xb050 | SHORT | 0x00000001 | ||||||
0xb051 | SHORT | 0x00000001 | ||||||
0xb052 | SHORT | 0x00000001 | ||||||
0xb053 | SHORT | 0x00000001 | ||||||
0xb054 | SHORT | 0x00000001 | ||||||
0x9400 | UNDEFINED | 0x00000232 | ||||||
0x9401 | UNDEFINED | 0x00001000 | ||||||
0x9402 | UNDEFINED | 0x00000190 | ||||||
0x9403 | UNDEFINED | 0x000003e8 | ||||||
0x9404 | UNDEFINED | 0x0000022c | ||||||
0x9405 | UNDEFINED | 0x000008fc | ||||||
0x9406 | UNDEFINED | 0x00000040 | ||||||
0x9407 | UNDEFINED | 0x00000040 | ||||||
0x9408 | UNDEFINED | 0x000003e8 | ||||||
0x9409 | UNDEFINED | 0x00000540 | ||||||
0x940a | UNDEFINED | 0x00000190 | ||||||
0x940b | UNDEFINED | 0x00000190 | ||||||
0x940c | UNDEFINED | 0x00000040 | ||||||
0x940d | UNDEFINED | 0x000004ec | ||||||
0x940e | UNDEFINED | 0x00003000 | ||||||
0xa100 | UNDEFINED | 0x00000040 | ||||||
0x2010 | UNDEFINED | 0x000018d0 | ||||||
0x940f | UNDEFINED | 0x00000800 | ||||||
0x9050 | UNDEFINED | 0x000003b0 | ||||||
0x9412 | UNDEFINED | 0x000000a0 |
もうお判りだろう。 ソニー機のMakerNotesはタグコードが昇順でも降順でもなく、テキトーに並んでいるのだ。 ニコン機やキヤノン機は綺麗な昇順で並んでいるけど、ソニー機は「散らかった部屋」状態である。 洋服で言えばニコン・キヤノンは清潔な下着だけど、ソニーは汚くて臭い下着って感じだ。
多分、ソフト屋の性格や組織の几帳面さが表れていると思うので、簡単に目に付く並び順が「汚い」なら、ファームウェアのソースコードに至ってはシラミがたかっているに違いない...そう、バグだらけだと想像できる。 普通のマネージャなら是正勧告するけどなぁ。
各社の思惑
ニコン機のMakerNotesは特定情報群が暗号化されている。 暗号化と言っても大げさなものじゃなく、カメラのシリアル番号と画像のショットカウントとを用いて暗号化しているだけなので、復号処理は簡単だ。 また、ソニー機も一部のMakerNotesが暗号化されているけど、テーブル変換すれば簡単に復号処理できる。 知られたくない情報だったのかも知れないけど、程度の低い暗号化ならしない方が自分達の為でもある...手間が掛かるだけ。一方、キヤノン機は暗号化されていない。 固有情報を保全しようという意識は全く無い様だ...ファームウェアが脆弱でハッキングされちゃうのも判る気がする。
ソニーさんは仕様を判っているのか?
SONY α9 Ver.2.00 でカメラのシリアル番号を記録する仕様が追加された。 早速、自分のカメラをバージョンアップしてExif情報を確認してみると、Exif情報の「SerialNumber」には記録されてなく、MakerNotes内の0x2031番タグにアスキーコードでシリアル番号らしきものが記録されていた。僕は思ったね、『こいつら、カメラの事も業界の事も知らない素人集団だ!』しかも、シリアル番号をアスキーコードに変換する時に並びを間違えるという頭の悪いバグをそのままリリースして気が付いていないのだ。
その後のバージョンアップでカメラのシリアル番号は「SerialNumber」に記録される様に改善され、MakerNotes内の0x2031番タグは消滅した。
この件は昔の記事に書いてある。 作る組織も素人だし評価する組織も素人という事なのだろう。
アップデートで「育てる」時代?
だいぶ前に、誰とは言わないけど SIPS(ソニーイメージングプロダクツ&ソリューションズ)の方が、『α9はVer.7.00まである』と話していた。 ところが、2019年5月15日の「月間大人のソニー」にビックリするような記述があった。 『愛着も機能も増やしていける。アップデートで「育てる」時代へ。』と言うのである。『これ、ダメじゃん』とか『これ、バグじゃん』とかの、メーカーの怠慢を言い訳するだけではなく、発売開始時点で実現出来なかった機能が、その後の開発努力で実現して、ファームウェアアップデートで実装してくれるのはありがたい。
ソニーさんが『愛着も機能も増やしていける。アップデートで「育てる」時代へ。』と公言したので、発売日に入手して以来、苦労しながら撮影してきた僕のα9は、Ver.20.00くらいまで未来永劫アップデートを続けてもらおう。
ソニーさんへの要望事項
レーティングジャンプ バグの治療依頼
連写した一連の駒をグループ表示する様にしているんだけど、グループ駒の中で最も良い駒にレーティングを付けて、後でレーティングジャンプ機能で表示させようとしてもジャンプしない。 僕は「前ダイヤル」をレーティングジャンプ機能に割り付けているんだけど、レーティングジャンプの時はグループ内のレーティング付加駒へちゃんとジャンプすべきだ。 レーティングを付けた駒を後でFTP転送する時にジャンプ出来ないんじゃ意味がない。 早急に改善して頂きたい。フォルダ番号の強制リセット機能追加
スロットの自動切換えに設定してあると、新しいCFカードを入れた場合でも、カードを初期化した場合でも、カメラが覚えているフォルダ番号から始まってしまう。 スロットが自動的に切換った場合に、フォルダ番号が継続されるので有難い機能ではある。 しかしながら、新しいメディアを挿入した場合は、フォルダ番号を100MSDCFから初めて貰いたい事が多い。 頼むから、メニューにフォルダ番号リセットを追加して欲しい。 また、ファイル番号を連番で運用したいけど、ファイル番号の「強制リセット」というメニューが無いので、ファイル番号が9999→0になる時にフォルダを作っちゃうので、1フォルダ1選手が崩れてしまい非常に困っている。高感度NRに「強い」を追加依頼
解像感重視なのは理解できるけど、女の子の首筋に黒いポツポツが沢山あるのは許せない。 競合他社並みに 高感度NR:強い を追加して、ぱっと見綺麗な写真を生成して欲しい。 こんな汚い写真ばかりだと、編集から『ニコンみたいな綺麗な写真は無いの?』って言われても不思議じゃない。 僕はパソコンで後処理してから納品してるけど、FTP転送で直ぐに納品する時は申し訳なくて心が引き裂かれる思いだ。発色の改善依頼
AWBの仕上がりが競合他社に比べて見劣りする。 ホワイト優先にしても妙な色合いに仕上がる事が多くて困ってしまう。 また、ストロボ使用時のAWBはひどく、外光との組み合わせでのAWB制御など、写真の事をもっと勉強してアルゴリズムを組んで貰いたいし、中途で採用している元ニコンの技術者を活用して、ニコン並みのAWBにして欲しい。AWB以外に、発色そのものがちょっとね...キヤノンのピクチャースタイルでは自分好みの発色に出来たけど、ソニー機の自由度は少なすぎる。 特に蛍光イエローはとても残念な発色になるので、そのままでは全く使えないし、カメラの設定内で弄っても肌色が破綻してしまう。
EVF点灯遅延改善依頼
一般的なEVFタイムラグも更なる改善が欲しいけど、コレはカメラを縦横回転させるときにフィンダーから眼を離すとEVFが消灯する時の動作の事です。 カメラを縦横回転させた後に、再度ファインダーに眼を近づけても測距枠などがなかなか表示されない。 これだとAFさせる訳にもゆかないので、撮影チャンスを逃してしまう事が多々ある。 これも昔から改善されない事の一つで、ファインダーに眼を付けたままカメラを回転させたいけど、眼鏡をかけていると無理だし、超望遠の手持ち撮影では不可能なのだ。EVF表示の引っ掛かり改善依頼
ファインダー表示が一瞬止まった感じになり、ビクッと振れる事がある。 選手を追尾しながらレリーズした後に多く発生するみたいだ。 見た目にも精神的にも良くないので、OVFを見ている様なスムースな表示をお願いします。電子シャッターでフリッカー低減機能の実装
多少エクスキューズが付いてもイイので、電子シャッター(サイレントシャッター)でのフリッカー軽減機能を実装して貰いたい。 大阪府立臨海スポーツセンターなどでの撮影では、後処理が大変で地獄の苦しみだった。画像表示の縦横切換え仕様変更依頼
カメラを縦位置のまま画像を再生させるとき、縦位置で再生出来るのは良いけど、画像を拡大すると横倒しになってしまう。 これ、結構イライラするんだよね。 拡大してもそのままになる様に治してぇ。モニターの暗転バグ治療依頼
画像を再生して使える駒をチェックしていて、『さて次の選手の撮影だ』と思って、シャッターボタンを半押ししても、EVFが真っ暗(F値が未定表示)で『なんじゃこりゃぁ!』と思ってEVFから眼を離しても、TFTでも真っ暗だったりする。 こうなると撮影出来ないし、どうにもならない。α9の初期バージョンでもあったバグで、最近は発生してなかったんだけど、ソニーさんはVer.6.00で再発させやがった。 画像再生状態から撮影状態への状態遷移に絡むバグだと思うけど、GUI系は状態遷移しちゃってるのに、撮像系は寝てる感じだなぁ。 頭の悪いソフト屋がやらかす典型的なバグの一つだろう。 大抵は状態遷移のタイミングによって発生するので、評価部門をすり抜けてしまい、市場で現象がポツリポツリと出てしまうのだ。 早急に治してよね。
以前のバグは、電池脱着で復帰だったけど、今回のバグは電源オフ/オンで復帰した。 パワマネタスクは活きている様だ...まっ、重欠点ですな。
AEロック釦の空振りバグ治療依頼
AEロックボタンにAF関連のカスタム設定を割付けているんだけど、AEロックボタンを押しても無反応の場合がある。 このバグは太古の昔からある。 Ver.4.10までのファームより発生頻度は減ったけど、AEロックボタンを素早く再押しすると高確率で発生する。 昨年はAFしてないピンボケ写真を随分と撮らされた。 このバグ、AFオン釦では決して発生しないところをみると、AFオン釦は割込みタイプで、AEロック釦はスキャンタイプなんだと思う。 チャタ吸処理の仕方に問題がある気がするなぁ。まとめ
自作の画像ビュアーには顔検出・眼検出・上半身検出などを組み込んで、着目点を自動的に抽出する様にしている。 これは、着目点のピントが合っているかどうかを評価して大量の写真を自動的にセレクトする為でした。 なんせ、α9の最初の頃はピントが合った写真を撮るのに随分と苦労していた。 従って、使えそうな写真を増やすために撮影駒数も必然と多くなるので、自動で写真をセレクトする機能が欲しかったのである。折角、自作画像ビュアーに自動セレクト機能を実装したけど、α9 Ver.5.00以降ではピントによるセレクトは必要なくなった感じだ。 残すは、僕好みの構図かどうかを判定する高度な自動セレクト・トリミング機能を作ろうかと思う。
駄目な子ほど可愛いものだけど、僕がまだ動けるうちに立派なカメラになって欲しい。
I used ask SONY developer why the A9 doesn't have anti-flicker settings. The answer is that they didn't install flicker detection component... I think the answer is ridiculous.
返信削除More importantly, I tested the A9 CMOS(maybe IMX310) speed, it takes about 1/160s to fresh all data each time, the fresh speed did not meet the requirements of anti-flicker. Later, I learned from developer that increase in CMOS fresh speed will cause the sensor to overheat.
I guess that 1/160s can't completely eliminate flicker anyway. So, it's not necessary to add function to make the area with the highest brightness appear in the center of the photo...
I set the AE button to the all screen automatic focus mode, quickly press the AE and release it. And repeat several times quickly. Sometimes the focus module will does not work.
When I read this paper ( https://arxiv.org/abs/1611.08050 ), I try to calculate the angle of the limbs to determine the type of skater's pose. I hope that computer can automatically classify images based on skater's pose. However in practice, the angle of the torso has a great influence on the analysis, using 2D images to analyze the 3D orientation of the torso is too complicated.
いつも大変興味深く拝見させて頂いております。
返信削除「EVF表示の引っ掛かり改善依頼」の内容に関しましてα9のEVFを960fpsで録画した動画がありますので考察の資料にでも使って頂けますと幸いです。
https://twitter.com/TKNK_NT/status/946628946736529409