← PROJECTS
プロセスレポート / 写真から3Dへ

Body Images
to 3D Preview

本レポートでは、4枚の全身写真から人物の切り抜きを行い、ローカルの fallback メッシュと Hugging Face 上の PSHuman 推論を併用して、3D プレビュー動画を生成した手順を整理しています。入力素材、処理段階、中間生成物、運用上の修正点、最終出力を、同一ページ上で追える構成にしています。

Input
4 views
正面、側面、背面、3/4 視点の静止画を使用しました。
Segmentation
YOLO11-seg
屋外背景の混入を抑えるため、人物マスクを再作成しました。
Remote Model
PSHuman
private Space daitomanabe/PSHumanL40S x1 で運用しました。
Preview
6s / 24fps
最終 turntable 動画をレビュー用に生成しました。
01 / Inputs

入力画像

入力は Body Images 内の4枚です。ポーズは腕が胴体から離れており、全身の外形を推定しやすい状態でした。一方で背景は屋外で情報量が多く、黒い衣服も多いため、マスク精度がその後の結果を左右する条件でした。

FrontInput 01
Front input

正面視点です。左手側の背景物体が人物近傍に存在しています。

SideInput 02
Side input

側面視点です。身体の厚み推定に使用しました。

BackInput 03
Back input

背面視点です。背面シルエットの補完に使用しました。

3/4 ViewInput 04
Three quarter input

最もクリーンな入力であり、PSHuman の本推論にはこの画像を用いました。

02 / Pipeline

画像からメッシュへ

今回の処理は、写真の人物切り抜き、4視点の silhouette 整形、ローカル fallback としての visual hull 生成、private Space 上の PSHuman 推論、最後の turntable 動画化、という順で進めています。下の各段で、どの出力が次の入力になったかを確認できます。

Step 01

人物切り抜きの再構成

初期には rembg も試しましたが、屋外背景由来の混入が残りました。そのため本処理では yolo11n-seg を使い、4枚すべての人物領域を再抽出しました。切り抜き画像は outputs/prepared/*.png として保存しています。

この段階で最も安定していたのは 3_4_view.png であり、最終の PSHuman 推論ではこの画像を主入力に採用しました。

YOLO11-seg RGBA PNG Body Isolation
Prepared three quarter image
Step 02

4視点 silhouette の正規化

visual hull を作るため、切り抜き PNG から正規化マスクを作成しました。各マスクは高さ基準で整列し、左右位置を揃えたうえで normalized_masks/*.png として保存しています。

これにより、視点ごとの silhouette を共通座標系に投影できる状態にしています。

Normalized Mask 4 Views Visual Hull Input
Normalized front silhouette
Step 03

ローカル fallback の visual hull

4視点マスクから occupancy を構築し、marching cubes により粗いメッシュを生成しました。これは external inference が失敗した場合でも、最低限の体積形状を確保するための deterministic fallback です。

生成された visual_hull.obj は 14,894 vertices / 29,824 faces です。

Local Mesh Marching Cubes Fallback Path
Visual hull preview
Step 04

private PSHuman Space の構築と推論

public Space は無料 GPU quota により安定運用できなかったため、fffiloni/PSHuman を daitomanabe/PSHuman として duplicate し、private Space 化しました。さらに PRO、pre-paid credits、L40S x1 を適用しています。

duplicate 後の build では cp310 固定 wheel 群が原因で起動に失敗したため、Space metadata に python_version: "3.10" を追加して再ビルドしました。その後、prepared-three-quarter.png を入力して mesh.obj, mesh_colored.obj, render.mp4 を得ています。

Hugging Face PRO L40S x1 Python 3.10 Fix
Step 05

レビュー用 turntable 動画の生成

mesh_colored.obj をもとに、ローカルで回転プレビュー動画を作成しました。目的は最終メッシュを全方向から短時間で確認できることです。

現在のプレビューは 6秒 / 24fps で、報告用の軽量な確認動画としてまとめています。

Turntable 6 Seconds Preview Video
03 / Environment

実行環境メモ

生成品質だけでなく、実行環境の調整も今回の処理の一部でした。公開 Space の制約、private 運用への移行、GPU 選定、build 修正までをここに記録しています。

Remote Runtime

  • Space: daitomanabe/PSHuman
  • Visibility: private
  • Hardware: l40sx1
  • Sleep time: 3600 seconds
  • Runtime state: RUNNING

Private Space が必要だった理由

  • public PSHuman Space は無料 GPU quota で停止しました。
  • 安定運用のため、duplicate 後に有料 GPU を割り当てました。
  • この変更により、再現性のある remote 推論経路を確保しました。

Build Fix

  • duplicate 直後は build error でした。
  • cp310 固定 wheel を前提とした requirements が含まれていました。
  • Space README metadata に python_version: "3.10" を追加して復旧しました。
04 / Results

出力

最終成果物は、PSHuman の生成動画、回転プレビュー動画、そしてメッシュ本体です。ここでは目視確認しやすいメディアを前に出し、その下に統計を添えています。

PSHuman Render

Space 推論が返した確認動画です。入力は prepared-three-quarter.png のみです。

Source / PSHuman Input / 1 image

Turntable Preview

レビュー用に追加生成した全周回転動画です。短時間で形状確認できる構成にしています。

Duration / 6s Frame rate / 24fps

メッシュ統計

  • visual_hull.obj: 14,894 vertices / 29,824 faces / 0.94 MB
  • mesh.obj: 107,235 vertices / 214,458 faces / 7.80 MB
  • mesh_colored.obj: 210,583 vertices / 421,162 faces / 22.57 MB
  • 最終プレビューは mesh_colored.obj を基準に作成しました。
OBJ Vertex Color Preview Ready
05 / Files

成果物

レポート閲覧だけでなく、そのまま成果物へアクセスできるように主要ファイルをまとめています。HTML 本体は静的で、下記ファイルを相対参照するだけの構成です。

再現コマンド

source ~/.config/secrets.zsh .venv/bin/python scripts/run_stelarc_pipeline.py .venv/bin/python scripts/render_turntable_preview.py \ outputs/pshuman/3_4_view/mesh_colored.obj \ --output outputs/pshuman/3_4_view/turntable.mp4 \ --frames-dir outputs/pshuman/3_4_view/turntable_frames