- PR -

携帯カメラで撮った写真の縦横の判別方法

投稿者投稿内容
BT
ベテラン
会議室デビュー日: 2006/09/24
投稿数: 81
お住まい・勤務地: Tokyo
投稿日時: 2007-04-23 16:59
お世話になります。

ウェブアプリ(ASP.NET2.0)において、携帯カメラで撮影した共有アルバムを作成しています。
写真のアップロードの方法については携帯メールで記事を投稿できるブログと同じ仕組み(私自身は使ったことはないのですが)と考えていただけるとイメージしやすいかもしれません。

具体的な手順としては、

(1)携帯カメラで撮影した写真をメールで所定のメールアドレスに送信
(2)ウェブアプリ側で一定周期でメールサーバにPOP3でアクセス
(3)受信メールがあったら件名、本文、添付ファイルを読み出してウェブサーバ内に保存
(4)閲覧者に対してはそれらの情報を整理して表示

という感じになります。(2)が難関だと思うのですが(自分だけ?)、最初はウェブアプリとは別のwindowsサービスを作るということで考えていたのですが、CodeZineの記事「ASP.NETでWindowsサービスのような機能を実装する方法」を見つけて、それを参考になんとかウェブアプリだけで一通り動くようにはもっていけました。
http://codezine.jp/r.x/czn064a/aid/1148

これで一応動くのですが、そうなると欲が出てくるものでして、画像を保存する際に「携帯で撮影した写真の方向を検知して正しい方向に回転させる」というのも自動的にできないものかと思いました。
で、少し調べたところ、恥ずかしながら最近(というか以前から?)のデジカメの写真にはExif情報というのが付加されており、GPSの位置情報やサムネイルなどが入れられるということを知りました。であれば、この情報をうまく使えばどちらが上が判断できるのではないかと思ったのですが、Exifの仕様書を探してざっと眺めたところでは、どちらが上かとかいった情報はなさそうに思いました。(ニーズはありそうな気もするのでもしかしたら見落としかも?)
検索している時に、自動判別して回転させるソフトなんてのかあったように思うのですが、それって一体どうやっているのでしょうか?もしかしてExifではなくて画像認識とかを使ったりしてるのでは?と考えたりもしたのですが、実際Exif情報からどちらが上とかを判断する事は可能なのでしょうか?また、Exifで出来なければ何か他の方式があるのでしょうか?

よろしくお願いします。
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2007-04-23 17:59
http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif.html#IFD0Tags
ここに書いてある仕様をざっと見た限りでは

IFD0の「Orientation」タグのデータを見れば、どちらが上か判断できると思います。
未記入
大ベテラン
会議室デビュー日: 2006/12/15
投稿数: 157
投稿日時: 2007-04-23 18:17
どぼん!さんのとこ
BT
ベテラン
会議室デビュー日: 2006/09/24
投稿数: 81
お住まい・勤務地: Tokyo
投稿日時: 2007-04-23 18:50
ゆうじゅんさん、未記入さん。
どうもありがとうございました。

リンクで挙げてもらった規格の説明文の方が簡潔に説明がしてあって分かりやすいですね。
私はJEITAの規格書の方を読んだのですが、たしか該当部分が記載してあるページも見た記憶があるものの、何故か見落としていたようです。すみませんでした。

あとは、アクセスするコードですが、これは、どぼん!さんのところを参考にさせてもらえば出来そうな感じがします。作成中のウェブアプリのメールサーバにアクセスするPOP3コードも、こちらのコードを参考にさせてもらっていたのですが・・灯台下暗しでした。

どうもありがとうございました。
BT
ベテラン
会議室デビュー日: 2006/09/24
投稿数: 81
お住まい・勤務地: Tokyo
投稿日時: 2007-04-23 22:11
早速、試してみました。

とりあえずは確認のため、どぼんさんのコードそのままにWindowsアプリケーションにコピーしてデバッグ画面に出力してみたところ、確かにExif情報に機種名などが格納されているのが確認できました。ただし、肝心の写真については、縦でも横でものOrientation(TAG NO=0x0112)には同じ値(2)が入っているようでした。

携帯以外のMyデジカメを持っていないので、ちゃんとしたデジカメでどうかは確認できていませんが、「Exif」&「Orientation」で検索すると、確かにこの値で縦横を判断するのが一般的なようですので、この値は端末に依存するということなのでしょうか?ちなみに自分はキャリアはauで、端末はCASIOのW41CA(半年くらい前の機種)です。

そもそも、縦とか横とか言うからには端末自体が本体の傾きを認識してExif情報にセットしないといけないと思うので、そこをどうやっているのか・・と思って検索したら、SIセンサーとかいう縦横を判断するセンサーが付いてないとダメなようですね。で、最近のデジカメにはほとんどついているというのは分かりました。

肝心の携帯でのサポート状況は分かりませんでしたが、最近の携帯であればSIセンサーがついているという訳ではないのでしょうか?

そのあたりのサポート状況を確認しないと、せっかく作りこんでも役に立たないということになりかねないので、まずそこから調べたいと思います。とりあえずは、家族の持っている携帯やデジカメではどうなのかを確認してみたいと思いますが、そのあたりのサポート状況をご存知の方がいらっしゃいましたら情報提供していただけたらありがたいです。

.NETとは関係ない話になってしまいましたので、板違いであればご指摘ください。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-04-24 06:55
斜めだったら?

構図としてありですよね?どうなるんだろう?
_________________
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2007-04-24 07:17
引用:

そもそも、縦とか横とか言うからには端末自体が本体の傾きを認識してExif情報にセットしないといけないと思うので、



そんな高級なことやってるわけねーと思いますよ。
データフォーマット上 Orientation を格納する領域があって、ほとんどすべての機種がそこに標準値を放り込んでいるだけ、ってのが実情なんじゃないかなーと思います。

どっちにしろ、仮に「ちゃんとした情報」を格納している機種が存在するとしても、「ちゃんと格納していない機種」がある程度存在しているなら、Exif に格納された情報をアタマっから信じるわけにはいかないですよね。



[ メッセージ編集済み 編集者: 渋木宏明(ひどり) 編集日時 2007-04-24 08:54 ]
未記入
大ベテラン
会議室デビュー日: 2006/12/15
投稿数: 157
投稿日時: 2007-04-24 11:11
参考CIPAのExif参加企業まとめ

[ メッセージ編集済み 編集者: 未記入 編集日時 2007-04-24 11:12 ]

スキルアップ/キャリアアップ(JOB@IT)