Windows10+VMWare+Ubuntu20.04+Docker+WebODM !!!

※最近Dockerのインストールが若干変わったようです。それを修正しました。

docs.docker.com

長いタイトルだ。ハッシュタグでもつけようか・・・・

タイトル通り、Ubuntu 20.04LTSでWebODMを動かすことが出来たのでメモメモ

やはりネイティブにUbuntu上で動かすのはなかなか難しい。なのでWindows上の仮想環境上のUbuntuで、Dockerという仮想環境を動かし、WebODMを起動するという、よくわからんことをしてみたらうまくいきました。

まず、ハードありき!

ラクルのVirtualBoxでもいけるんだろうけど、画面周りが貧弱なので、今回はVMWareを使ってみた。まぁ、新しいPCを導入したっていうのもあるんだけど・・・

そう、会社で新しいPCを買ってもらいました。ブログは休止状態だったけど、遊んでいたわけではなく、ひたすら仕事でGISを使っていたわけで・・・たまたま更新時期とぶつかってボロいi5マシンから変えていただけることに・・・

で、買ったのが、第10世代Core-i9(10Core/20Thred)、Memory32G、512GBytes nvmeSSDに2TBのHDD、ちょっとメモリが足りなかったが、予算の都合でこれが目一杯。まぁ、これくらいあればなんとか動かせるでしょう、ということで試してみることに。

基本ODMはメモリを食うので、余裕のある環境でやった方がいいと思います。

node-ODMを仮想環境でいくつか割り当てられれば、各での処理が可能になるかなと。。もくろんでいますが、メモリもディスクもそれなりに必要になるし、すでにそうなるとクラウド環境の世界ですね。

 

VMwareから、Linux環境の構成

CPU:4、メモリ16G、HDD:512G、Linux前提で仮想環境を構築。このあたりは実際にやってみてください。

  1. Ubuntu 20.04LTSのISOファイルをダウンロードして、仮想CDにバインド
  2. 起動して仮想環境にUbuntu20.04をインストール。
  3. インストールの際に、アップデートもやっておく。
    sudo apt-get update
    sudo apt-get upgradeなど、でもそのままにしておいてもUbuntu Disktopなか、勝手に更新環境が動き出してアップデートしてくれるはずなので、それに任せてもよい。
  4. 次に sudo apt installで、
    git,vim,unzip,net-tools など、自分で必要なものを入れておく。gitは必須なのでこれだけでもいれておこう。

Docker環境の構成

次はDocker環境を構成します。Ubuntu18.04の時とはPythonのバージョンも変わっているようで、手順が若干違います。

もう、そのまんまコマンドラインで・・

  1. 古いDockerをアンインストール
  2. sudo apt-get remove docker docker-engine docker.io containerd runc
  3. お約束
  4. sudo apt-get update
  5. ご本家のサイトではこれだけ入れれば良いような・・・
  6. sudo apt-get install ca-certificates curl gnupg lsb-release
  7. 一応本家には無いけど、これは残しておく。
  8. sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
  9. フォルダ作る?
  10. sudo mkdir -p /etc/apt/keyrings
  11. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  12. ちょっと長いubuntuのパッケージの適用、バージョン汎用型
  13. echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  14. 後はあんまり変わらないかな・・・
  15. sudo apt-get update
  16. sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
  17. sudo systemctl status docker
  18. sudo usermod -aG dicker ${USER}
  19. sudo apt-get install docker-compose
  20. sudo apt-get install python3-pip

WebODMのインストール

いよいよ本丸。Docker環境下で動くWebODMをインストールします。

  1. git clone https://github.com/OpenDroneMap/WebODM --config core.autocrlf=input --depth 1
  2. cd WebODM
  3. sudo usermod -aG docker ${USER}
  4. sudo systemctl start docker.service
  5. sudo systemctl enable docker.service
  6. ここで、再起動します。
  7. 端末を起動してcd WebODM
  8. ./webodm.sh start で足りないファイルとかをインストールを始めます。
  9. で、いつの間にか動いています。
  10. インストールを伴う一回目の起動のみ、終了はctrl+cで止めてください。
  11. 二回目以降からは
  12. 起動は ./webodm.sh start
  13. 終了は ./webodm.sh stop スクリプトが止まらない場合は、ctrl+c
  14. でOK

呼び出し方法

VMWare内のブラウザから

親環境(Windows10上)のブラウザから

  1. まず、Ubuntu上の端末から、
  2. ifconfig
  3. するといくつかIPアドレスが表示されます。VMWare上の仮想環境では、初期設定ではネットワークはNAT構成になっているので恐らく
  4. 192.168....で始まるipアドレスだと通信可能かと思われますので、
  5. 親環境のブラウザを起動し、
  6. 192.168.xxx.xxx:8000と入力してみましょう
  7. WebODMが立ち上がるはずです。めでたしめでたし。。。

親環境以外のブラウザから

つまり、よそのPCのブラウザから可能か?ですが、Windows10が内部ネットワークに対してポートフォワードが出来れば可能ですが、今回は試していません。まずはここまでです。

でも、仮想環境のネットワークをNATではなく、別物として構成すればipアドレスを割り当てる可能になり、同一PCで2つのアドレスを持つことが出来るのではないかなと・・・思ったりしています。

とりあえず20.04でWebODMが動いたのでメモメモ・・・でした。

次はネイティブ環境で動くかどうか試してみたい。でも仕事が・・・間に合わん。。。

おまけ(Portの変更)

この環境を自宅で作っていたが、いよいよ外部からのテストをしたい・・・ということで、

  1. VMWareのネットワーク設定を「ブリッジ」にした。これで親の環境からDHCPIPアドレスがもらえる。
  2. 次にポート番号を変更する。素直に8000番のままで外部に解放すれば、攻撃の対象になりかねん・・・ということで、ポートを変更する。
  3. ここではポート番号を8003とする。
  4. いったんWebODMを終了したのを確認して、
  5.  ./webodm.sh restart --port 8003
  6. とする。これで8003番に変わる。まぁ、なるべく目立たない番号にしておくが、我が家は中古のRTX1200でルーターを構成して必要ないポートはがっちり閉じているので、そこそこ攻撃にも強いかなと・・・まぁ、狙ってddosされたら元も子もないんだろうけど・・・

 

 最近、割と撮影出張に出かける事が増えてきた。なんというか・・・鳥瞰撮影とかそんなのが多いのだが、多少の暇を見てオルソ用の写真を撮影している。

ホテルのWiFiから自宅サーバーに送って、朝までに計算した後、その日の打合せで成果を見せると・・・・それなりに仕事の機会も増えてくるかな・・・・・ホテルのWiFiがめっちゃ遅いけど。。。データのアップロードに携帯パケット使いたくないしね。

 なんというか。OpenDroneMapもずいぶん進化してきて、オルソも3Dモデルもゆがみが無くなってきている。屋根の直線具合なんかを見ると精度高いなぁと思う。

GCPを使わずにExifGPS情報だけでも0.2~0.5m以内の誤差程度で計算してくれている様だ。テクスチャ付きの3Dモデルはホント訴求力があってクライアントも意外とよく見てくれる。

ちょっとしたデモ用の使用には十分事足りている。

すごいなぁ・・・

ついでに最近、AWSのEC2環境下Ubuntuを立ち上げて使うようになった。

試算したら、WebODMまともに動かすには月何万円かのクラウド利用料がかかるのね・・・何てことだ!