TitanCraft is 何?
スマホなどで撮影した1枚の全身画像から、3Dオブジェクトを経由してしてマインクラフトの.schematic
ファイルを生成します。
生成された.schematic
ファイルをWorldEditなどのmod
を使ってマイクラのワールドに読み込ませると巨人を召喚できます。
ソースコードはここで公開しています
こんなことができます
その日 人類は思い出した
ヤツらに支配されていた恐怖を…
鳥籠の中に囚われていた屈辱を…
処理の流れ
以下の画像を使って処理の流れを追ってみます。(画像はここから取得しました)
1. 入力画像から前景を抜き出す
私が作成したremove_bgというリポジトリを使って前景を抜き出します。
その際、次の工程のPIFu
でマスク画像が必要なので、それも一緒に作成します。
remove_bgでは、まず入力画像に対してSemantic Segmentation
を適用して対象のオブジェクトを抽出します。その後、trimap
という3値画像を生成し、入力画像とあわせてFBA_Mattingに入力して前景の抽出を行っています。
サンプルの画像に背景がほとんど無いのであまり適切では無いですが、うまく人物が切り出せていることがわかります。(股のや首の近くなど少し背景が残ってしまっているところもありますね)
remove.bgのAPIを使えばもっと高精度になると思いましたが、有料だったので今回は使っていません。
2. PIFu
で画像から3Dオブジェクト生成
PIFuという手法を使って画像から3Dオブジェクトを生成します。
この処理によって、3D形状だけでなく画像に写っていない部分の服や髪型などのテクスチャも推論してくれます。
PLFu
の詳細については私はあまり理解できていないですが、この記事などにもう少し詳しく載っています。
[処理結果]
(meshlabで可視化)
入力画像には全く写っていない背中やお尻の部分もよく再現されています。すごいですね。
現状では、このまま3Dオブジェクトとして使うのは少し厳しいかもしれませんが、今後技術がさらに進展すれば1枚の画像からキレイな3Dオブジェクトが生成できる日も遠くなさそうですね
3. 3Dオブジェクトからマインクラフト用の.schematic
ファイル生成
私が作成したobj2schematicというリポジトリを使って、2.で生成した.obj
ファイルからマインクラフト用の.schematic
ファイルを作ります。
PIFu
が生成する.obj
ファイルを読み込み、中身を解析してマイクラのブロックに変換しています。
生成された.schematic
ファイルをWorldEditなどのmod
でワールドに読み込ませることで巨人を召喚できます!
どうでしょうか⁉
まぁまぁよく出来てると思います
以下、召喚した巨人のギャラリーです。
まとめ
1枚の画像からマインクラフト内に巨人を召喚するツールを作りました。
Google Colabで実行できるようにしておいたので是非使ってみてください。
ローカルで実行する場合は、pythonの環境が必要ですが、そこさえクリアできればすぐに使えると思います。
GPU無しの私の環境(MacBook Pro(2019))でも1画像(512x512)あたり2~3分で処理することが出来ます。
「すげー!」と息子に言ってもらいたくて作りましたが、想像通りにできて満足です
今回は全身画像から3Dオブジェクトを作りましたが、使用するモデルを切り替えることで他にも色々できるんじゃないかと考えています。
何かアイデアがある方はコメントなどで教えていただけると対応するかもしれません
また、PIFu
やFBA_Matting
などの公開されているモデルを使用させてもらっていますが、各手法の詳細について理解していなくても使えるような状態になっていることはすごいことだと改めて感じました。