以下の内容はhttps://gigazine.net/news/20191208-python-exif-orientation/より取得しました。



通常、デジタルカメラで撮影した画像データには、撮影したカメラの機種や撮影条件、画像の向きなどの情報がExif(Exchangeable image file)という形式のメタデータで埋め込まれます。このExifが「画像処理をスムーズに行うための足かせになっている」と、機械学習エンジニアのAdam Geitgey氏が解説しています。

The dumb reason your fancy Computer Vision app isn’t working: Exif Orientation
https://medium.com/@ageitgey/the-dumb-reason-your-fancy-computer-vision-app-isnt-working-exif-orientation-73166c7d39da


デジタルカメラやスマートフォンで撮影すると、カメラを縦に構えたか横に構えたかという「写真の向き」についての情報が、Exifとして画像内に埋め込まれます。例えば、以下のようにスマートフォンを縦に持って撮影したガチョウの写真(左)をPhotoshop(右)で読み込むと、正しい向きで表示されます。


ガチョウの写真のExifを閲覧すると以下の画像の通り。画像の向きを指定する「Orientation」属性の部分を見ると、「Rotate 90 CW(時計回りに90度回転)」と記されています。この部分を画像ビューアーが読み込むことで、正しい向きに写真が表示されるというわけです。


Exifは、日本電子工業振興協会TIFF形式を参考にして1995年に規格化した形式であり、JPEG形式には後付けで対応したという経緯があります、そのため、古い画像ビューアーには画像自体を表示することはできても、JPEGファイルに埋め込まれたExifを参照しないものが存在するとのこと。

機械学習ライブラリの中でも画像認識に関するものは非常に人気があり、Pythonの顔認識ライブラリはGitHubで最も人気のある機械学習ライブラリの1つとなっています。しかし、こうした画像認識ライブラリはデータの配列を操作する専門家のためのツールとして開発されており、「自動で画像の向きを調整したい」という一般ユーザーレベルの用途を想定していません。そのため、画像認識ライブラリには古い画像ビューアーと同様にExifを参照しないものが多く存在すると、Geitgey氏は説明しました。

Geitgey氏は「写真を正しい向きを読み込まなければ、写真の中に映っているものを正しく認識できません」と指摘し、「Exif処理の問題は、初心者や学生が書いたPythonスクリプトに限った話ではありません。GoogleのGoogle VisionのAPIですらExifのOrientation属性を正しく処理していないのです」と主張しました。

例えば、Google Visionでガチョウの写真を読み込んだところが以下。Google Visionが写真に含まれるExifのOrientation属性を処理していないため、縦向きの写真が横向きに表示され、そのまま画像認識が行われています。写真内に映っている3羽のガチョウは、検出こそされているものの、それぞれ「Animal」「Bird」と判定されています。


同じ写真を正しい向きでGoogle Visionに読み込ませると、すべてが「Goose(ガチョウ)」と正しく検出できています。


「使っているオープンソースのライブラリが壊れている、あるいは精度が低いという苦情のコメントがGitHubに投稿されることがあります。しかし、その原因は『横向きや逆さまに表示された画像を読み込んでいる』という単純なものであることがよくあります」とGeitgey氏は答えています。

Geitgey氏は「Pythonで書かれたプログラムに画像を読み込ませる場合は、ExifのOrientation属性を確認し、必要に応じて画像の向きを回転させるべきです」と述べ、NumPy配列に正しい向きで画像を読み込ませる以下のコードをパッケージ管理ツールとしてGitHubで公開しています。




以上の内容はhttps://gigazine.net/news/20191208-python-exif-orientation/より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14