Photogrammetry on Docker ～ サーバ屋さんもXRしたい ～

# フォトグラメトリとは？

最近，このような動画がバズっていました．

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">鎌倉、銭洗弁天をまるごとVR化！<br><br>建築デジタルアーカイブの試み。<br>リプ欄からVR体験可能です。<a href="https://twitter.com/hashtag/Photogrammety?src=hash&amp;ref_src=twsrc%5Etfw">#Photogrammety</a> <a href="https://t.co/Qsf3ZwjQDM">pic.twitter.com/Qsf3ZwjQDM</a></p>&mdash; 龍 lilea (@lileaLab) <a href="https://twitter.com/lileaLab/status/1130809989801447424?ref_src=twsrc%5Etfw">May 21, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

鎌倉の銭洗弁天という場所を"フォトグラメトリ"という技術を用いて作られたようです．

> フォトグラメトリとは、物体を様々な方向から撮影した写真をコンピューターで解析し、3Dモデルを立ち上げる技術です。
> フィギュアのような小さなものから、建築や都市といった大きなものまで3Dモデルにすることができます。

引用：[フォトグラメトリ入門 撮影方法～3Dモデル作成](https://styly.cc/ja/tips/photogrammetry_discont_photogrammetry/)

ざっくりというと，**写真から3Dモデルを生成する技術**です．
最近，私がxRTech Tokyoに参加し，そういや，3か月前くらいにOSSのフォトグラメトリのソフト使ったことあったなーということを思い出し，やる気のあるうちに，**フォトグラメトリを簡単に行うDockerイメージを作りました．**


# リポジトリ

今回作ったDockerのリポジトリ

https://github.com/kotauchisunsun/alpine-mve

今回，Docker用に改造したフォトグラメトリのソフトのリポジトリ

https://github.com/kotauchisunsun/mve


# 利用方法

手軽に行いたい方はこちら

```shell
$ mkdir image # ここにフォトグラメトリの対象となる画像を置く
$ mkdir scene # ここに3Dのモデルが出力される
$ sudo docker run --rm -it --privileged -v `pwd`/image:/image -v `pwd`/scene:/scene kotauchisunsun/alpine-mve ./run.sh 
```

これで`scene/surface-L2-clean.ply`に3Dモデルが生成されます．
**これだけです！**


自分でビルドしたい方はこちら

```shell
$ mkdir image # ここにフォトグラメトリの対象となる画像を置く
$ mkdir scene # ここに3Dのモデルが出力される
$ sudo docker build -t kotauchisunsun/alpine-mve https://github.com/kotauchisunsun/alpine-mve.git
$ sudo docker run --rm -it --privileged -v `pwd`/image:/image -v `pwd`/scene:/scene kotauchisunsun/alpine-mve ./run.sh 
```

速度を求めたい人は自分でcloneしてきて自分のCPUに最適化したDockerイメージを作るのをお勧めします．


# サンプルの出力結果

自分が3Dとして取り出したい対象の写真を撮って利用することもできますが，ここでは，
[Agisoft](https://www.agisoft.com/downloads/sample-data/)さんのサンプルのmonumentというデータを使った出力結果を張り付けておきます．

zipの元の画像データはこんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139643/bf749f70-c21b-de92-0fdb-e27e8523b932.png)

出力された3Dデータ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139643/3a66e3fb-4aa5-af8d-80da-44fea25ffe4c.png)

斜めのアングル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139643/5a994681-1f65-e1ac-4df3-7399ae48ceb6.png)

後ろ姿ももちろん見える
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139643/ed3123db-cb77-0214-7a8c-57420d7b55fd.png)

視点が届きにくい上からのポリゴンは削れがち
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139643/0e090142-45b1-397c-696d-d4a49c945e9a.png)


# OSSのPhotogrammetryソフト

今回利用したのはドイツのダルムシュタット工科大学が作ったMVEというソフトです．

https://github.com/simonfuhrmann/mve

それを，私が今回用にちょっとビルド回りをいじったものを使っています．

https://github.com/kotauchisunsun/mve


**OSSのPhotogrammetryソフトを色々と使ってみた結果，自分には一番MVEがあってる！**となったので，その理由を紹介したいと思います．

## CPUのみで動く

一番の理由がCPUのみで動くことです．高品質なOSSで無料のフォトグラメトリのソフトに[MeshRoom](https://github.com/alicevision/meshroom)というものがあります．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139643/e809f572-f00e-3ef5-8f79-d73671cc7a6d.png)

割と評判もよいので，使ってみたところ，**NVidiaのGPUが必須**のようで，intelのGPUのノートPCでは動きませんでした．したがって，CPUベースのフォトグラメトリソフトを探す必要がありました．


## 速い

もう1つ高精度なフォトグラメトリのソフトとして，[COLMAP](https://demuc.de/colmap/)というものがあります．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139643/e219bf2f-6155-d403-b68b-18ee28924626.png)

これも非常にきれいに出力ができて，なおかつCPUで動く．ということで割と評判が良かったので導入してみました．**私のPCでは遅すぎて出力が終わらなかったです．**これは，悪い点ではあるのですが，おそらく発想が逆で，**アルゴリズムがGPU特化しているせいで，それを無理にCPUで回そうとすると膨大な時間がかかってしまっている**．というのが原因だと思います．私のPCが悪い．
一方で，先ほどのmonumentのサンプルを動かしてもMVEだとCPUでも1時間未満ぐらいで動いたので，非常に手軽でした．


## 1パッケージ

その他にも，色々とのフォトグラメトリのソフトはいろいろあり，[VisualSFM](http://ccwu.me/vsfm/)など色々あります．これも試してみました．しかし，以下の図を見ていただくと分かるのですが，選ぶソフトによっては，そのソフトで完結せず，複数のソフトを経由するものがあり，非常に煩雑です．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139643/f6793889-3579-f78e-c1e5-8e332dac6b22.png)

引用：http://www.cs.cmu.edu/~reconstruction/Documentation.html

これを見ると分かるようにMVEは1つのソフト(リポジトリ)ですべてのワークフローが完結するので，非常に楽です．


# まとめ

- MVEというフォトグラメトリを行うソフトが簡単に動くDockerイメージを作りました．
- MVEはCPUだけでフォトグラメトリが出来て，そこそこ短時間で3Dモデルが作れます．
- 実際にサンプルの画像から3Dモデルが取り出せました．


# 感想

5年ほど前に，3Dスキャナを作ってたこともあり，このあたりの技術には非常に興味がありました．その当時はAutodesk 123D Catchぐらいしかなく，このような画像特徴量ベースのものはかなり少なかったです．その当時から考えると凄く世の中変わったなーと思います．商用のものと比べれば，まだまだかもしれませんが，サーバー屋さんでも手軽にフォトグラメトリできます．時間は結構かかるので，さくらのVPSとかで動かして，寝て待つのがいいのでしょうかね．