• 14
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

はじめに

 mapillary社が公開している、複数の静止画から3D点群を作成するOpenSfMについて紹介します。GithubにはMac OSへのインストール方法が紹介されております。今回はdockerを使ってOpenSfMを動かす方法についてまとめてみます。
 dockerはWindows環境でも動かす事が可能ですので、より多くの方々にOpenSfMを楽しんでもらえればと思います。

環境構築

docker toolbox のインストール

OpenSfMのダウンロード

Githubのmapillary/OpenSfMから全てのデータをダウンロードしてください。ZIPアーカイブはこちらからもダウンロード可能です。
ダウンロードしたら解凍して下さい。

Dockerの起動

docker-toolboxをインストールすると、Docker Quickstart Terminal とKinematicの2つのアプリケーションがインストールされます。

スクリーンショット 2015-12-10 19.59.02.png

Kinematicの立ち上げ

Kinematicのアイコンを選択して起動します。
起動すると下記のようなウインドウが開きます。
スクリーンショット 2015-12-10 20.54.49.png

dockerにはDocker Hub というコンテナを共有するWebサービスがあり、自由にダウンロードしてそのまま実行することが出来ます。しかし、現時点では、検索フォームにOpenSfMと入力してもヒットしなかったので、Docker HubにはOpenSfMのコンテナは存在しないようです。

DockerfileからDockerイメージの作成

GithubからダウンロードしてきたZIPにはdockerコンテナのイメージを作成するためのdockerfileがあります。
dockerfileは環境構築のレシピのようなもので、ビルドすると実行可能なdockerイメージが作成されます。

  • DOCKER CLIの起動

    • Kinematicsの左下の「DOCKER CLI」をクリックしてターミナルを起動します。
  • unzipしたOpenSfMのディレクトリに移動

$ cd opensfm_tools-master
  • Dockerfile のビルド(数十分程度かかります)
$ docker build -t opensfm:1.0 .

docker build : イメージのビルドを実行する
-t : リポジトリ名とタグ名をつけるオプション
opensfm:1.0 : イメージ名:タグ名
. : Dockerfileの存在するファイルパス

膨大なメッセージが出力されますが、最後に「Successfully built ... 」が表示されれて完了します。

Removing intermediate container f389b732eae4
Step 6 : WORKDIR /
 ---> Running in 260d4f4d1f36
 ---> 60d1e04fe240
Removing intermediate container 260d4f4d1f36
Successfully built 60d1e04fe240
  • docker imageの確認
    • docker images コマンドでdocker内部のdockerイメージの一覧を取得します
$ docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
opensfm                       1.0                 60d1e04fe240        18 minutes ago      1.022 GB
ubuntu                        14.04               89d5d8e8bafb        43 hours ago        187.9 MB

ビルドしたイメージと同一の名称(今回は「opensfm」)があれば成功です。

OpenSfMコンテナの起動

docker run コマンドでopensfmイメージを起動します。

docker とのファイル共有

コンテナ内部の環境と、PCのディレクトリを共有するために -v オプションでマウントします。

-v PCのディレクトリパス:dockerコンテナのディレクトリパス

docker とのポートフォワード

コンテナ内部と通信するために、PC側のポートとコンテナ側のポートとの接続設定を -p オプションで設定します。

-p PCのポート番号:dockerコンテナのポート番号

$ docker run -i -t -d -p 8080:8000 -v /Users/myname/tmp:/mnt/common opensfm:1.0 /bin/bash

dockerコンテナが起動すると、Kinematicの左側のタブに表示されます

スクリーンショット 2015-12-10 23.08.01.png

起動中のコンテナを選択すると、コンテナの情報にアクセス可能です

スクリーンショット 2015-12-10 23.14.00.png

コンテナ接続用のIPアドレスとポート番号

  • SettingタブをクリックするとIPアドレスとポート番号の確認が出来ます。

スクリーンショット 2015-12-11 0.30.32.png

上記では、IPアドレス 192.168.99.100 のポート番号 8080でアクセス可能であることが分かりました。実行環境によってはIPアドレスが異なる場合がございます。

これで環境構築が完了ですお疲れ様でした。

OpenSfMの利用

dockerコンテナとして動作しているOpenSfMを動かしてみます。

  • excecボタンをクリックし、コンソールの起動します スクリーンショット 2015-12-10 23.24.17.png

ビルド

OpenSfMのソースが存在するディレクトリに移動します。

$ cd /source/OpenSfM

ビルドスクリプトの実行

$ python setup.py build

実行

ファイルの準備

OpenSfMでは、EXIF領域に緯度経度が記録されている複数のjpeg画像と、実行スクリプトの設定用のファイルが必要です。

  • ファイル構成

DATASET_NAME (フォルダ)
├ config.yaml
└ images (フォルダ)
  ├ img1.jpg
  ├ img2.jpg

config.yaml は、ダウンロードしたZIPの中に保存されております。
imagesフォルダの内部の画像ファイル名称はなんでも構いません。
DATASET_NAME を「test1」とすると以下の様なパスになります。

PCのパス : /Users/myname/tmp/test1
コンテナ内部のパス : /mnt/common/test1

実行

上記のフォルダ名の例では下記のような実行コマンドになります。

$ bin/run_all /mnt/common/test1

サンプルの実行

EXIF画像が手元にない場合は、デモ用の画像を用います
デモ画像は、/source/OpenSfM/data/lund

$ bin/run_all data/lund

webサーバの起動

$ python -m SimpleHTTPServer

webブラウザで確認

環境構築時に確認した接続用のIPアドレスとポートを確認しWebブラウザにアクセスします。

http://コンテナのIP:8080/viewer/reconstruction.html#file=/data/lund/reconstruction.meshed.json

スクリーンショット 2015-12-11 0.36.02.png

SfMができました!

まとめ

dockerを用いてOpenSfMを動かしてみました。
ご利用のPCの中にコンテナという一種の仮想マシンを立てることで、環境構築の自動化を実現しました。dockerは慣れるまでとっつきにくく感じられることも多いかと思います。しかし、世界の人達と実行環境を共有を可能にするコンテナ技術は、最新技術の実行環境の迅速に構築する事が出来ます。