皆さんこんにちは - 私はこれにほぼ3日間取り組んでおり、ついにDJI FPVドローンからDrone2Mapにビデオをインポートしてオルソモザイクやその他の2Dプロジェクトを作成するための方法論を考案しました。DJIのFPVドローンをDrone2Mapシステムに統合する方法についての情報や先行文献が見つからなかったので、この情報がこの質問の答えを探している次の方の助けになればと思います。私がこれから詳述する方法よりも良い方法があるかもしれませんので、もしあれば教えてください。また、この方法論が他のドローンにも役立つ場合はお知らせください。 <\/P>
始める前に、いくつかの前提条件/注意点を述べておきます。この方法論は、ナディア(真下)から斜め角度で撮影されたビデオをジオタグ付き静止画像に変換し、それをDrone2Mapにインポートできるようにするためだけに開発されました。コマンドライン操作やpythonスクリプト編集に最低限の慣れが必要であり、Drone2Mapに加えていくつかのサードパーティアプリケーションが必要で、飛行中は高度とタイミングに注意を払う必要があります(DJI FPVの高度表示は一貫して不正確で役に立ちません)。多くの人にとって、画像は平坦(もしくはほぼ平坦)な地面上の一定高さで撮影されると仮定しています。これは誤った仮定かもしれませんが、この要約ではそうしています。このプロセスを機能させるには、 DJI FPVドローンをSRTデータ記録モードに設定している必要があります。<\/EM>これはデフォルトでオンですが、システム設定メニューで切り替え可能です。 この方法論には以下も必要です: VLC Media Player<\/STRONG>、 Exif Tool<\/STRONG>、スクリプト編集ソフトウェア<\/STRONG>(私はVisual Studioを使用しています)。<\/P>VLC Media Playerはこちらから入手できます: https:\/\/www.videolan.org\/vlc\/download-windows.html<\/A><\/P>Exif Toolはこちら(Windows実行ファイルをダウンロードしてインストールしてください。「exiftool(-k).exe」から「exiftool.exe」に名前を変更し、それをC:\Windowsディレクトリに置きます): https:\/\/exiftool.org\/<\/A> <\/P>Visual Studio Codeはこちら: https:\/\/code.visualstudio.com\/download<\/A> <\/P>これらすべてが準備できたら、始めましょう。まず最初に作業ディレクトリを作成します。この例では「C:\User\YOUR_NAME\Documents\FPV Geotagging」と呼びます。microSDカードからビデオと.SRTファイルをこのディレクトリに移動します。念のためデータのコピーも作成してください。次にこちらのサイトへアクセスします:https:\/\/djitelemetryoverlay.com\/srt-viewer\/<\/A>。トップページで「Load File(s)」をクリックし、ジオタグ付き画像に変換したい飛行ビデオの.SRTファイルをアップロードします。飛行経路とデータの非常にクールな可視化をご覧ください。テレメトリーデータをCSVとしてダウンロードします。これはビデオの各フレームごとのGPS緯度・経度・高度(最後の値は信頼できるかどうかは個人的には疑問ですが)の記録です。これを作業ディレクトリに保存します。<\/P>FPVビデオをVLC Media Playerで開きます。ツールメニューから「Preferences」を選択します。表示されたPreferencesウィンドウ左下隅に「simple」と「advanced」の切り替えトグルがありますので、「advanced」を選択します。左側メニューで「Video」をスクロールダウンし、そのドロップダウンメニューから「Filters」を選択します。このウィンドウ右側には複数のフィルターとチェックボックスが表示されます。「Scene video filter」という名前のフィルター(私のVLCビルドでは2列目上から3番目)にチェックを入れます。そのフィルター選択後、左側メニュー内「Filters」の横矢印ドロップダウンをクリックし、「Scene filter」を選択します。設定で画像フォーマットを「JPG」にし、ディレクトリパスプレフィックスを作業ディレクトリ(この例では「C:\User\YOUR_NAME\Documents\FPV Geotagging」)に変更します。次にカメラのフレームレートとエクスポートしたい写真枚数に応じて録画比率を調整します。DJI FPVは60fpsなので、1秒ごとに写真1枚取得するため録画比率は60に設定しました。この仕組みや適切な録画比率について詳しく知りたい場合は、この素晴らしいガイドをご覧ください (https:\/\/www.vlchelp.com\/automated-screenshots-interval\/#:~:text=Expand%20further%2C%20Video%20%3E%20Filters%20%3E,would%20make%20it%2050%20seconds<\/A>)。右下隅の「Save」をクリックし、VLCウィンドウを閉じます。再度動画をVLCで開くと、1秒ごとに写真が作業ディレクトリへエクスポートされ始めます。これが正しく行われているか確認してください。もしうまくいかない場合は先ほどリンクした資料をご参照ください。それぞれのフレームは「scene00001.jpg」、「scene00061.jpg」、「scene00121.jpg」などという名前でエクスポートされます。「scene」の後ろの数字はキャプチャ元動画フレーム番号と対応しています(例:「scene0001.jpg」は動画最初のフレーム画像)。これらがディレクトリ内に保存されたら、画像へのジオタグ付け作業へ進みます。 <\/P>Visual Studio Codeと先ほど保存したCSVファイルを開きます。VS Codeセットアップが必要なら今行ってください。オンラインには多くのドキュメントがあります。他のコード編集ソフトウェアをご使用の場合はこの部分は無視してください 。<\/P>Microsoft Excel使用の場合、CSVファイルへ戻り、「FRAMECNT」列隣に「File Name」という新しい列を作成します。「FRAMECNT」列内のフレームカウント値をハイライトし右クリック、「セルの書式設定」を選択します。左メニューで「特殊」、次いで「種類」欄から「郵便番号」を選びます。これでフレームカウント値へ先頭ゼロが追加されます。他にも方法はありますが、もしより良い方法があれば教えてください。これは簡易的な方法です。「File Name」列最初のセル以下にはファイル名再構築用式を書き込みます。この例では最初セルには「scene00001.jpg」、次には「scene00002.jpg」と続くようにします。この名前列は値のみ貼り付け/新規列として作成してください。同じCSV内で新しいシートも作成し、Windowsファイルエクスプローラーも開きます。作業ディレクトリへ移動し全ファイル名順ソート後、ドローン画像ファイル(画像のみ)全て選択しShiftキー押しながら右クリック、「パスとしてコピー」を選びます。Excel空白シートへ戻り貼り付け、新たな列「File Name」を作成し貼り付けたパス末尾からファイル名だけ抽出します(例:「=RIGHT(A2,14)」)。これも値のみ貼り付けしてください。「LATITUDE」「LAT REF」「LONGTIUDE」「LON REF」「ALTITUDE」という5つ新規列も作成します。XまたはVLOOKUP関数で各ファイル名参照し緯度・経度・高度値取得します。「Lat/Lon Ref」列にはそれぞれN/SまたはE/Wを入力してください(詳細はこちら:https:\/\/exiftool.org\/faq.html#Q14<\/A>)。もっと良い/簡単/分かりやすい方法もあるかもしれませんのでMicrosoftサポートページ等をご参照ください。この説明で混乱させてしまったら申し訳ありません。この最終目的は各ファイルごとの緯度・経度・高度値一覧表作成です。この処理完了後、このタブを独立したCSVとして作業ディレクトリ内へ「SRT_Telemtry.csv」という名前で保存してください。<\/P> <\/P>Visual Studioへ戻り、以下コードブロックを貼り付けてください:<\/P> <\/P> <\/P> <\/P>import os import csv with open('F:\/Drone Footage \/05.10.2022 \/Frame_Geotagging_Data.csv','r') as file: reader=csv.DictReader(file) for lyrname in reader: picture_filename = lyrname['File Name'] gps_latitude = lyrname['Latitude'] gps_longitude = lyrname['Longitude'] gps_altitude = '20' gps_lat_ref = lyrname['Lat Ref'] gps_lon_ref = lyrname['Lon Ref'] command_string = f'exiftool -GPSLatitude="{gps_latitude}" {picture_filename}' os.system(command_string) command_string = f'exiftool -GPSLatitudeRef="{gps_lat_ref}" {picture_filename}' os.system(command_string) command_string = f'exiftool -GPSLongitude="{gps_longitude}" {picture_filename}' os.system(command_string) command_string = f'exiftool -GPSLongitudeRef="{gps_lon_ref}" {picture_filename}' os.system(command_string) command_string = f'exiftool -GPSAltitude="{gps_altitude}" {picture_filename}' os.system(command_string)<\/code><\/pre> <\/P> <\/P> <\/P> ファイルパス(3行目openコマンド後ろ)をご自身の作業ディレクトリパスへ変更し、このスクリプトを作業ディレクトリ内へ「batch_exif_writing.py」として保存してください。コマンド端末を開き作業ディレクトリへ移動("cd C:\Users\YOUR_NAME\Documents\FPV Geotagging")し、「python batch_exif_writing.py」と入力して実行してください。「1 image has been updated」というメッセージが端末画面いっぱい流れて全ファイルへのジオタグ付け処理が進みます。<\/P>スクリプト実行完了後(私の場合約5分)、画像はジオタグ付きとなりDrone2Mapへ読み込める状態になります!以上、このガイドがお役に立てば幸いです DJI FPVドローンとDrone2Mapを使おうと外で探しています。私はまだ画像処理の過程で発生したアーティファクトや不要な部分を取り除くために画像を整理しています。しかし、それは別の日の話です。このプロセスに対して編集、提案、コメント、批評があればぜひ教えてください。もっと簡単な方法があると思いますが、これは私にとってうまくいった方法であり、独自に考え出さなければなりませんでした。ありがとうございます!<\/P>
Exif Toolはこちら(Windows実行ファイルをダウンロードしてインストールしてください。「exiftool(-k).exe」から「exiftool.exe」に名前を変更し、それをC:\Windowsディレクトリに置きます):
Visual Studio Codeはこちら:
これらすべてが準備できたら、始めましょう。まず最初に作業ディレクトリを作成します。この例では「C:\User\YOUR_NAME\Documents\FPV Geotagging」と呼びます。microSDカードからビデオと.SRTファイルをこのディレクトリに移動します。念のためデータのコピーも作成してください。次にこちらのサイトへアクセスします:
FPVビデオをVLC Media Playerで開きます。ツールメニューから「Preferences」を選択します。表示されたPreferencesウィンドウ左下隅に「simple」と「advanced」の切り替えトグルがありますので、「advanced」を選択します。左側メニューで「Video」をスクロールダウンし、そのドロップダウンメニューから「Filters」を選択します。このウィンドウ右側には複数のフィルターとチェックボックスが表示されます。「Scene video filter」という名前のフィルター(私のVLCビルドでは2列目上から3番目)にチェックを入れます。そのフィルター選択後、左側メニュー内「Filters」の横矢印ドロップダウンをクリックし、「Scene filter」を選択します。設定で画像フォーマットを「JPG」にし、ディレクトリパスプレフィックスを作業ディレクトリ(この例では「C:\User\YOUR_NAME\Documents\FPV Geotagging」)に変更します。次にカメラのフレームレートとエクスポートしたい写真枚数に応じて録画比率を調整します。DJI FPVは60fpsなので、1秒ごとに写真1枚取得するため録画比率は60に設定しました。この仕組みや適切な録画比率について詳しく知りたい場合は、この素晴らしいガイドをご覧ください (
Visual Studio Codeと先ほど保存したCSVファイルを開きます。VS Codeセットアップが必要なら今行ってください。オンラインには多くのドキュメントがあります。他のコード編集ソフトウェアをご使用の場合はこの部分は無視してください 。<\/P>
Microsoft Excel使用の場合、CSVファイルへ戻り、「FRAMECNT」列隣に「File Name」という新しい列を作成します。「FRAMECNT」列内のフレームカウント値をハイライトし右クリック、「セルの書式設定」を選択します。左メニューで「特殊」、次いで「種類」欄から「郵便番号」を選びます。これでフレームカウント値へ先頭ゼロが追加されます。他にも方法はありますが、もしより良い方法があれば教えてください。これは簡易的な方法です。「File Name」列最初のセル以下にはファイル名再構築用式を書き込みます。この例では最初セルには「scene00001.jpg」、次には「scene00002.jpg」と続くようにします。この名前列は値のみ貼り付け/新規列として作成してください。同じCSV内で新しいシートも作成し、Windowsファイルエクスプローラーも開きます。作業ディレクトリへ移動し全ファイル名順ソート後、ドローン画像ファイル(画像のみ)全て選択しShiftキー押しながら右クリック、「パスとしてコピー」を選びます。Excel空白シートへ戻り貼り付け、新たな列「File Name」を作成し貼り付けたパス末尾からファイル名だけ抽出します(例:「=RIGHT(A2,14)」)。これも値のみ貼り付けしてください。「LATITUDE」「LAT REF」「LONGTIUDE」「LON REF」「ALTITUDE」という5つ新規列も作成します。XまたはVLOOKUP関数で各ファイル名参照し緯度・経度・高度値取得します。「Lat/Lon Ref」列にはそれぞれN/SまたはE/Wを入力してください(詳細はこちら:
<\/P>
Visual Studioへ戻り、以下コードブロックを貼り付けてください:<\/P>
import os import csv with open('F:\/Drone Footage \/05.10.2022 \/Frame_Geotagging_Data.csv','r') as file: reader=csv.DictReader(file) for lyrname in reader: picture_filename = lyrname['File Name'] gps_latitude = lyrname['Latitude'] gps_longitude = lyrname['Longitude'] gps_altitude = '20' gps_lat_ref = lyrname['Lat Ref'] gps_lon_ref = lyrname['Lon Ref'] command_string = f'exiftool -GPSLatitude="{gps_latitude}" {picture_filename}' os.system(command_string) command_string = f'exiftool -GPSLatitudeRef="{gps_lat_ref}" {picture_filename}' os.system(command_string) command_string = f'exiftool -GPSLongitude="{gps_longitude}" {picture_filename}' os.system(command_string) command_string = f'exiftool -GPSLongitudeRef="{gps_lon_ref}" {picture_filename}' os.system(command_string) command_string = f'exiftool -GPSAltitude="{gps_altitude}" {picture_filename}' os.system(command_string)<\/code><\/pre> <\/P> <\/P> <\/P> ファイルパス(3行目openコマンド後ろ)をご自身の作業ディレクトリパスへ変更し、このスクリプトを作業ディレクトリ内へ「batch_exif_writing.py」として保存してください。コマンド端末を開き作業ディレクトリへ移動("cd C:\Users\YOUR_NAME\Documents\FPV Geotagging")し、「python batch_exif_writing.py」と入力して実行してください。「1 image has been updated」というメッセージが端末画面いっぱい流れて全ファイルへのジオタグ付け処理が進みます。<\/P>スクリプト実行完了後(私の場合約5分)、画像はジオタグ付きとなりDrone2Mapへ読み込める状態になります!以上、このガイドがお役に立てば幸いです DJI FPVドローンとDrone2Mapを使おうと外で探しています。私はまだ画像処理の過程で発生したアーティファクトや不要な部分を取り除くために画像を整理しています。しかし、それは別の日の話です。このプロセスに対して編集、提案、コメント、批評があればぜひ教えてください。もっと簡単な方法があると思いますが、これは私にとってうまくいった方法であり、独自に考え出さなければなりませんでした。ありがとうございます!<\/P>
OMG this is amazing @RyanWalter . gonna try this out and let you know how it goes!
サインインしたメンバーは投稿、更新のフォローなどができます。初めてですか?無料アカウントを登録してください。
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.