- Implemented surface generation functionality in `surface.py`, including geometry estimation and texture writing. - Introduced media input handling in `input.py`, supporting image and video frame extraction. - Added model management for geometry adapters in `models/__init__.py`. - Created BEN2 and DA3 model inference logic in `ben2.py` and `da3.py`, respectively. - Developed ONNX model inference utilities for BEN2 and DA3 in `onnx_ben2.py` and `onnx_da3.py`. - Added support for MoGe-2 model inference in `moge2.py` with necessary ONNX utilities. - Implemented output handling for depth and surface data in `depth.py` and `surface.py`. - Created debug output utilities for DA3 and MoGe-2 predictions in `debug_da3.py` and `debug_moge2.py`. - Enhanced ONNX runtime session management in `onnx_runtime.py`. - Updated `__init__.py` files to include new modules and functions for better organization.
68 lines
2.0 KiB
Python
68 lines
2.0 KiB
Python
import sys
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
from types import SimpleNamespace
|
|
|
|
import numpy as np
|
|
from PIL import Image
|
|
|
|
|
|
SOURCE_DIR = (
|
|
Path(__file__).resolve().parents[1]
|
|
/ "src"
|
|
/ "snapform"
|
|
/ "server"
|
|
/ "models"
|
|
)
|
|
sys.path.insert(0, str(SOURCE_DIR))
|
|
|
|
import onnx_da3
|
|
|
|
|
|
class FakeSession:
|
|
def get_inputs(self):
|
|
return [SimpleNamespace(name="images"), SimpleNamespace(name="strategy")]
|
|
|
|
def run(self, output_names, feeds):
|
|
self.feeds = feeds
|
|
_, views, _, height, width = feeds["images"].shape
|
|
depth = np.ones((1, views, height, width), dtype=np.float32)
|
|
confidence = np.full_like(depth, 0.75)
|
|
pose = np.zeros((1, views, 9), dtype=np.float32)
|
|
pose[..., 6] = 1.0
|
|
pose[..., 7:] = np.pi / 2.0
|
|
return depth, confidence, pose
|
|
|
|
|
|
class Da3OnnxTest(unittest.TestCase):
|
|
def test_target_size_uses_patch_multiple(self):
|
|
self.assertEqual(
|
|
onnx_da3.target_size((800, 600), 504, "upper_bound_resize"),
|
|
(504, 378),
|
|
)
|
|
|
|
def test_infer_returns_camera_and_image_arrays(self):
|
|
with tempfile.TemporaryDirectory() as directory:
|
|
image_path = Path(directory) / "input.png"
|
|
Image.new("RGB", (80, 60), (10, 20, 30)).save(image_path)
|
|
session = FakeSession()
|
|
|
|
result = onnx_da3.infer(
|
|
session,
|
|
[image_path],
|
|
process_res=56,
|
|
ref_view_strategy="middle",
|
|
)
|
|
|
|
self.assertEqual(result.depth.shape, (1, 42, 56))
|
|
self.assertEqual(result.conf.shape, result.depth.shape)
|
|
self.assertEqual(result.processed_images.shape, (1, 42, 56, 3))
|
|
self.assertEqual(result.extrinsics.shape, (1, 3, 4))
|
|
self.assertEqual(result.intrinsics.shape, (1, 3, 3))
|
|
self.assertEqual(int(session.feeds["strategy"][0]), 1)
|
|
np.testing.assert_allclose(result.extrinsics[0, :3, :3], np.eye(3))
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|