Files
orisys-sdk/Readme.md
T

241 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# orisys API 文档
本文件提供了 `orisys` 套件的中文文档
## 使用方法
1. 根据平台和python 版本下载对应的`.whl`文件
2. 运行pip命令安装:
```bash
pip install orisys-{version}-{python-version}-none-{os}_amd64.whl
```
3. 并测试导入:
```python
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`,可选): 内部算法或传感器配置名称,用于加载对应的参数配置,默认为 `prototype`。
### 返回
* `Sensor` 实例,用于后续图像采集、形变计算和数据读取操作。
### 示例
```python
# 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`类里面的灰度图。
### 示例
```python
img = sensor.get_img()
if img is None:
break
```
---
## 3. `Sensor.compute_deformation` 方法
### 描述
基于当前帧图像计算光流/形变向量场,并通过 HHD 分解将形变场分解为法向/切向分量,同时估计法向力、切向力与扭矩等标量输出。该方法会更新
`sensor`的形变场与力相关状态,并返回当前帧的光流场。
调用前置条件:需要先通过`get_img()`成功更新图像。
### 返回
无
### 示例
```python
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`)。
### 示例
```python
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`。
时间戳
* TIMESTAMP: 时间戳字符串(HH:MM:SS),`str`。
注:H/W 由当前配置分辨率决定。
### 返回
`Tuple`
按传入的 `sensor.info` 参数顺序返回一个元组,
返回值数量与有效参数数量一致。
- 向量/图像类数据:`np.ndarray`
- 若当前流程中尚未生成该数据,返回空数组 `np.array([])`
- 标量类数据:`float`
- 时间戳:`str`(`TIMESTAMP`,格式为 `HH:MM:SS`)
### 示例
```python
# 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:若未指定或未找到标定文件,系统会在需要时创建新的拼接标定数据并保存到默认路径。
拼接结果异常通常与标定数据、拼接配置或输入图像质量有关,建议重新生成拼接标定并检查配置参数。