Hatena::ブログ(Diary)

自然環境保全のための周辺技術

2016-03-30

Phantom3のExif情報(高さ)を確認&補正する方法

12:16 | Phantom3のExif情報(高さ)を確認&補正する方法を含むブックマーク

現時点(2016.3.3)でのファームウェアではPhantom3で撮影した画像のEXIFに記録される高度には、「GPS Altitude」と「Relative Altitude」の二種類あります。

「GPS Altitude」は、GPSで測位した標高で精度はあまり良くないようです。

「Relative Altitude」は、気圧センサーによる対地高度で、精度は「GPS Altitude」よりも良さそうです。

※「GPS Altitude」は、標高値としての精度は良くないですが、フライト中の相対的なバラつきは、少ないのかもしれません(分かりません)。

Photoscanでは、高さの値は「GPS Altitude」が参照されるので、出来上がりの高さ(標高値)がズレてしまいます。

そのため、exiftoolを使ってEXIF情報(高さ)を補正する方法を紹介します。

※PhotoscanのCamera Calibration→GPS/INS Offsetを利用するれば補正できるのかもしれませんが、良くわかりません。

1. exiftoolのダウンロード

ここからダウンロードします。

http://www.sno.phy.queensu.ca/~phil/exiftool/

コマンド終了時にEnterを押さなくても良いようにファイル名を以下のように変更しておきます。

exiftool(-k).exe→exiftool.exe

2. 高度の確認

コマンドプロンプトで以下のように打つと、EXIF情報を確認できます。

exiftool.exe DJI_0001.JPG

抜粋

About                           : DJI Meta Data
Format                          : image/jpg
Absolute Altitude               : +3.27
Relative Altitude               : +51.60
Gimbal Roll Degree              : +0.00
Gimbal Yaw Degree               : -65.10
Gimbal Pitch Degree             : -89.90
Flight Roll Degree              : +0.30
Flight Yaw Degree               : -65.30
Flight Pitch Degree             : +0.90
Version                         : 7.0
Has Settings                    : False
Has Crop                        : False
Already Applied                 : False
MPF Version                     : 0010
Number Of Images                : 2
MP Image Flags                  : Dependent child image
MP Image Format                 : JPEG
MP Image Type                   : Large Thumbnail (VGA equivalent)
MP Image Length                 : 273323
MP Image Start                  : 4512084
Dependent Image 1 Entry Number  : 0
Dependent Image 2 Entry Number  : 0
Image UID List                  : (Binary data 66 bytes, use -b option to extract)
Total Frames                    : 1
Image Width                     : 4000
Image Height                    : 3000
Encoding Process                : Baseline DCT, Huffman coding
Bits Per Sample                 : 8
Color Components                : 3
Y Cb Cr Sub Sampling            : YCbCr4:2:2 (2 1)
Aperture                        : 2.8
GPS Altitude                    : 3.2 m Above Sea Level
GPS Latitude                    : 35 deg 23' 59.25" N
GPS Longitude                   : 139 deg 16' 58.14" E
GPS Position                    : 35 deg 23' 59.25" N, 139 deg 16' 58.14" E
Image Size                      : 4000x3000

対地高度(Relative Altitude)が51.6mなのに標高値(GPS Altitude)が3.2mになってしまっています。

3. GPS AltitudeをRelative Altitudeに変更

以下のコマンドを打って、imagesフォルダに入っているJPGファイルのGPS Altitudeの値を Relative Altitudeの値に変更します。なお、gpsaltituderefの値は0だと標高値がプラス、1だと標高値がマイナスを表すので、微妙な場所を飛行させた場合は、個別に考えてください。

※ファイルは上書き更新するようにしているので、あらかじめコピーしておいた方が良いかもしれません。

for %i in (images\*.JPG) do exiftool %i -s -s -s -RelativeAltitude | exiftool -overwrite_original %i "-GPSAltitude<=-" -gpsaltituderef#=0

4. GPS Altitude(Relative Altitudeの値が入っている)にオフセットを加える

Relative Altitudeの値は対地高度なので、それを標高値に変換するために、飛ばし始めの標高値を加えます。

ここでは、例として10mを加えています。

for %i in (images\*.JPG) do exiftool %i -overwrite_original -GPSAltitude+=10

以上です。

感想

どうやら2015年の11月ごろのファームウェアの更新で、EXIFのGPS Altitudeの値が、対地高度から標高に変更になったようです。(おそらく)

この作業をすることによって、出来上がりの精度にどう関係するのかとか、GCPでの補正やCamera CalibrationでのOffset指定などとの関係も、検証してないので良くわかりませんが、そのあたりの情報があれば、誰か教えて下さい!

