2026-02-10 19:17:25 +08:00
2026-01-30 20:04:23 +08:00
2026-02-07 16:42:04 +08:00
2026-02-01 19:44:58 +08:00
2026-01-08 14:26:45 +08:00
2026-02-07 12:08:15 +08:00
2026-01-31 21:26:53 +08:00
2026-02-03 15:58:10 +08:00
2026-01-25 10:40:40 +08:00
2026-01-25 10:40:40 +08:00
2026-01-03 13:35:37 +08:00
2026-01-02 14:27:31 +08:00
2026-01-30 20:04:23 +08:00
2026-02-07 16:42:04 +08:00
2026-01-31 21:28:23 +08:00
2026-02-01 10:02:49 +08:00
2026-01-25 10:40:40 +08:00
2026-02-10 19:17:25 +08:00
2026-01-25 10:40:40 +08:00

orisys API 文档

本文件提供了 orisys 套件的中文文档

准备 Python 开发环境

推荐下载 Anaconda,并使用Python 3.10

# 创建并激活虚拟环境
conda create -n orisys python=3.10
conda activate orisys

安装 CUDA Toolkit 和 cuDNN

在官方链接下载和安装:https://developer.nvidia.com/cuda/toolkit 或 在Anaconda环境中安装(例子使用cuda12.9): https://anaconda.org/channels/nvidia/packages/cuda/overview

conda install nvidia/label/cuda-12.9.0::cuda-toolkit nvidia::cudnn

SDK安装方法

  1. 根据系统(win / linux),平台(amd64, aarch64), python(如p38、p39、p310) 版本下载对应的.whl文件
  2. 运行pip命令安装:
pip install orisys-{version}-{python-version}-{python-version}-{os}_{machine}.whl

如

pip install orisys-0.2.3-cp310-cp310-win_amd64.whl
  1. 安装 CuPy(根据您的 CUDA 版本选择):

    方法 1:使用 extras(推荐)

    # 对于 CUDA 12.x
    pip install orisys[cuda12]
    
    # 对于 CUDA 13.x
    pip install orisys[cuda13]
    

    方法 2:手动安装

    # 对于 CUDA 12.x
    pip install cupy-cuda12x>=12.3.0
    
    # 对于 CUDA 13.x
    pip install cupy-cuda13x>=13.0.0
    
  2. 测试导入:

import orisys
print(orisys.__version__)

Sensor 类别

描述

orisys套件的核心类,用于从视频文件或实时摄像头中读取传感器图像,创建一个具体的传感器对象(实例)。并完成形变、光流及力信息的计算与管理。

输入参数

  • vid_src (int | str, 必填): 传感器 ID、相机编号或视频路径。默认为 0。
  • isstitch (bool,可选): 是否启用图像拼接,默认为 True。
  • cuda (bool,可选): 是否使用 GPU cuda 加速,默认为 False。
  • verbose (bool,可选): 是否输出初始化及运行过程中的详细日志信息,默认为 False。
  • config_name (str,可选): 内部算法或传感器配置json文件路径,用于加载对应的参数配置,默认为 prototype。
  • cal_path (str,可选): 复眼拼接校准文件路径,默认为 ./config/cal.npy。有多个传感器同时运行时建议传感器类创建时建议填写,避免校准文件覆写。在首次运行时程序会在找不到文件时自动创建。

返回

  • Sensor 实例,用于后续图像采集、形变计算和数据读取操作。

示例

# Example 1:  用相机编号创建
from orisys import Sensor
sensor = Sensor(0)

# Example 2: 用视频文件创建
sensor = Sensor("/data/data.mp4")

2. Sensor.get_img 方法

描述

采集并预处理一帧图像。

返回

  • np.ndarray:处理后的灰度图(uint8,尺寸为config_resolution_stitch对应分辨率)。
  • None:当输入源读取失败(例如视频结束、摄像头断开)时返回。

状态更新

  • 成功时更新sensor类里面的灰度图。

示例

img = sensor.get_img() 
if img is None:
    break

3. Sensor.compute_deformation 方法

描述

基于当前帧图像计算光流/形变向量场,并通过 HHD 分解将形变场分解为法向/切向分量,同时估计法向力、切向力与扭矩等标量输出。该方法会更新 sensor的形变场与力相关状态,并返回当前帧的光流场。 调用前置条件:需要先通过get_img()成功更新图像。

返回

无

示例

img = sensor.get_img()
if img is None:
    break

sensor.compute_deformation()

4. Sensor.compute_contact 方法

描述

基于已计算的法向形变场进行接触区域分析,输出接触质心与轮廓等信息,并生成接触强度图。

调用前置条件:需先执行compute_deformation()。

输入参数

  • min_contour_area (int,可选): 多接触点模式下的最小轮廓面积阈值,默认为 3000。
  • min_magnitude (float,可选): 最小光流幅度阈值,低于该阈值的区域不参与接触分析,默认为 1.0。
  • expansion_threshold (float,可选): 扩张/收缩判定阈值,用于接触区域分割,默认为 0.01。
  • downsample_factor (int,可选): 下采样因子,用于平滑与加速计算,默认为 1。
  • kernel_size (tuple,可选): 形态学操作核大小,默认为 (5, 5)。
  • denoise_sigma (float,可选): 高斯降噪强度;设为0可禁用降噪,默认为 15。

返回

