smellman's Broken Diary

クソみたいなもんです

アクションカメラ+自転車でMapillary

先日、怪しいアクションカメラを手に入れました。

ちょうどクーポンを使って4000円を切る値段だったので、これを使って自転車で記録を取り、Mapillaryに画像をアップロードしてみました。

まず、GPSロガーを用意します。僕の場合はGarminのInstinct Dual Powerを使っています。

準備としては以下のことをします。

  1. カメラの充電を行う。
  2. カメラの時計とGPSロガーの時計を手動で合わせる*1
  3. カメラのビデオの設定はEIS(手ブレ補正)+4Kが良い*2
  4. カメラを自転車に取り付ける(カメラ付属のパーツでOK)

では、実際にデータを取る手順ですが、以下のようにします。

  1. GPSロガーを有効にします。
  2. カメラの録画を開始します。
  3. 自転車で走ります。
  4. カメラの録画を停止します。
  5. GPSロガーを停止します。

このとき、GPSロガーの有効化とカメラの録画の順番があとで修正するときのポイントになります。

次に、microSDからデータをコピーして作業をします。

まずやらないといけないのが動画の結合です。短い動画だと編集は必要ないですが、長い動画を取ると自動的に分割されるため結合をする必要があります。

今回3つログを撮ったので、以下のようなファイルになりました。

$ ls
FILE201201-094655F.MOV FILE201201-100155F.MOV FILE201201-101918F.MOV FILE201201-102827F.MOV FILE201201-104327F.MOV

このうち、FILE201201-094655F.MOVとFILE201201-100155F.MOV, FILE201201-102827F.MOVとFILE201201-104327F.MOVがセットになります。

では、繋げて行きます。

ls > tmp.txt
cp tmp.txt concat1.txt
cp tmp.txt concat2.txt
vim concat1.txt
vim concat2.txt

concat1.txt の内容を以下のようにします。

file 'FILE201201-094655F.MOV'
file 'FILE201201-100155F.MOV'

あとは ffmpeg でくっつけたり、単にmp4*3に変換したりします*4

ffmpeg -safe 0 -f concat -i concat1.txt 20201201_1.mp4
ffmpeg -i FILE201201-101918F.MOV 20201201_2.mp4
ffmpeg -safe 0 -f concat -i concat2.txt 20201201_3.mp4

次にGPSログをGPX形式で用意します。僕の場合はGarmin Connectからダウンロードしますが、GPX以外のログしかない場合はGPSBabelなどを使って変換をしてください。

ファイル名を整理して、こんな感じになるようにします。

$ ls *.gpx *.mp4
20201201_1.gpx 20201201_1.mp4 20201201_2.gpx 20201201_2.mp4 20201201_3.gpx 20201201_3.mp4

これが今回の入力ソースになります。

次にGPXファイルを編集します。

vim 20201201_1.gpx

GPXの最初のポイントを動画ファイルの最初の時間になるよう調整します。1秒ぐらいの狂いなら問題はないと思います。

f:id:smellman:20201201152458p:plain
GPXの編集

次に Mapillary Tools を導入します。 

github.com

macOSであればzipファイルを展開するだけで動作します。*5
今回は ~/bin/mapillary_tools に保存をしています。

あとはvideo_processingとuploadを行います。処理中にmapillaryの認証がありますのでそこは適当に行ってください。

まずはvideo_processingです。この処理は --advanced オプションをつける必要があります。

~/bin/mapillary_tools video_process --advanced \
  --geotag_source gpx \
  --geotag_source_path 20201201_1.gpx \
  --interpolate_directions \
  --video_import_path 20201201_1.mp4 \
  --user_name smellman \
  --overwrite_all_EXIF_tags \
  --summarize \
  --use_gps_start_time

実行すると mapillary_sampled_video_frames というディレクトリにファイルが生成されます。

この中で特に重要なのが --use_gps_start_time オプションです。このオプションでGPXの時間を開始時間として利用するようになります。

正しく座標が割り当てられたかは実際に地図で見てみる必要があります。macOSならプレビューアプリで参照できます。大まかに目立つ位置が正しく座標がついていれば問題ないです。

あとはアップロードを行います。

~/bin/mapillary_tools upload --import_path mapillary_sampled_video_frames/20201201_1
~/bin/mapillary_tools upload --import_path mapillary_sampled_video_frames/20201201_2
~/bin/mapillary_tools upload --import_path mapillary_sampled_video_frames/20201201_3

以上で終了です。

*1:ちなみに、カメラの時間はどんどんずれていくので毎回合わせる必要がある

*2:1080pだと結構荒くなる

*3:.mov形式でもいけるかもしれないが試してない

*4:このやり方だと重たいのでもっと軽い処理を探した方が良いかもしれない

*5:現在はPython2系なのでLinuxでは注意が必要だと思われます