m(_ _)m

2016-03-18 OpenDroneMapの使い方 このエントリーを含むブックマーク

ドローンで撮影した画像を合成して地図化するソフト「OpenDroneMap」をWindowsにインストールして実行する方法を紹介します。

https://github.com/OpenDroneMap/OpenDroneMap

f:id:tmizu23:20160319101605p:image:w640

作成されたobjファイルをmeshlabで表示したところ

1. docker-toolboxのインストール

ここからdocker-toolboxをダウンロードして、インストールします。

https://www.docker.com/products/docker-toolbox

virtualboxをインストールしていない場合は、途中で、「virtualboxをインストールする」かどうかの

チェックボックスが出るので、チェックを入れておきます。


2. Docker用のターミナル起動

Docker Quick Start Terminalを実行するとDocker用のターミナルが起動します。

なお、初回は、defaultというDocker用の仮想マシンが作成されます。


3. OpenDronMapのDockerイメージの入手

ターミナルで、以下のコマンドを打って、OpenDroneMapのイメージを入手します。

docker pull droneseed/opendronemap:latest

4.テスト画像の用意

ここからDownload ZIPを押してテスト画像を入手します。

https://github.com/tmizu23/odm_data_natori

解凍したフォルダは「odm_data_natori」と名前を変えてデスクトップに置いておきます。


5.OpenDroneMapの実行

ターミナルで以下のコマンドを打って、テスト画像の場所を指定します。

hogehogeは自分のユーザー名に置き換えてください。

export IMAGES=/c/Users/hogehoge/Desktop/odm_data_natori

以下のコマンドで、プログラムを実行します。

docker run -v $IMAGES:/images droneseed/opendronemap:latest

6.結果の確認

odm_data_natori\reconstruction-with-image-size-2400-resultsフォルダの中にジオレファレンス済みの画像「odm_orthphoto.tif」が出来上がっていると思うので、それをQGISで開いて表示されればOKです。

同じく、作成された点群ファイル「pointcloud_georef.laz」は以下のサイトにドラッグアンドドロップで確認できます。

http://plas.io

7.DSMの作成

起伏データが欲しい場合は、別途、lastoolsをダウンロードして、コマンドプロンプトで以下のコマンドを打ちます。

http://lastools.org/download/lastools.zip

LAStools\bin\las2las -i pointcloud_georef.laz -o pointcloud.las
LAStools\bin\lad2dem -i pointcloud.las -i dsm.tif

dsm.tifをQGISで開いて確認できればOK

感想

Dockerって何?とかOpenDroneMapの細かい設定については、よく分かってません。

とりあえず、やってみただけなので、詳しいことはこれから勉強します。


2016-01-06 Phantom3で撮影した4Kビデオから静止画をキャプチャする方法 このエントリーを含むブックマーク

Phantom3で撮影した4Kビデオから静止画をキャプチャする方法を紹介します。動画をPhotoscanの入力データにしたいときに使います。

1. ffmpegのダウンロード

https://www.ffmpeg.org/

2. 変換

ff-prompt.batを実行して、以下のコマンドを打ちます。

DJI_0063.MOVの動画ファイルをvideoフォルダの中に開始10秒地点から1秒あたり0.5枚(2秒に1枚)を6桁の連番で保存する

ffmpeg -i DJI_0063.MOV -ss 10 -r 0.5 -f image2 video\\mov%06d.jpg

複数のビデオをまとめて変換したい場合はこちら

for %f in (*.MOV) do ffmpeg -i %f -ss 10 -r 0.5 -f image2 video\\%f%06d.jpg

2016-01-05 Phantom3の飛行ログをgoogle earthで確認する方法 このエントリーを含むブックマーク

Phantom3の飛行ログをgoogle earthで確認する方法を紹介します。


1. 機体から飛行ログを転送

以下のサイトを参考に機体に保存されている飛行ログをPCに転送します。

http://support.dronesmadeeasy.com/hc/en-us/articles/206171443-How-to-download-flight-data-logs-from-the-DJI-Phantom-3-and-Inspire-1

1. Phantom3を起動してDJI GOを立ち上げる

2. 設定画面でflight data mode にする。(日本語訳でそれっぽいのを探してください)

3. Phantom3とPCをUSBで接続する。USBの接続は機体の方(カメラじゃない方)

4. DATファイルをPCにコピーする。


2. 飛行ログをKMLに変換

DATファイルはそのままでは見れないので、以下のサイトでKMLに変換します。

