Files
orisys-sensor-design/sensors/finger/r01/profiles/compute.yaml
T
ykcheungab c377c14474 1. added blender deformation probe for marker size picking and optimization
2. added unwarp map export in current cli, don't need to generate by precompute in sensor running
2026-09-25 15:44:44 +08:00

54 lines
2.8 KiB
YAML

profile: compute
description: Runtime sensing bundle consumed by orisys-sdk assets_dir
output_dir: build/export/finger/r01/compute
# Files must match orisys-sdk / Studio runtime layout.
artifacts:
- mesh.npz
# Housing is a separate artifact on purpose: mesh.npz stays sensing-surface-only
# because the SDK unroll consumes its vertices as the sensing surface.
- housing.npz
- camera_intrinsics.npz
- world_to_cam.npy
# Measured unroll maps stay in SDK (not overwritten by nominal export).
runtime_owned_by_sdk:
- unroll_map_uv_s0.4.npz
# Parameters of the unroll/valid-mask domain. Recorded here because the mask decides which
# part of the sensing mesh the application treats as *sensing* (everything else renders
# grey), and because regenerating it wrongly still produces a plausible-looking map:
# * source_width/height are NOT recorded — they are derived from the export's own
# camera_intrinsics.npz (native size x source_scale). Inheriting another camera's
# source size produced 0.8 % island coverage instead of 40.8 %.
# * source_K must be scaled by source_scale (orisys.unroll.geometry.scale_camera_geometry).
# Passing the native K produced 3.5 % instead of 40.8 %.
# Rebuild with tools/build_uv_map.py --profile <this file>; it writes into output_dir first
# and is promoted to the SDK asset dir only after tools/scene_assets/compare_uv_map.py agrees.
uv_map:
out_width: 280 # = camera.resolution_stitch[0]; the field domain the app sees
out_height: 300 # = camera.resolution_stitch[1]
flip_v: true
# source_scale: the live frame is resized by this before undistort/remap, so it sets both the
# per-frame pixel work and the resolution the tracker/flow measures at. The floor that avoids
# upsampling the output grid is derived, not guessed:
# s >= max(out_width / native_width, out_height / native_height)
# * 1280x720 camera -> max(280/1280, 300/720) = 0.417 (source 533x300)
# * 1920x1080 camera -> max(280/1920, 300/1080) = 0.278 (source 533x300 — the same grid,
# because the rule follows the *output* requirement, not the camera)
# 0.4 is pinned because it is the value the running system and the existing recordings were
# measured at; at a 1280x720 camera it yields a 512x288 source, i.e. 4 % coarser than the
# 300-row output (mild upsampling). Changing it changes the flow magnitudes the app's
# thresholds were tuned against AND the map's field_domain_id, so it must move together with
# sensor.json's camera.source_scale and a recompiled scene package.
source_scale: 0.4
edge_band: 0.12
edge_expand: 1.0 # <= 1.0 means "resolve from the measured UV distortion"
validation:
# orisys-app validate_scene.py --legacy-dir <output_dir> --map <sdk unroll map>
require_sensing_surface_only: true
expected_vertices: 1032
expected_triangles: 1974