ソフトウェア

画像認識システムの落とし穴となる「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で公開しています。

この記事のタイトルとURLをコピーする

・関連記事
たった1枚のキャラ画像とウェブカメラで誰でもVTuberになれるシステムをGoogleのエンジニアが発表 - GIGAZINE

「日本語のくずし字をAIで活字に直す試み」の活発化に海外の研究者らも注目 - GIGAZINE

撮影中の映像からリアルタイムで人物を抜き出してパーツごとに認識可能な「BodyPix」 - GIGAZINE

「画像検索はここまで来たのか」とすさまじさを実感するAdobeのAI「Adobe Sensei」の秘密を開発者が解説 - GIGAZINE

表示するブラウザごとに違う見え方をする「コードで描かれた絵」とは? - GIGAZINE

プログラミング言語Pythonの生みの親がDropboxを退社、Dropboxが語る一流プログラマーの姿とは? - GIGAZINE

in ソフトウェア, Posted by log1i_yk

You can read the machine translated English article here.