https://www.mapsmadeeasy.com/log_viewer


3. 標高値の調整

変換したKMLの標高値が、ずれている場合は以下のスクリプトで調整します。

python repair_height.py > flight_path_repaire.kml

# -*- coding: utf-8 -*-

import sys

##高さの調整 この値を加える
height = 88

flag = False

for line in open('flight_path.kml', 'r'):
    if "coordinates" in line:
       flag = not(flag)
       print line,
       continue
    if flag:   
       p = line.strip().split(',')
       p[2] = str(float(p[2]) + height)
       print ','.join(p)
    else:
       print line,


4. google earthで確認

kmlをgoogle earthで開けば飛行ログが確認できます。

レイヤパネル->[右クリック]->プロパティ->標高->[パスを地面に延長]のチェックを外すと飛行線だけになって見やすいかもしれません。

f:id:tmizu23:20160105165107p:image:w750

2015-12-22

「おっぱい山」御神体の作成

18:28 | 「おっぱい山」御神体の作成を含むブックマーク

先日、知人の結婚式で阿蘇に行ってきました。

阿蘇には米塚という見事な「おっぱい山」があります。


f:id:tmizu23:20151222170913j:image:h250 f:id:tmizu23:20151012084920j:image:h250

写真:「左:阿蘇山周辺(Landsat8、国土地理院標高タイルを使用)、右:阿蘇の米塚」


「おっぱい山」は、ジオパークの看板にあるように火山の噴石が円錐状に積み上がることによって形成されます。

f:id:tmizu23:20151012085156j:image:w600

写真:「阿蘇ジオパークの看板」


こういうのを「スコリア丘」と言うらしく伊豆の大室山や西之島も「おっぱい山」です。


https://upload.wikimedia.org/wikipedia/commons/thumb/c/cf/Mount_%C5%8Cmuro_20120218_b.jpg/320px-Mount_%C5%8Cmuro_20120218_b.jpg http://www1.kaiho.mlit.go.jp/GIJUTSUKOKUSAI/kaiikiDB/2015nishinoshima/20151117photo/mphoto4_20151117.jpg

写真:「左:大室山(出典:wikipedia)、右:西之島(出典:海上保安庁)」


「おっぱい山」は、その美しさで人々を魅了するですが、このように、その実態は火山だということを忘れてはいけません!もし、再び噴火が始まれば、おっぱい山を愛でることもままならず、最悪その美しさも損なわれる可能性があります。


そこで今回は、「おっぱい山が荒ぶることなく、美しくあり続けますよーに」と、どこからでも祈願できるように「おっぱい山」御神体 を作成してみたいと思います。


用意するもの

  • ラズベリーパイ ×1個
  • 寒天クック ×4g
  • 牛乳 ×1カップ
  • 「おっぱい山」の型 ×1山
  • LED ×2個
  • Webカメラ ×1個
  • 地理院地図 ×1枚
  • Amazon Web Service ×1アカウント

1. 御神体の準備

「おっぱい山」御神体を作成するために、まず型を用意します。

型を作るためのファイルは、地理院地図3Dからダウンロードしたstlファイルをchiriin3d_reverseで裏返して作成します。

f:id:tmizu23:20151220135723p:image:h200 f:id:tmizu23:20151220135724p:image:h200

写真:「左:地理院地図3DからダウンロードしたSTLファイルをmeshlabで表示、右:裏返して型にした状態」


これを3Dプリンタで造形すれば良いのですが、手元に使用できる3Dプリンタがありませんので、DMMのサービスを利用してみます。ファイルをアップロードして、しばらく待つと材料ごとの見積が作成されるのですが、、、

う〜ん、高いですね。。。


f:id:tmizu23:20151220141446p:image:w500


最安のナイロン製でも78,341円です。これからはmakersの時代だ!と思っていたのですが、この価格設定を見る限り、まだ時代はキテないのかもしれません。


ということで、3Dプリンタはあきらめて、お椀で代用します。これに寒天を注ぎ込み、30分冷蔵庫で冷やした後、慎重に取り出します。最後に、山頂部分にLEDを装着すれば御神体の本体部分の完成です。


f:id:tmizu23:20151220151456j:image:w250 f:id:tmizu23:20151220161519j:image:w250

f:id:tmizu23:20151220164109j:image:w510

写真:「おっぱい山御神体」(水を少なめにすると触感がいい感じになります)


2. ラズベリーパイとの接続

「おっぱい山」御神体にどこからでも祈願できるように、ラズベリーパイを御神体に接続してIoT化します。

