SONY MakerNotes を覗いてみて

2

MakerNotesには各メーカーの個性がある
先日も、RAWに関する画像ファイル情報を話題にしたけど、今回はExif情報のディープな部分についてである。
『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以降ではピントによるセレクトは必要なくなった感じだ。 残すは、僕好みの構図かどうかを判定する高度な自動セレクト・トリミング機能を作ろうかと思う。

駄目な子ほど可愛いものだけど、僕がまだ動けるうちに立派なカメラになって欲しい。

Sponsored Link
Sponsored Link

2 件のコメント :

  1. 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.

    返信削除
  2. いつも大変興味深く拝見させて頂いております。
    「EVF表示の引っ掛かり改善依頼」の内容に関しましてα9のEVFを960fpsで録画した動画がありますので考察の資料にでも使って頂けますと幸いです。
    https://twitter.com/TKNK_NT/status/946628946736529409

    返信削除

Sponsored Link