createSlover 方法

classmethod SensorSolver.createSolver(runtime_path)

工厂方法(类方法),用于从给定的 runtime 配置路径创建一个 SensorSolver 实例。

Parameters:

runtime_path (Union [str, Path]) –

  • 指向 runtime 配置文件的路径

Returns:

成功时返回 SensorSolver 实例,失败时返回 False。

Return type:

SensorSolver | bool

Raises:
  • AssertionError – 解密后的数据格式不正确或缺少必要的 “ConfigManager” 键时触发。

  • Exception – 读取文件、解密过程中发生错误时触发(具体错误信息会被捕获并打印)。

示例方法

from pathlib import Path
SCRIPT_DIR = Path(__file__).resolve().parent
SAVE_DIR = Path(SCRIPT_DIR / "test_dir")  # 存放目录
SAVE_DIR.mkdir(parents=True, exist_ok=True)
import cv2
import time
import numpy as np

from xensesdk import Sensor

sensor_id = 'OG000232'

def save_data():
    fps = 30
    duration = 3   # 秒
    frame_interval = 1.0 / fps
    total_frames = fps * duration

    sensor_0 = Sensor.create(sensor_id)
    for i in range(total_frames):
        start_time = time.time()

        # 采集一帧
        rec = sensor_0.selectSensorInfo(Sensor.OutputType.Rectify)

        # 生成文件名
        filename = SAVE_DIR / f"{sensor_id}_{i:03d}.png"

        # 保存图片
        cv2.imwrite(str(filename), rec)
        print(f"Saved {filename}")

        # 控制帧率(30Hz)
        elapsed = time.time() - start_time
        sleep_time = frame_interval - elapsed
        if sleep_time > 0:
            time.sleep(sleep_time)

    # 导出配置
    sensor_0.exportRuntimeConfig(SAVE_DIR)

    sensor_0.release()

def replay_data():
    sensor_solver = Sensor.createSolver(SAVE_DIR / f"runtime_{sensor_id}")
    for png_file in sorted(SAVE_DIR.glob("*.png")):
        img = cv2.imread(str(png_file), cv2.IMREAD_UNCHANGED)
        depth, force, diff = sensor_solver.selectSensorInfo(
            Sensor.OutputType.Depth,
            Sensor.OutputType.Force,
            Sensor.OutputType.Difference,
            rectify_image=img
        )
        depth_norm = cv2.normalize(depth, None, 0, 255, cv2.NORM_MINMAX)
        depth_vis = np.uint8(depth_norm)
        cv2.imwrite(SAVE_DIR / f"{png_file.stem}_depth.png", depth_vis)

    sensor_solver.release()

if __name__ == '__main__':
    save_data()
    replay_data()
    print("Data saved and replayed successfully.")