Files
orisys-sdk/examples
ykcheungab 7f8e5d0975 四个滤波预设落成机器可读的配置文件,并加上防漂移测试 - What: 新增 examples/filters/filters_{off,low_latency,balanced,low_noise}.json —— 每个都是完整可整块替换的 filters 段(五键齐全:flow_ema_alpha / force_median_window / force_lowpass_cutoff_hz / force_lowpass_order / force_lowpass_sample_rate_hz),数值即 FILTER_PRESETS 展开后的结果;examples/filters/README.md 说明这四份副本的存在与用途;新增 tests/test_filter_presets.py(12 项):预设名恰为四个、每个示例文件 == 默认块叠加该预设(改预设或改文件都会红)、每份都是含三个开关键的真实 filters 段、三个出厂 bundle(box/mini/finger)的 filters 段仍为全关、且用 external-frame 模式构造真实 Sensor 核对 filters_state() 报的也是全关(文件与设备必须一致)。 - Why: 之前的实现计划里写的是"四个 sensor_<preset>.json 整机配置",但整机配置要按传感器各复制一份、且必然随 bundle 漂移;README 里内嵌的 JSON 又无法被测试覆盖,等于把"建议用哪档滤波"这句话留在了一处会过时的散文里。改成"filters 片段 + 断言与 FILTER_PRESETS 逐值一致的测试",既不谎称是完整配置,也不会静默过时。 - Verification: pytest tests/test_filter_presets.py → 12 passed;SDK 全量 335 passed / 15 skipped(唯一失败仍是需要 1200 帧而样例只有 577 帧的 longrun 测试)。 - Not in this change: 未生成按传感器复制的整机配置;docs/filters.md 的预设表未纳入测试(只有这四个文件与代码常量对齐);app 侧未动。
2026-09-14 10:44:07 +08:00
..
四个滤波预设落成机器可读的配置文件,并加上防漂移测试 - What: 新增 examples/filters/filters_{off,low_latency,balanced,low_noise}.json —— 每个都是完整可整块替换的 filters 段(五键齐全:flow_ema_alpha / force_median_window / force_lowpass_cutoff_hz / force_lowpass_order / force_lowpass_sample_rate_hz),数值即 FILTER_PRESETS 展开后的结果;examples/filters/README.md 说明这四份副本的存在与用途;新增 tests/test_filter_presets.py(12 项):预设名恰为四个、每个示例文件 == 默认块叠加该预设(改预设或改文件都会红)、每份都是含三个开关键的真实 filters 段、三个出厂 bundle(box/mini/finger)的 filters 段仍为全关、且用 external-frame 模式构造真实 Sensor 核对 filters_state() 报的也是全关(文件与设备必须一致)。 - Why: 之前的实现计划里写的是"四个 sensor_<preset>.json 整机配置",但整机配置要按传感器各复制一份、且必然随 bundle 漂移;README 里内嵌的 JSON 又无法被测试覆盖,等于把"建议用哪档滤波"这句话留在了一处会过时的散文里。改成"filters 片段 + 断言与 FILTER_PRESETS 逐值一致的测试",既不谎称是完整配置,也不会静默过时。 - Verification: pytest tests/test_filter_presets.py → 12 passed;SDK 全量 335 passed / 15 skipped(唯一失败仍是需要 1200 帧而样例只有 577 帧的 longrun 测试)。 - Not in this change: 未生成按传感器复制的整机配置;docs/filters.md 的预设表未纳入测试(只有这四个文件与代码常量对齐);app 侧未动。
2026-09-14 10:44:07 +08:00
2026-08-26 20:19:55 +08:00
2026-08-26 19:38:47 +08:00
2026-08-18 11:00:57 +08:00

Examples

Runnable demos live at the examples/ root. Shared helpers stay in pipeline/, viz/, and gui/. Run commands from the repository root.

Product Entry Points

Product Entry Default config
ORY-BOX basic_pipeline.py box
ORY-MINI mini_pipeline.py mini
ORY-FINGER (2D) finger_pipeline.py finger
ORY-FINGER (3D Qt) finger_pipeline_3dview.py finger

finger is the public ORY-FINGER config stem. dd02 remains a compatibility alias for dd02-ov.

Typical Usage

ORY-BOX:

python examples/basic_pipeline.py -v 0 -c box

ORY-MINI:

python examples/mini_pipeline.py -v 0 -c mini

ORY-FINGER 2D:

python examples/finger_pipeline.py --camera_id 0 --config finger

ORY-FINGER video file:

python examples/finger_pipeline.py --video ./data/sample.mp4 --config finger

ORY-FINGER 3D Qt dashboard:

pip install -e ".[gui]"
python examples/finger_pipeline_3dview.py --video 0 --config finger

Other Root Examples

  • plot_data.py — single-sensor OpenCV views plus PyQtGraph force charts
  • two_sensor_pipeline.py — two-sensor multiprocessing demo

Requirements

  • SDK installed from the repository root, for example pip install -e .
  • camera index or test video path
  • matching config names under ./config/ (or packaged orisys/configs/)

Qt / PyQtGraph examples additionally require:

pip install -e ".[gui]"

Notes

  • finger_pipeline_3dview.py is the main interactive finger demo. It uses gui/app_paths.py so the same entry works in editable and packaged runs.
  • Dashboard controls: click 启动 to start acquisition; use Record CSV / Stop CSV and the CSV save-directory browser to log contact/force data; Q quits, R resets, S starts video recording, E stops video recording, and Esc toggles fullscreen.
  • finger_pipeline.py is the leanest finger example if you want to validate UV unroll + force/contact processing without the full dashboard.