Skip to content

Latest commit

 

History

History
117 lines (84 loc) · 4.94 KB

camera.md

File metadata and controls

117 lines (84 loc) · 4.94 KB

RGBDCamera 类 - 文档

概述

RGBDCamera 类用于管理与奥比中光(Orbbec)RGBD 相机相关的操作,包括图像的捕获与处理。该类设计为单例模式,意味着在整个程序生命周期中只存在一个 RGBDCamera 实例。它通过启动一个外部 C++ 程序来获取 RGB 图像和深度图,并将这些数据存储在指定的缓存目录中。RGBDCamera 提供了方法来读取这些缓存中的图像文件,并返回相应的图像数据。

属性

  • image_path: 存储图像缓存的路径,默认是在当前模块所在目录下创建名为 image_cache 的文件夹。
  • process: 启动的外部 C++ 程序的 subprocess.Popen 对象,用于控制 RGBD 图像的捕获。

构造函数

  • init(): 初始化 RGBDCamera 实例。

方法

  • get_frame(): 获取最新的彩色图像和深度图像对。如果找不到匹配的图像对,则返回 (None, None)
  • get_depth(): 获取最新的深度图像。如果找不到深度图像,则返回 None
  • get_color(): 获取最新的彩色图像。如果找不到彩色图像,则返回 None

析构函数

  • del(): 当 RGBDCamera 实例被销毁时,终止与之关联的外部 C++ 程序,并确保所有相关资源被正确释放。

使用示例

from camera import *

camera = RGBDCamera()

# 获取一帧图像
color_image, depth_image = camera.get_frame()
if color_image is not None and depth_image is not None:
    # 处理图像数据...
    pass

# 清理
del camera

注意事项

  • 在使用 RGBDCamera 之前,请确保已经安装并配置好了所需的外部 C++ 程序 RGBDSaver
  • 由于该类使用了 subprocess 模块来启动外部程序,因此需要注意程序的安全性和稳定性。
  • 如果需要从多线程或多进程中访问 RGBDCamera 实例,建议采取适当的同步机制以避免竞态条件。
  • RGBDCamera 实例应该谨慎地创建和销毁,尤其是在长时间运行的应用程序中,以防止资源泄漏。

依赖项

  • subprocess: 用于启动和管理外部程序。
  • os: 用于文件和目录操作。
  • utils.read_color_image, utils.read_depth_image: 自定义的辅助函数,用于读取和解析图像文件。

兼容性

此代码示例假设操作系统为 Linux 或 macOS,因为 Windows 上的路径处理和子进程管理可能有所不同。如果需要在 Windows 上使用,可能需要调整路径处理逻辑和子进程调用方式。

当然可以!下面是对您提供的Processor类的一个文档说明,包括类的总体介绍以及每个方法的详细描述。


Processor 类

Processor 类用于处理来自RGBD相机的数据,通过YOLO模型识别特定目标,并使用Segment Anything Model (SAM) 对目标进行分割,最后从深度图中提取点云数据并返回最大的点云簇。

初始化

def __init__(self, sam_checkpoint, model_type, device):
  • 参数:

    • sam_checkpoint: SAM模型的检查点文件路径。
    • model_type: SAM模型的类型,例如:"vit_h"。
    • device: 运行模型的设备,如:"cuda" 或 "cpu"。
  • 作用: 初始化Processor实例,加载SAM模型到指定设备上,并初始化YOLOWorld模型和RGBD相机。

方法

获取点云数据

def get_pcd(self, target, debug=False):
  • 参数:

    • target: 目标物体的类别名称,用于YOLO模型识别。
    • debug: 调试模式开关,如果设置为True,则会显示中间步骤的图像(彩色图像、掩码、深度图像)。
  • 返回值:

    • pcd: 最大点云簇,代表了目标物体的三维点云数据。
  • 作用:

    1. 从RGBD相机获取一帧彩色图像和深度图像。
    2. 设置YOLO模型只检测target类别。
    3. 在彩色图像上运行YOLO模型,得到目标物体的位置框。
    4. 使用SAM模型基于位置框生成目标物体的掩码。
    5. 将掩码应用到深度图像上,仅保留目标物体的深度值。
    6. 从深度图像转换成点云数据。
    7. 如果开启调试模式,则显示彩色图像、掩码及深度图像。
    8. 从点云数据中提取最大簇作为最终的目标物体点云。
    9. 返回最大点云簇。

使用示例

processor = Processor(sam_checkpoint="path/to/sam/checkpoint", model_type="vit_b", device="cuda")
pcd = processor.get_pcd(target="bottle", debug=True)
  • 说明: 上述代码创建了一个Processor实例,指定了SAM模型的检查点路径、模型类型和运行设备。然后,调用了get_pcd方法来获取名为“bottle”的目标物体的点云数据,并开启了调试模式以查看处理过程中的图像。

希望这份文档能够帮助您更好地理解和使用Processor类。如果您有任何其他需求或想要进一步的信息,请随时告知!

注:此文档由文心一言生成

安装

cd camera/csource
./build.sh /path/to/sdk