dict为接触分析结果字典,至少包含以下键:

  • expansion_mask: 扩张区域掩码(np.ndarray)。
  • contraction_mask: 收缩区域掩码(np.ndarray)。
  • divergence_map: 散度图(np.ndarray)。
  • centroid: 质心坐标(单点模式为 (x, y);多点模式为列表)。
  • centroid_found: 是否检测到接触区域(bool)。
  • contour: 最大轮廓或轮廓列表(可选字段,存在时返回)。

状态更新

  • sensor.centroid: 接触质心(单点为 (x, y),多点为列表)。
  • sensor.centroid_found: 是否找到质心(bool)。

示例

sensor.compute_contact()
centroid, contour, depth = sensor.read_info(
    sensor.info.CENTROID,
    sensor.info.CONTOUR,
    sensor.info.DEPTH,
)

4. Sensor.read_info 方法

描述

按指定的信息类型(sensor.info枚举值)批量读取传感器状态数据,并按传入顺序返回对应值的元组。 该方法通常用于在完成形变计算后,读取光流场、分量场、力、帧率等信息。

输入参数

  • args: 任意数量的 Sensor.info 枚举,用于指定需要获取的数据类型。支持的枚举值及对应数据如下:

支持的枚 info keys:

向量/图像类

  • VRAW: 原始光流场, np.ndarray,shape=(H, W, 2)
  • VNORMAL: 法向光流场, np.ndarray,shape=(H, W, 2)
  • VSHEAR: 切向光流场, np.ndarray,shape=(H, W,2)
  • DEPTH: 深度场(可选), 未启用/未生成时返回空数组np.array([])。

标量类

  • FNORMAL: 法向力,float。
  • FSHEARX: X切向力,float。
  • FSHEARY: Y切向力,float。
  • FPS: 输出帧率,float。
  • CENTROID: 触碰点的坐标,(x, y)。
  • CONTOUR: 触碰区域轮廓,np.ndarray, shape=(H, W), 未生成时返回np.empty

时间戳

  • TIMESTAMP: 时间戳字符串(HH:MM:SS),str。

注:H/W 由当前配置分辨率决定。

返回

Tuple

按传入的 sensor.info 参数顺序返回一个元组,
返回值数量与有效参数数量一致。

  • 向量/图像类数据:np.ndarray
    • 若当前流程中尚未生成该数据,返回空数组
  • 标量类数据:float
  • 时间戳:str(TIMESTAMP,格式为 HH:MM:SS)

示例

# Example 1:读取标量数据
fps, fn, fx, fy = sensor.read_info(
    sensor.info.FPS,
    sensor.info.FNORMAL,
    sensor.info.FSHEARX,
    sensor.info.FSHEARY,
)

# Example 2: 读取单个向量场(注意解包方式)
flow = sensor.read_info(sensor.info.VRAW)

5. Sensor.disconnect 方法

描述

释放传感器相关资源并停止后台异步线程。 调用后将关闭视频/摄像头输入源,并销毁所有 OpenCV 窗口。

建议在程序退出前调用以确保资源被正确释放。



配置标定相关

1. list_config 方法

描述

列出内置传感器配置参数字典。

返回

  • list: 内置传感器配置参数字典的名字列表。

2. export_config 方法

描述

导出当前传感器实例使用的配置参数字典。

输入参数

  • config_name: 需要导出的配置参数字典名字,str
  • path: 导出的路径,默认"./config/exported_config.json"

返回

  • dict: 导出的配置参数字典。

保存

  • 导出内置的config_name配置参数字典至path


常见问题解答 (FAQ)

Q1:为什么必须先调用get_img(),再调用compute_deformation()?

A:compute_deformation()依赖最近一次获取并拼接的图像数据进行形变与力计算。 在调用该方法前,必须先通过get_img()更新当前帧图像,否则无法进行有效计算。

Q2:为什么调用了read_info(),但读到的数据是空的?

A:read_info()仅用于读取当前已计算的数据状态,不会触发任何计算。 部分字段依赖特定计算步骤生成,例如:

  • VRAW / VNORMAL / VSHEAR依赖compute_deformation();
  • DEPTH / CENTROID / CONTOUR依赖compute_contact()。

Q3:compute_contact()为一定要调用吗?什么时候需要?

A:当需要接触相关信息(如接触质心、轮廓或深度/散度图)时,必须调用compute_contact()。 若仅关注形变场或力信息(如光流、法向力、切向力),则无需调用该方法。

Q4:read_info()的返回值顺序是如何确定的?

A:read_info()按传入的sensor.info参数顺序返回一个元组。 返回值顺序与参数顺序一一对应,与内部存储顺序无关。

Q5:如果没有标定文件,或拼接结果不正确,会发生什么?

A:若未指定或未找到标定文件,系统会在需要时创建新的拼接标定数据并保存到默认路径。 拼接结果异常通常与标定数据、拼接配置或输入图像质量有关,建议重新生成拼接标定并检查配置参数。

Q6: 运行报错:“AttributeError: 'Stitcher' object has no attribute 'pos_default'”

A: 请检查视频源的编号是否正确,以及是否能正常打开视频源。在linux 使用v4l2-ctl --list-devices 列出设备

S
Description
ORY系列传感器 Python/C++ SDK 内部开发仓库。包含传感器配置、数据读取、标定工具及示例代码。面向算法联调与客户集成测试,当前仅内部使用。
Readme 392 MiB
Languages
Python 99.3%
PowerShell 0.3%
Shell 0.2%
Batchfile 0.2%