この記事はCivicTechテック好き Advent Calendar 2020の13日目の記事です。「やってみた系レビュー」なので軽く読んでいただけると幸いです。
はじめに
CivicTechテック好き Advent Calendar 2020や、はたまたCivictech1年目 Advent Calendar 2020のスケジュールをご覧のように、ここ数年コミュニティのミーム(法話)となりつつあるバッドデータ供養寺のネタがわたしの当番あたりに集中しています。本来はSocialHackDayなどでいつもお世話になっている点群メイツのmamixに相談しながら真面目なネタのトライアル(後述)をずっとやっていたのですが、畑を片付けたり煙突掃除をしたり猫のトイレ替えなどをしていたため研究をすすめる時間もなく、結局お寺絡みの軽いネタになりました。
想定する読者
- カップラーメンくらいの手軽さで3D(点群)データを作る体験をしたい
- 可能な限り作業費は電気代とネット代でおさえたい
- 明日に学部1年向け講義があるのに今気がついた
- つねづね寺を建立したくてしたくて手の震えが止まらない
…というかた向けに書いています。ミクロン単位での麺の太さや絶品スープについて極めたい方くらいの方にはちょっとむいてないかもしれません、ごめんなさい。
点群とSfM
オープンデータやシビックテック界隈では3Dを表現できる点群(PointCloud)データが注目を浴びています(個人の感想です)。ロックな静岡県庁さんによる点群データのオープン化などだけでなく、ゲームやOpenGLAM関係でもその活用や技術が進んでいます。
この点群データを現実世界から取得するにはレーザースキャン(LiDAR)といった手法があります。最近ではiPhone 12Pro/MaxやipadにもLiDARスキャナが搭載されるなど、じわじわその技術が近づいてきております。
とはいえ、今からiPhone12に機種変するのもなんですし、プロユースでちょうかっこいいレーザースキャナーライカのRTC360を買うためにお昼のパン代をケチってお小遣い800万円分貯めるのもなかなか大変ですよね。
このほかに点群データを作る技術としては、写真データから点群を作成するSfM(photogrammetry)という技術があります。
via. Photogrammetry: 3D Scanning with a camera
たとえば、みんなの首里城デジタル復元プロジェクトなどではこの技術が用いられており、多くの方から集まった首里城の写真から3Dデータを作成しています。SfMに関する細かい解説は関連専門サイトなどにおまかせするとして、これなら今からお昼のパン代(略)をしなくてもツールと素材があればあなたのパソコンで比較的簡単に点群をつくることができます。
ツールと材料
ツールに関しては、商用のPix4DやMetashapeもありますが、軽く点群作成体験をするためにはちょっと荷が重いですよね。そこで今回はSocialHackDayのHackMDを参考にさせていただきオープンソースのRegard 3Dを使ってみます。いろいろ高性能なオープンソースのSfMソフトはあるのですが、Regard3DはGUIベースで操作が可能ですし、GPUなどのハードウェア制限もあまりないので、今回の目的にはうってつけと判断しました。
また、材料の写真を得るために今夜からブータンにあるタクツァン僧院の撮影に行ってもよいのですが、こんなご時世ですし「さくっと建立」するというこの記事の目的に沿わないので、wikimedia commonsなどからクリエイティブ・コモンズ・ライセンスの画像を頂戴することにしました(なお、機械学習などに用いる際の著作権の扱いとかいろいろあったとおもいますが、そこ検証考察してる時間もないので今回は差し障りのない方法にしました)
処理
処理の流れはそんな複雑ではありません。
お野菜集めてきて、炒めるだけです。
写真を集める
今回は比較的写真が多いだろう(と勝手に想像した)東大寺をGoogle画像検索+CCライセンスで検索します。
東大寺付近に住んでいる鹿っぽい生き物とか二月堂とか興福寺も引っかかってくるので適当に見繕って高画質な画像10枚くらいダウンロードします。Pythonとかで判別しながらガツンとスクレイピングでとってくる方法もありますが、今回は「おためし」なのでそこまで凝りません。東大寺で良ければわたしが集めたCCのデータをおいておきます
Regard 3Dで処理を行う
Regard 3Dの準備をします。真面目にやり方を書きかけてましたが、すでに素晴らしい記事がありましたのでこちらを参考にどうぞ
GUI操作だけで画像から3DマッピングするSfMソフトRegard3Dの使い方 on Qiita
手順としては上記Qiitaでの
[Regard 3Dダウンロード]⇒[インストール⇒起動]⇒
[プロジェクトの作成]⇒[画像の追加]⇒
[特徴点の検出と特徴量のマッチング]⇒[三角測量:カメラ位置の計算(バンドルアジャストメント)]⇒[復元された点とカメラの表示]⇒
[密な点群の作成]⇒[メッシュ生成]⇒[レンダリング]⇒[保存]
の流れになります。なんか多そうですが、写真をRegard 3Dで読み込んで、ほぼ延々とデフォルト設定でOKを押していくだけで、おおまかな点群がつくれます。
なお、今回はEXIF情報が最初からない写真も多く、厳密に処理をすすめるための「センササイズの指定」はスキップしています。また、処理枚数は10枚ほどなので序盤のCompute Matchesの設定は最高の[Ultra]にしています(Normalとかでもできると思います)。
結果
Sketchfabでの表示はこんなかんじです
雑いですがplyファイルはこちらに置いています。
ということで、建立ができました!おめでとうございます🙏
※本当はやりたかったこと
じつは、1970年代の東京の風景などから1フレームごとに画像をffmpegで切り出してSfM処理をかけて点描美大みたいに3Dで復元!ややもすれば3Dプリンタで出力しちゃうよ!なんて鼻息荒く目論んで3日くらい抱腹絶倒 七転八倒していたのですが、やはり素材…とくに色んな角度で重複して撮影しないと厳しい(もしくはもっとパラメーターをいじくり回さないといけない)ということがわかり断念をしました。あと、供養寺ネタに前後左右取り囲まれたというのも()
一応町並みっぽいなにかの残骸はおいておきますね.
とはいえ調べてたらCOLMAP+Deeplerningなどで再現、たとえば素晴らしいこちらとかこちらの事例などをみると技術的にはできそうなので、近々さっくり作れるようになるかもしれません。そのときは、昔の町なみを点群からVRにしてお年寄りの方々に見せてあげるのもおもしろいかなと思った次第でした、このあたりの技術は時々キャッチしてみようとおもいます。
この記事のライセンス
この記事はCC BY 4.0(クリエイティブ・コモンズ 表示 4.0 国際 ライセンス)の元で公開します、どうぞどうぞ。