2018年6月10日日曜日

Google Location Historyの情報でデジカメ写真に位置情報をタギングする方法


サマリー

写真のGPS情報は分類などのためにとても有用であるが、一眼デジカメで撮影した画像にはGPS情報が入っていないことがおおい。僕のオリンパスE-M5 mk2もGPSは搭載されていない。一眼カメラを持ち運んでいる時にはスマホも持ち運んでいるため、このスマホのGPS情報を書き込めないか?と思いトライしてみた。結果としては、先人達がさまざまなツールを作っているため、簡単に実現できる。非常に費用対効果の高いHackable Thingsである。Googleに位置情報を供給した結果、得られる価値の一つとしては悪くはないかな?

まずは、Googleのデータ出力ページから最近話題の奇妙なデータを取得する。(https://takeout.google.com/settings/takeout/custom/location_history)インターネットには他のKML形式から変換する話がいろいろとあるが、今回はJSONから直接投入する。

ここで取得したデータを画像に埋めていくために、先人達の知を借りるべく、githubで似たソフトを探した結果、Rustで書かれたyoreというツール(https://github.com/WrinklyNinja/yore)を導入した。他にもGPX形式などへの変換をした後に投入する手法などもあったのだが、色々と試した結果、yoreが良いと言う結論になった。

手法は非常に単純で、yoreのドキュメント通りにフォルダを指定して実行すると再帰的にどんどん調査してくれる。毎度毎度yを入れないといけないので、yesコマンドを使って下記のように操作すると良いと思う。
yes | RUST_BACKTRACE=1 ./target/release/yore -l /path/to/ロケーション履歴.json -i  /path/to/image_dir

試行錯誤

実は、yoreもちょっとした問題がありそのままでは動かずで、いろいろな方法をgithubから探して試していたのだが、どれもねらったようにデータが入らず。例えば博多にいるはずなのに、経堂にいるなど。そこで、どいつをきちんとデバッグするかと考えた結果、Rustを使っているので面白そうと言うことでyoreを選択した。yoreはちょと結果を読んでみると、どうやら型がオーバーフローしているだけのようであったので、型を書き換えたところ無事に動作。プルリクを送るなどした。
https://github.com/WrinklyNinja/yore/pull/30