ラズベリーパイには、無線LANのアダプタとWebカメラを装着します。また、GPIO端子は、御神体山頂のLEDと接続しておきます。あと、御神体側からメッセージを送るためのボタンも接続しておきます。


f:id:tmizu23:20151220164437j:image:w250 f:id:tmizu23:20151220172018j:image:w250

写真:「ラズベリーパイとおっぱい山」(ラズベリーパイではPythonの常駐プログラムを実行しておきます)


3.地理院地図の準備

「おっぱい山」御神体に祈願するためのインターフェースを地理院地図で作成します。

今年のfoss4g Tokyoの藤村さんのハンズオン資料を参考に、おっぱい山のポイントを2/3/1.geojsonで作成します。

ポイントを配置した場所は、左おっぱい山は阿蘇の米塚に、右おっぱい山は伊豆の大室山にしました。

ポイントをクリックすれば、おっぱい山への願いが送信できるように、2/3/1.geojsonのstyle.jsにPOST処理を追加します。また、御神体の最新状況を確認できるように、index.htmlに@oppaiyama38のツイートが表示されるツイッターウィジェットも追加します。


f:id:tmizu23:20151221011022p:image:w500

写真:「地理院地図を利用したIoTインターフェース」(フッター部分をスライドさせると、御神体の状況を確認できます)


4. AWS IoTの準備と全体のフロー

地理院地図から「おっぱい山」御神体にメッセージを送るために、AWS IoTを利用します。全体のフローは、こんな感じです。

f:id:tmizu23:20151222150401p:image

  1. 地理院地図からGateway APIで作成したREST APIに対してPOSTします。
  2. Gateway APIは、Lambdaを呼び出します。
  3. Lambdaは、AWS IoTに対してThings(御神体)にPublishするよう命令します。
  4. AWS IoTは、MQTTプロトコルでラスベリーパイと通信します。
  5. ラズベリーパイは、御神体山頂のLEDを光らせます。

完成

f:id:tmizu23:20151220184041j:image:w340


こちらにアクセスすると、我が家の台所に祀ってある「おっぱい山」御神体に参拝できます。

http://tmizu23.github.io/tmizu23_gsimaps/

[表示できる情報]から [おっぱい山]を選択して、ポイントを表示させてください。

参拝の方法
  1. 「おっぱい山が荒ぶることなく、美しくあり続けますよーに」と願いを込めて、地理院地図に表示させた「おっぱい山」のポイントをクリックします。左おっぱい山でも、右おっぱい山でも、好みの方をお選びください。
  2. 御神体に願いが届くと、我が家に祀ってある「おっぱい山」御神体の山頂が赤く光ります。
  3. 参拝者には、お礼のメッセージと共に巡礼者番号が通知されます。
  4. 巡礼者番号の下一桁が0の場合、webカメラで撮影した参拝時の画像がツイートされます。
  5. 巡礼者番号の下二桁が81の場合、webカメラで撮影した参拝時の動画がツイートされます。

まとめ

地理院地図やラズベリーパイ、クラウド技術を誰でも簡単に利用できるようになったおかげで、おっぱい山をいつでもどこでも拝むことができるようになりました。

ただ、実物で見る「おっぱい山」の美しさは、やはり格別です。

是非、阿蘇に行って、実際の米塚を拝んでみてください!!!

(※おっぱい山どこですか?と聞いても通じないのでご注意ください。)


f:id:tmizu23:20151011143940j:image:w200

写真:「米塚のウェディングケーキ」(知人の結婚式より)


その他

今回作成した「おっぱい山」御神体ですが、我が家の中では、サンタクロースにメッセージを送る装置ということになっています。クリスマスに欲しいものをホワイトボードに書いてボタンを押すと、サンタクロースにその願いが届くかもしれないよ!そして、時々、ライトが赤く光るのは、サンタクロースを乗せたトナカイがこちらに向かっている合図だよ!と、子供達に伝えてあります。(実際には、ボタンを押すと、Webカメラで画像を撮影してツイートするだけなのですが、それは伝えてません)

そのため、Twitterにアップされた画像には、子供が欲しいクリスマスプレゼントが写り込んでいますが、気にしないでください。もし、不憫に感じた場合は、プレゼントを送ってもらうのは、構いませんのでご遠慮無く。


f:id:tmizu23:20151220205412j:image:w200


https://twitter.com/oppaiyama38


参考

設定方法など詳細に説明できると良かったのですが、間に合わなかったので、参考にしたページのリンクを張っておきます。(もっと、色々参考にした気がしますが、とりあえず)

おっぱい山についてご存知ない方は、こちらも参考ください。