飛び込めなかったExif沼！

##Exifもまた沼である
レンズ沼はもはやカメラを趣味とされていない方でもご存知の方も多い概念だとは思います。
写真共有サービスを作るにあたり、レンズ沼にハマることが不可避であったあたりは前のエントリーで書きました。
今回はExif事情を書きたいと思います。

https://qiita.com/Hoshi_7/items/35ed5c1466eba45e73b3

##日本は圧倒的なカメラ超大国！

世界中眺め回したとき競争力があるカメラとレンズを製造できる光学技術やセンサー技術がある国はどこかとなると、フィルムの頃はドイツやアメリカにもそこそこ会社があったような気がしますが、デジタル全盛の現在においては大雑把にいえば日本だけだぜと言ってもいい状況にあります。
日本メーカーの市場占有率は99%。まさに独壇場です。
一時のバブルはスマホの普及で終息を迎えましたが、それでもなおフィルム時代の10倍近い市場規模に膨らんだままです。

であるからには当然のことながらカメラ業界の世界標準というのは日本に置ける業界団体などの共通仕様になってくる訳で、Exifの仕様というのは日本語の原本を入手することができます！

JEITA(一般社団法人電子情報技術産業協会)から入手可能です。
http://www.jeita.or.jp/japanese/

JEITA規格から検索するとこんな感じで出てきます。
<img width="1047" alt="スクリーンショット 2017-12-04 17.25.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/43688/6b4d5051-4b9b-08d9-e3cf-f744910199ac.png">

直接リンク
http://www.jeita.or.jp/japanese/standard/book/CP-3451D_J/

これは非常にありがたいことで。昔、家電の組み込みを三次請けでやっていた時の嫌な思い出が溢れそうな硬めの仕様書の形式だなーとかはあるにしろ日本語で読めるということは物凄くありがたいです。

沼っぽくない雰囲気がしてきましたね！

##日本語の仕様書があるのに何が沼なの？
では何が沼なのか。

###Exifが沼な理由1.メーカーによって実装にバラつきがある！
キヤノン、ニコン、ソニーが現在のデジイチ市場に置けるパワープレイヤーですが、見事に取れるレコードがバラバラ！
<img width="502" alt="スクリーンショット 2017-12-04 17.37.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/43688/32919427-c102-9240-cd2d-9eebb50518e2.png">
<img width="502" alt="スクリーンショット 2017-12-04 17.38.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/43688/9576838f-5e25-919d-d4b8-bbb32c25cffc.png">

※nikon d90以外はExifバージョンは同じである！

まともに共通に取れるのは露出時間、焦点距離、F値、ISO、Flush On/OFFなどの基本的な値のみ。
d90に至ってはレンズModelが取れていない。これはおそらくレンズが純正ではないとかそんな話と思われる。

###Exifが沼な理由2.メーカー内でも実装にバラつきがある！
今度はキヤノンの7Dmark2とちょっと古いがKissX4を比べます。

<img width="352" alt="スクリーンショット 2017-12-04 17.44.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/43688/8a46a2d4-e344-035c-83b5-7bc39a6e3245.png">
<img width="352" alt="スクリーンショット 2017-12-04 17.44.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/43688/1e918611-82ab-21d1-2703-14b3d2160c32.png">

Exif Ver 2.21でちょっと古いKissX4の方が取れたりねするんですね。7Dmk2あたりからのカメラは細かい情報は非公開のメーカーノートに引っ込んでいるっぽい。

###Exifが沼な理由3.メーカーノートの仕様が非公開！

これが結構困ります。どうせなら、ホワイトバランスの設定やら、色補正やら、ミラーアップしてるのかとかいろいろ取れたら面白いですよね。
ところがメーカーノートというブラックボックスがExifには存在しており、そう言ったメーカー固有の設定情報はメーカノートの領域に格納されており非公開です。
後日またエントリーを書くと思いますが、数あるExifを読めるライブラリでExiftoolが、おそらく唯一まともに読むことができます。メーカーノートのコード仕様は海外の有志などにより解析されているというレベルに現時点では留まっています。
exiftoolのCanonCustom.pmとかのあたりを読むと力技で解決されているのがわかります。(メーカー毎に実装がスクラッチされている)
.pmとか長らく見てない気がするが実装はperlです。

https://sourceforge.net/p/exiftool/code/ci/master/tree/lib/Image/ExifTool/CanonCustom.pm

##まとめ
<b>結局Exif沼は回避しました！</b>
ハマってしまうと抜け出せないので、生のExifデータを将来活用できるように保管した上で、当面は基本的な情報のみを活用することで議論は落ち着きました。

<img width="842" alt="スクリーンショット 2017-12-04 18.03.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/43688/2eb76fb7-717a-f9bb-07f8-11afc05528c6.png">
基本的な情報しか取らないことに(レンズはちなみに結局取れないことがこの後わかった)

<b>飛び込まなかった沼！</b>

<img width="846" alt="スクリーンショット 2017-12-04 18.03.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/43688/9a1da23a-ef5e-473e-6f6f-201062bab6de.png">
Exifの話だけでいくつもesaに記事ができる。

<img width="810" alt="スクリーンショット 2017-12-04 18.06.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/43688/ec34827c-eae4-a138-03ed-d315648889ec.png">
最初はMetadataExtraでやっていた。カメラ趣味ではないエンジニアさんに作ってもらうためにサンプルコードを自分で書いたり初期の頃はしていました。

最終的にはlambdaでexiftoolを叩いてexifを読む仕様に落ち着いています。
AWS周りは私は詳しくわかってないのですが。

後日、Exifを取得できるライブラリのエントリーを書く予定です！

スナップマップでは現在「日本の四季 フォトｘスポットコンテスト」を開催中です。
カメラ趣味の技術者の皆様からのご応募お待ちしております！

https://snapmap.jp/