Windows10+VMWare+Ubuntu20.04+OpenDroneMap+NodeODMネイティブで動いたかも。
なんとかDocker環境なしのネイティブ環境でWebODMまでこぎ着けないか・・・
ということで、悶絶しながらやってきたが、PCがcore-i9という素晴らしく強力な環境を手に入れたことでUbuntuの構築が楽になったので、まずは、NodeODMまでやってみた。自分用備忘録メモ。わかりにくいとか、怒らないでね
。
OpenDroneMapのインストールはわたしのこのブログの
chiikiseibi.hatenablog.comこの記事を参照してもらうとして、
Node-ODMは、Python環境とかが肝になってくるので、そのあたりを簡単にメモ。
githubのOpenDroneMap/NodeODMのページを参照しつつやってみたらうまくいったので、そこまでのメモ。
entwine環境を入れる必要があるようだ。
ここを読んでいくと、まずはミニコンダをインストールしなければならないので
さらにこれ、
docs.conda.ioで、Python 3.8環境を選択した、3.9環境はまだまだなので、ODM的には以前のバージョンも2.7と3.8環境でインストールしていたようだからなぁと・・・なんとなく3.8を選択
Minicond3 Linux 64bit 89.9MiBを選択すると、bash Miniconda3-latest-Linux-x86_64.sh
がダウンロードされる。自分の環境にあったものを選択。
ダウンロードディレクトリにカレントポジションを移して
bash Miniconda3-latest-Linux-x86_64.sh
後は適当に質問に答えていくとインストールされる。
まぁ、大体はただのリターン、スペースと[yes]と入れてリターンのどれか
最後にイニシャライズするか?的な聞き方をしてくるが、後でいろいろあるが、ここでは[yes]としてリターン
端末を一度閉じて開き直すとcondaの動作環境になっているはず。
これで終了
次はentwine環境を構築
さっきのentwineページに戻りつつ
- conda create -n entwine -c conda-forge entwine
でOK
で、いよいよnodeODMのインストールだが、前段の作業がある。
端末を開くと(base)という表示がされているはずである。これはすでにconda環境下でpython3.8が使用可能という意味らしい。
しかし、この状態でNodeODMをインストール(もしくは起動)してもだめっぽい事がわかってきた。そこで、
- conda deactivate
として、conda環境を終わらす。後々、conda環境が動いているとOpenDroneMapも動かないことがわかった。そのため、
- vim .bashrc
として、最下行に
- conda deactivate
と一行入力して、端末を再立ち上げした方がよい。
そして、NodeODM、ODMをインストールするのである。
Pythonはバージョン3環境が20.04のデフォルトなので、pythonのツールを入れるときはpythonのところを大体python3に修正すればインストールされる。
curlが入っていないので入れます。
- sudo apt install p7zip-full unzip curl
- sudo curl --silent --location https://deb.nodesource.com/setup_14.x | sudo bash -
※ここは、サイトではsetup_6.xであったが、そのまま実行すると最新版を入れろ!みたいに言ってくるので、最初から14.xと指定した。
※nodejsはnodesourceをインストールしたあとに入れると良いみたい。というか、そんなメッセージが出た。
- sudo apt install nodejs npm python3-gdal
- git clone https://github.com/OpenDroneMap/NodeODM
- sudo ln -s /home/[User dir]/NodeODM /www
※後々のネイティブ環境のWebODMに備えてリンクを張っておく。すぐに必要となるものではないです。
- cd NodeODM
- npm install
できた!
vmwareで新しい環境で作ったので、順番は逆だがOpenDroneMap環境も続けてインストール
- wget https://github.com/OpenDroneMap/ODM/archive/master.zip
- unzip master.zip
- mv ODM-master ODM
- sudo ln -s /home/[user]/ODM /code
- cd /code
- bash configure.sh install
・・・・・・・・・configuration Finished で、終了!
では、いよいよ
- cd /www
- node index.js
ブラウザからlocalhost:3000で確認。なんとなく動いているかな・・・まだ未確認だけど外形的には動いているような・・・40個程度のファイルで試してみたが問題なく動いた。やった!!!!
***********************************
ここから、追記
どうも、condaを入れて.bashrcで自動的にアクティブ化されてしまったせいで、ODMが途中で落ちるようになった。以下のラーが出る。
no module name cv2
そのため、前述したが、conda deactivateで一端conda環境を終わらすことにした。
ただし、Node-ODM内の挙動はわからないが、condaへのパスは残したい・・・結局.bashrcでパスも切っているようなので、その部分は残し、condaのみdeactivateした。
これでダメなら.bashrcのcondaの部分を削除かと思ったが、・・・なんかうまくいったみたい。
Windows10+VMWare+Ubuntu20.04+Docker+WebODM !!!
※最近Dockerのインストールが若干変わったようです。それを修正しました。
長いタイトルだ。ハッシュタグでもつけようか・・・・
タイトル通り、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前提で仮想環境を構築。このあたりは実際にやってみてください。
- Ubuntu 20.04LTSのISOファイルをダウンロードして、仮想CDにバインド
- 起動して仮想環境にUbuntu20.04をインストール。
- インストールの際に、アップデートもやっておく。
sudo apt-get update
sudo apt-get upgradeなど、でもそのままにしておいてもUbuntu Disktopなか、勝手に更新環境が動き出してアップデートしてくれるはずなので、それに任せてもよい。 -
次に sudo apt installで、
git,vim,unzip,net-tools など、自分で必要なものを入れておく。gitは必須なのでこれだけでもいれておこう。
Docker環境の構成
次はDocker環境を構成します。Ubuntu18.04の時とはPythonのバージョンも変わっているようで、手順が若干違います。
もう、そのまんまコマンドラインで・・
- 古いDockerをアンインストール
- sudo apt-get remove docker docker-engine docker.io containerd runc
- お約束
- sudo apt-get update
-
ご本家のサイトではこれだけ入れれば良いような・・・
-
sudo apt-get install ca-certificates curl gnupg lsb-release
- 一応本家には無いけど、これは残しておく。
- sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
-
フォルダ作る?
-
sudo mkdir -p /etc/apt/keyrings
-
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gp
g - ちょっと長いubuntuのパッケージの適用、バージョン汎用型
-
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
-
後はあんまり変わらないかな・・・
-
sudo apt-get update
-
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
-
sudo systemctl status docker
-
sudo usermod -aG dicker ${USER}
-
sudo apt-get install docker-compose
-
sudo apt-get install python3-pip
WebODMのインストール
いよいよ本丸。Docker環境下で動くWebODMをインストールします。
- git clone https://github.com/OpenDroneMap/WebODM --config core.autocrlf=input --depth 1
- cd WebODM
- sudo usermod -aG docker ${USER}
- sudo systemctl start docker.service
- sudo systemctl enable docker.service
- ここで、再起動します。
- 端末を起動してcd WebODM
- ./webodm.sh start で足りないファイルとかをインストールを始めます。
- で、いつの間にか動いています。
- インストールを伴う一回目の起動のみ、終了はctrl+cで止めてください。
- 二回目以降からは
- 起動は ./webodm.sh start
- 終了は ./webodm.sh stop スクリプトが止まらない場合は、ctrl+c
- でOK
呼び出し方法
VMWare内のブラウザから
- localhost:8000
親環境(Windows10上)のブラウザから
- まず、Ubuntu上の端末から、
- ifconfig
- するといくつかIPアドレスが表示されます。VMWare上の仮想環境では、初期設定ではネットワークはNAT構成になっているので恐らく
- 192.168....で始まるipアドレスだと通信可能かと思われますので、
- 親環境のブラウザを起動し、
- 192.168.xxx.xxx:8000と入力してみましょう
- WebODMが立ち上がるはずです。めでたしめでたし。。。
親環境以外のブラウザから
つまり、よそのPCのブラウザから可能か?ですが、Windows10が内部ネットワークに対してポートフォワードが出来れば可能ですが、今回は試していません。まずはここまでです。
でも、仮想環境のネットワークをNATではなく、別物として構成すればipアドレスを割り当てる可能になり、同一PCで2つのアドレスを持つことが出来るのではないかなと・・・思ったりしています。
とりあえず20.04でWebODMが動いたのでメモメモ・・・でした。
次はネイティブ環境で動くかどうか試してみたい。でも仕事が・・・間に合わん。。。
おまけ(Portの変更)
この環境を自宅で作っていたが、いよいよ外部からのテストをしたい・・・ということで、
- VMWareのネットワーク設定を「ブリッジ」にした。これで親の環境からDHCPでIPアドレスがもらえる。
- 次にポート番号を変更する。素直に8000番のままで外部に解放すれば、攻撃の対象になりかねん・・・ということで、ポートを変更する。
- ここではポート番号を8003とする。
- いったんWebODMを終了したのを確認して、
./webodm.sh restart --port 8003
- とする。これで8003番に変わる。まぁ、なるべく目立たない番号にしておくが、我が家は中古のRTX1200でルーターを構成して必要ないポートはがっちり閉じているので、そこそこ攻撃にも強いかなと・・・まぁ、狙ってddosされたら元も子もないんだろうけど・・・
最近、割と撮影出張に出かける事が増えてきた。なんというか・・・鳥瞰撮影とかそんなのが多いのだが、多少の暇を見てオルソ用の写真を撮影している。
ホテルのWiFiから自宅サーバーに送って、朝までに計算した後、その日の打合せで成果を見せると・・・・それなりに仕事の機会も増えてくるかな・・・・・ホテルのWiFiがめっちゃ遅いけど。。。データのアップロードに携帯パケット使いたくないしね。
なんというか。OpenDroneMapもずいぶん進化してきて、オルソも3Dモデルもゆがみが無くなってきている。屋根の直線具合なんかを見ると精度高いなぁと思う。
GCPを使わずにExifのGPS情報だけでも0.2~0.5m以内の誤差程度で計算してくれている様だ。テクスチャ付きの3Dモデルはホント訴求力があってクライアントも意外とよく見てくれる。
ちょっとしたデモ用の使用には十分事足りている。
すごいなぁ・・・
ついでに最近、AWSのEC2環境下Ubuntuを立ち上げて使うようになった。
試算したら、WebODMまともに動かすには月何万円かのクラウド利用料がかかるのね・・・何てことだ!
WebODM導入
WebODMを導入した。
しばらくの間、悶絶状態でインストール~失敗・・・を繰り返していたが、かなり良いところまで行くが、仕事の合間でなかなか解析する時間がとれない。
結局スクリプトを購入・・・トホホ。なのでスクリプトを含めたインストール詳細を公開したいと頑張ってきたが、ライセンスの関係で、残念ながら概況のみ。
でも、gitのWebODMのページにあるRun it nativeryの所にあるThis community scriptのリンクは・・・かなりいい線をいっている事も判った。でも、挫折したので、その下の行のis also availableのリンクをたどってUbuntu 16.04 Server版を・・・購入・・・はぁ・・・もちろんnative版
まず、ubuntu16.04をPCに新規導入。16.04 インストールのキモのとおりに下準備。
そして購入したスクリプトを流すだけ。
あら出来ちゃった。
随分と使いやすい。が、あくまでフロントエンド。OpenDroneMap本体の計算性能というか・・・そのあたりが最近いろいろと動きがあるようで、ここら辺をなんとかしてほしいとおもうことも・・・これについては、また別記事で。
Win10+WSL+OpenDronaMapのアップデートと設定変更
これがまた。。。。動かなくなったりするもんで、年末年始悶絶していたのですが、1月末にはフォーラムの方で指摘があり、修正されたようです。
おかげで再稼働出来ました。
さて、今日のネタはOpenDroneMapとnode-ODMのアップデートの話。
実は上記のエラーで悶絶していたときにフォーラムを検索していたところ、全くばっちりなスレッドに遭遇。
いやはや・・・と思っていたところ、ふと、書き込みに
- cd /code
- sudo su odm
- git pull origin master
- exit
- sudo bash configure.sh reinstall
- sudo chown -R odm:odm /code
のくだりを発見。これを読み解くと、特権モードで git pull ....なるものを実行した後、まぁ、reinstallをするというもの。ただのreinstallだけじゃアップデートはせず、現在のバージョンを再インストールするらしい。
cd /codeのたぐいは、多分フォーラム推奨のインストール先が/code なので、自分の環境なりに修正する。
ちなみに、普段はWindows10+WSL環境下で使用しているので、
- ubuntu16.04を起動して
- cd OpenDroneMap
- sudo git pull origin master
とすると、なんやら変更箇所を示す表示がされた。で、
- sudo bash configure.sh reinstall
で完了。簡単。
で、その次。
以前、Node-ODMを動かすためにルート直下に/codeを作成してインストールしていたが、シンボリックリンクでもいけんじゃね?的なノリで・・・
代替ルート直下に勝手にフォルダ作るのはいかがなものかと・・・ユーザーは/home/user以下などを使うべきだと思っているので、現在の/code以下を全て削除して、ルート直下にシンボリックリンクで/codeとしてリンクを張ったところ、それでも動いた。
やったね。
で、さらにその次。Node-ODMもルート直下/wwwに入っているので、ホームフォルダ環境下に/wwwを作成して、以前の書き込みの手順でインストール。結構面倒。
さらに一手間、
- ルート直下の/wwwを削除
- シンボリックリンクでユーザーフォルダ以下の~/wwwとリンクを張る。
動きました!。まぁ、別名でログインしたユーザーからは使えないだろうけど、何となくすっきりした。
そうそう、node-opmでもgit pull origin master は使えました。
- sudo git pull origin master
- npm install
アップデートはなんとこれだけ。これも簡単!
ubuntu 16.04 LTS インストールのキモ
最近、webodmを入れるためだけにUbuntu 16.04 を何度も再インストールしている。
クリーンな状態で入れないと後で動かないときの原因が特定出来ないんじゃないかと思うからである。しかし失敗続き。。。。。。これは後からブログに書きたいと思うがまあまあいい線行ってる?のかなぁと・・・思ってはいるのですが・・・・
しかし、このUbutn16.04、なかなかのくせ者でいろいろとエラーを吐いてくれる。これがまた・・・・安定しないというか・・・
でも、10回近く再インストールを繰り返しているうちに、不具合をググったりして、だんだんとコツがつかめてきたので、備忘録としてメモメモ。
対象はUbuntu16.04 LTS DiskTop版。もちろんサーバー版でもいいのだが、真っ黒い画面でコマンドライン打ちまくりは疲れるので、デスクトップ版で少しくらい楽しようと・・・。機能そのものはカーネルの作りが若干違うようで、サーバーはサーバーらしい振る舞いをしてくれるらしいが、通常のユーザーはDiskTop版で十分だと思う。他の仕事も出来るし。
で、前準備・・・何回もインストールし直しを前提に
- unetbootbin ubuntuで検索、要はusbブータブルなubuntuを作るのだ。
- BIOSの設定で、起動順序をUSB優先にして起動するように設定。
- USBを差してBOOT。NVIDIAグラボなので、起動画面で[e]キー、
- [quiet spalsh] の所を[nomodeset]に書き直して[f10]で立ち上げ、
- 後は粛々とインストールしていく。
- そのときにユーザー名は[odm]パスワードも[odm]としてしまおう。
- パスワードが短いなどとというセキュリティーよりも、インストールの手間を軽くするのを優先。
さて、ここからがUbuntuの諸問題解決の手順
- 再起動後すぐに端末を開いて
- sudo apt-get install appstream/xenial-backports
- appstreamcli --versionで0.10になっているか確認
- sudo rm /var/cache/app-info/xmls/fwupd.xml
- sudo appstreamcli refresh --force
これでappstream問題の解決
次に、ライブラリを最新版に
- sudo apt-get update
- sudo apt-get upgrade
続いて必要なライブラリを導入
- sudo apt-get install git <===== 必須!
- sudo apt-get install vim <===== エディタは自分の使いやすいものを
- sudo apt-get install openssh-server <=== 他PCからスクリプトを転送するため。
- sudo apt-get install cifs-utils <==== NASサーバーなどとつないで使うための設定
ついでに
- sudo mkdir /mnt/ODM
などとNASサーバーとマウントするための準備 - 私の場合NVIDIAグラボなので、CUDAをインストールして最新のドライバを導入する。NVIDIA CUDAで検索してubuntu用ドライバのダウンロード・インストールを行う。
- vim nas_mount.sh
すぐにマウント出来るようにスクリプトを作成。
sudo mount -t cifs -o vers=1.0,username=[nasの登録ユーザー],password=[パスワード],file_mode=755,dir_mode=755,/IPアドレス/共有名 /mnt/ODM
というスクリプトを登録しておく。 - sh nas_mount.sh
でNASと接続。 - もう一台のWindowsパソコンからsshで接続して今作ったスクリプトをダウンロードしておこう。再インストールした際にアップロードするだけで手打ちの手間が省ける。
とりあえずここまでは最低限。・・・ふぅっ。。。
今年も終わり。WebODMの話。
今年も現場は忙しかった・・・・やっと終わり。担当する土木の現場も年末年始に向け安全対策やらいろいろと・・・・とにかく疲れました。
さて、WebODM
試行錯誤をかなり繰り返し、まあまあの所まで(まあ、稼働するところまで)いったのですが、イマイチ納得出来ないところがあるんですよね。それがスクリプトのせいなのか、そういう仕様なのか・・・英語のサイトを読み解くのはなかなか厳しいです。
でも、有料でインストーラー配布しているサイトもあるので、今度はそっちで試してみようかと・・・・でもそうなるとさすがにスクリプトの公開は出来ないのですが、使い勝手のレポートは出来るかなと・・・・
現時点では
- ubuntu 16.04のインストールに一苦労。desktop版はappstreamcliに課題があることが判り、その対策をしたら安定した。server版は割とすんなり。でもコマンドラインだけど。
- githubのWebDOMにあるRun it natively内に記述のあるコミュニティーのスクリプトはこれだけでは動かなかった。
- postgresqlの設定とかも、このままではエラーで通らない。パスワードの設定の所なので若干の修正で解決。
- postgresqlのpostgisとかが、バージョンが新しくなっているのが使えるのか・・・。同様にnodesourceのsetupファイルが既に8.0になっているがこれが使えるのか。等々試行錯誤の数が多すぎる。
- webodm のgitファイルを展開して中身を探っていくと、Dockerを使わない場合、サービス登録とかいろいろしなければならないことが判る。
- Dockerを使わないはずなのに、このスクリプトではDockerの設定が入っている。(実際はDockerの設定なしでも動く。)
- apt-get installで関連ファイルが入ったり入らなかったりで、インストールの順序にも支配される事がある。
- nginx以降のインストールが微妙にいろいろある。動かない原因もそのあたりかも。エラーが出たり出なかったり、パーミッションの関係もあるらしい。
- かといって、sudo suで特権モードに入ってもなぁと・・・・これで中途半端な動作だけど、動いた・・・しかし、動いたときに何やったかがメモしていない・・・・はぁ・・・ダメだなぁ・・
- 来年も頑張ります。
ちなみにWebODMも日に日に進化しているようですね。
MeshLabの話、やっぱりグラボは大事!!
今日、いろいろとWebODMをインストールしようと奮闘していたがなかなかうまくいかず、行きづまっていたので、まぁ、その合間にOpenDroneMapで出力した3DモデルをMeshLabでぐるぐるしていた。
使っているMeshLabのバージョンは、MeshLab_v134BETA_64bit版である。
しかし、最新版はMeshLab2016.12版というのがある。もともとこのバージョンは古いインテルのグラフィックスとは相性が悪いらしく、立ち上がりもしない。私のLenovo m92pもIntel HD 4000?だったかな・・・なのでインストールしてみたものの動いてくれなかった。
そのあとグラボにNVIDIA 1050Tiを導入し、2016.12版をインストールしてみたが、読み込みがあまりに遅くて、旧版のほうがそこそこ快適に使えるので、結局旧版を使っていた。
しかし、今日はいろいろと行きづまっていたので、何の気なしに2016.12版にインストールし直し、じっと我慢のデータロードの後、何でグラボ入れてんのに遅いなかなぁ・・・などと、いつもの見慣れた3Dモデルをぐるぐるしていたら、ふと、違いに気がついた。
解像度が細かい・・・・ということで、新版と旧版で、見比べてみた。
同じ3Dモデルの同じ場所をほぼ同じ倍率で拡大し、スナップショットで取ってみた。
いやぁ、びっくりした。こんなに違うんだ・・・というくらい違う。
左が旧版(ソフトウェア)、右が新版(ハードウェアNVIDIA 1050TiのGPUフル活用)である。
左のようなボケボケが当たり前かと思っていたら、道路の亀裂を見てもらえば一目瞭然。
土木的にいえば、構造物の機能診断に使えるレベルだぜ。
両方をタスクマネージャーのGPUの項目で見比べてみると、新版はGPUメモリ4GBytesをフルに使っている。GPUもcopyと3Dを結構使っている。しかし、標準メモリもかなり使ってるな・・・最大32GBytesモデルなので増設しようか・・・
旧版はGPUの項目はピクリともしない。
ゲームでも3Dレンダリングの能力で見栄えがかなり違ってくるとも聞くので、やはりグラボを使って3Dの表示は、土木屋の視点からも結構ポイント高いというのがわかった。
何を今更・・・だが、反省の意味を込めてこれからは新版のMeshLabを使おうと思う。
ちなみに、見学とか来られた方に、これを使ってグルグルすると、食いつきが違うんだよね。おぉーーーって感じで・・・
新版MeshLabはこちらからhttp://www.meshlab.net/
旧版は、MeshLab 日本語情報トップページ - OSDN なお日本語情報であって、日本語版ではありません。