はじめに
画像解析の際によく使うのがExif情報だ。特にDJIなどのドローンには,その中に内部標定や解析に必要ないくつかの情報が載っている。一般的にExif情報とは,画像のメタデータを表すものであるが,よく使われるのは撮影日時や時刻,撮影時のF値などの情報が内蔵されている。実際に自分の携帯で写真を撮った際に,日時あるいは場所が出てくるのは,写真のExif情報を参照しているからである(図1参照)。当然だが,WindowsでもExif情報の一部は確認できる。


ドローンで撮影した画像においてもExif情報は重要だ。特に農業用のドローンであれば,日照センサーが搭載されたドローンもある。その日照センサーの値を取り出したいのだが,一個ずつ探すのは面倒なので,Pythonで一気に抽出したかった。
Exif情報を取得するには,いくつかのツールがあるが,その中でもExifTool by Phil Harveyは非常に有力なツールである。基本的には公式ホームページからダウンロードしてコマンドラインで使うのが一般的であるが,それをPythonでも使えるように拡張するライブラリ(pyexiftool)があるため,今回はそれを使ってPythonの環境を構築する手順を紹介する。簡単に構築できると思っていたら結構沼ってしまったので,それを整理するためにも書いておく。
ExifTool by Phil Harveyとは
Read, Write and Edit Meta Information!
かなりいろいろな種類の画像のExif情報を扱える。
インストール手順
環境
- Windows11
- Miniconda
- Python 3.10.16
Pyexiftoolをインストール
Anacondaを使うと重いし,パッケージ管理がぐちゃぐちゃになるので,Minicondaで環境構築をしている。また,PyexiftoolはPyPIで提供されているため,本来はCondaとPyPIで利用するpipの混同はさける方が良いとのことであるが,この手順でやれば問題は起きていないように思われる(気づいていないだけかもしれないが)。
なにはともあれ,まずはいつものようにpipでインストールをする。もちろん仮想環境を有効化してから。
$ pip install pyexiftool
このままPythonで実行しようとしても肝心の実行ファイルがないため,うまくいかない。つまり,Pyexiftoolだけをインストールしてもそれだけでは何も動かないので,実行ファイルをインストールする必要がある。
ExifTool by Phil Harveyの実行ファイルをダウンロード
ExifTool by Phil Harveyの公式サイトにアクセスし,自分のOSに合ったものをダウンロードする。私の場合は,Windowsの64bitをダウンロードした。

実行ファイルの名称変更
ダウンロードするとzipファイルが出てくるので,これを解凍する。そうすると,図4のようなファイルが出てくる。ここで「exiftool(-k).exe」は実行ファイルである。「exiftool_files」は関連フォルダである。このフォルダがないと実行がうまくできない。「README.txt」は説明ファイルであるので,これを確認する。
要するに,実行ファイルの名前を「exiftool(-k).exe」から「exiftool.exe」に変更して,パスが通っている場所に実行ファイルと関連フォルダを移動させろ,という内容である。

任意の場所に実行ファイルと関連フォルダを移動する
いろいろと参照したが,特にこだわりがない方はCドライブ直下に「exiftool」というディレクトリを作り,そこに実行ファイル(exiftool.exe)と関連フォルダ(exiftool_files)を移動させる。
ユーザーの環境変数の設定からパス指定をする
次は移動させたディレクトリにパスを通す作業を行う。いろいろなやり方があるが,わかりやすいのは設定からパスを通すことだろう。
メニューバーの「検索」からシステム環境変数などと検索すると「システム環境変数の編集」というものが出てくるからそれをクリックする。「環境変数」という場所があるのでそれをクリック。そうすると環境変数の一覧が出てくるため,それの中の(ユーザー名)のユーザー環境変数内の「Path」をダブルクリックする。そうしたら,パスの一覧が出てくるので,「新規」をクリックし,「C:\exiftool\」(あるいは任意の場所のパス)を入力する。これで準備完了(図5)。

実行例
import exiftool
filepath = "/path/to/your/file/image.png"
with exiftool.ExifTool() as et:
metadata = et.execute_json("-j", filepath)
if metadata:
print(metadata[0])
else:
print("メタデータが取得できませんでした。")
これで画像のパスを入力すればメタデータが出力される。
沼ったところ
conda-forgeからexiftool.exeをインストールしようとしたら,コマンドラインでの実行はできるが,Pythonでの利用の際にパスが通っていないといわれた。もしかしたら,Condaとpipの競合の問題がここにきているのかもしれない。
公式サイトには書いてあるが,実行ファイル(.exe)と関連フォルダを一緒に動かさないと当たり前だが,動かない。
関係ないかもしれないが,パスはシステムの環境変数のパスではなく,ユーザーの環境変数のパスを通すとすんなりいった。