- きっかけ
- データ用意
- つくる
- 見る
きっかけ
はぁ。aphex twinのT69 CollapseのMVかっこいいなぁって思うことありますよね。はいあります。
そうすると、はぁ。街のモデルほしいなぁって思う事ありますよね。はいあります。(渋谷とかは街のfreeモデル配布されてたりします。)
正攻法としてはOpenStreetMapを使うんだろうけど、OpenStreetMapではモデルデータない事とかあります。
そんなときに、「GoogleEarthの3Dモデル入手できないんか??」って思いますよね。
どうやらUnityでGoogle Maps APIが使えるようになるらしいんだけど、問い合わせしないといけないしお金かかりそうだしとかで、お手軽じゃなさそうな感じです。
リアルなゲーム | Google Maps Platform | Google Maps Platform | Google Cloud
そういやAutoDeskのRemakeってアプリで画像データから3Dデータ生成できたな?
え?もうMac版のアプリ存在してない?(windows使えよ)まじかよ。
そんならそんなプログラムどっかにあるのでは。
あるんですよね。世の中の偉い方々ありがとうございます。
openMVG(Open Multiple View Geometry)
複数視点画像から3次元の点群を推定するぞってライブラリらしいです。
Structure from motionっていう手法らしい。
openMVS
そしてopenMVGで作った点群からさらに精密な点群を生成するのが
Multi-View Stereoってのらしくてそのライブラリ。
もろもろ詳しくはこのブログが参考になりましたありがとうございます。
NegativeMindさんありがとうございます。
NegativeMindException | Multi-View Stereoによる3次元復元ライブラリ『OpenMVS』
NegativeMindException | 複数視点画像から3次元形状を復元するライブラリ『openMVG』
こいつらを使って生成していきます。
データの用意
google earthからquicktimeで雑に一周画面を録画します。
そして連番で画像ファイル作ります。作り方はなんでもok
ffmpeg -i tokyo_tower.mov -vcodec mjpeg -r 1 image_%03d.jpg
つくる
こういうライブラリは環境作りが大変です。変なところで詰まると1日とか平気で消えます。
ぼくは専門家じゃないので詳しく知らなくて良いからとりあえず3Dデータくれっていう悪いエンジニア的思想から
「環境作るの面倒臭いなぁ。。せやDockerで環境ないんか」
あるんですありがとうございます。
GitHub - rennu/dpg: OpenMVG + OpenMVS Pipeline
まずclone
git clone git@github.com:rennu/dpg.git
cd dpg
そのあとはreadme通りに
docker build -t dpg .
します。
そして
mkdir images
imagesディレクトリ作って先ほどの素材を入れます。
.
├── Dockerfile
├── images
│ ├── image_001.jpg
│ ├── image_002.jpg
│ ├── image_003.jpg
│ ├── image_004.jpg
│ ├── image_005.jpg
│ ├── image_006.jpg
│ ├── image_007.jpg
│ ├── image_008.jpg
│ ├── image_009.jpg
│ ├── image_010.jpg
│ └── image_011.jpg
├── install
├── pipeline.py
├── scripts
└── colmap_sparse_reconstruct.sh
こんな感じかな
docker run -v $(pwd):/datasets --rm -it dpg
でdockerを動かす。
/opt/dpg/pipeline.py --input /datasets/images --output /datasets/output_dense --flength 2553 --sfmtype incremental --geomodel f --runopenmvg --runopenmvs --densify
※[2020/05/01] 最新のバージョンではoption名に変更があったようです。コメント欄を参照ください。
でコマンド打って待ちます。画像多いと時間かかる。今回は5min待ちました。
--flength 焦点距離を指定するんだけど、カメラの場合はcmodel指定する。
とりあえず width * 1.2でも良いみたい。今回はそれで。
output_dense/omvs/scene_dense_mesh_refine_texture.ply
うまくいくとこいつができています。
見る。
MeshLabで見てobjとmlt吐き出して、
houdiniでみて見るとこんな感じ。
あ、あんまり綺麗でない。。
うまくできたりできなかったりするから色々調整して綺麗にできる方法探りたいですね。。教えてください。
はい。ではまた。