奥比中光深度相机(二):PyQt5实现打开深度摄像头功能

奥比中光深度相机(二):PyQt5实现打开深度摄像头功能

PyQt5实现打开可见光相机摄像头的功能,我们之前已经介绍过了,具体可参考:https://blog.youkuaiyun.com/WYKB_Mr_Q/article/details/129827685

上篇文章中我们介绍了奥比中光深度相机基于Python的环境配置部分。具体可参考:https://blog.youkuaiyun.com/WYKB_Mr_Q/article/details/137040226

这篇文章我们在配置好Python环境的基础上,使用PyQt5写个界面,并且设计逻辑,通过点击一个设计好的按钮来打开深度相机。深度相机的打开方法和可见光相机的打开方法略有不同,可见光相机可以利用OpenCV来直接调用,奥比中光深度相机主要是利用官方给出的SDK源码来调用。本文中,我们借鉴官方源码,将调用深度相机的主要代码提取出来,并和我们自己写的代码结合,实现在PyQt5界面中通过点击按钮打开深度相机。

官方给出的调用深度相机源码

官方给出了打开深度相机的Python SDK源码,链接为:https://github.com/orbbec/pyorbbecsdk
在这里插入图片描述

其中也包含了一些.py示例文件,存储在pyorbbecsdk/examples文件夹中,我们找到 “depth_viewer.py” 文件,该文件的主要作用是为了调用深度相机,显示深度图像的。咱们可以先连接上奥比中光深度相机,运行一下该代码试一试,看看是否能够正常运行,展示出深度视频流。如果一切正常,你就可以看到如下界面了。

在这里插入图片描述

下面部分是 “depth_viewer.py” 文件的源代码:

from pyorbbecsdk import Pipeline
from pyorbbecsdk import Config
from pyorbbecsdk import OBSensorType, OBFormat
from pyorbbecsdk import OBError
import cv2
import numpy as np
import time

ESC_KEY = 27
PRINT_INTERVAL = 1  # seconds
MIN_DEPTH = 20  # 20mm
MAX_DEPTH = 10000  # 10000mm

# 管理时间流,这部分不用管
class TemporalFilter:
    def __init__(self, alpha):
        self.alpha = alpha
        self.previous_frame = None

    def process(self, frame):
        if self.previous_frame is None:
            result = frame
        else:
            result = cv2.addWeighted(frame, self.alpha, self.previous_frame, 1 - self.alpha, 0)
        self.previous_frame = result
        return result


def main():
	# 配置深度相机文件
    config = Config()
    pipeline = Pipeline()
    temporal_filter = TemporalFilter(alpha=0.5)
    try:
    	# 调用深度摄像头
        profile_list = pipeline.get_stream_profile_list(OBSensorType.DEPTH_SENSOR)
        assert profile_list is not None
        try:
        	# 配置深度视频流参数,包括视频帧长宽,视频流格式,以及每秒采集的视频帧数
            depth_profile = profile_list.get_video_stream_profile(640, 0, OBFormat.Y16, 30)
        except OBError as e:
            print("Error: ", e)
            depth_profile = profile_list.get_default_video_stream_profile()
        assert depth_profile is not None
        print("depth profile: ", type(depth_profile))
        config.enable_stream(depth_profile)
    except Exception as e:
        print(e)
        return
    pipeline.start(config)
    last_print_time = time.time()
    while True:
        try:
            frames = pipeline.wait_for_frames(100)
            if frames is None:
                continue
            depth_frame = frames.get_depth_frame()
            if depth_frame is None:
                continue
            width = depth_frame.get_width()
            height = depth_frame.get_height()
            scale = depth_frame.get_depth_scale()

            depth_data = np.frombuffer(depth_frame.get_data(), dtype=np
### 奥比深度相机基础知识与入门指南 #### 选择合适的硬件型号 对于户外应用,推荐选用Gemini 2XL型号的深度相机,因为该款型在强环境下表现更为稳定[^2]。 #### 安装必要的软件包 为了使计算机能够识别并操作奥比深度相机,在Linux系统下可以通过命令行安装相应的驱动程序和支持库: ```bash sudo apt-get update sudo apt-get install ros-indigo-astra-camera ros-indigo-astra-launch ``` 上述指令适用于ROS (Robot Operating System) 用户,可以简化设备连接后的初始化流程[^3]。 #### Python开发环境搭建 尽管官方文档提到某些版本可能不直接支持Python接口,但实际上针对特定机型如Gemini 2L, 开发者社区已经提供了丰富的Python API资源用于快速启动项目。确保已正确设置好Python虚拟环境,并按照先前文章中的指导完成依赖项的安装[^1]。 #### 实现基本功能——显示图像流 利用PyQt5框架配合OpenCV库来构建GUI界面,从而实现实时预览来自深度传感器的数据帧。下面给出一段简单的代码片段作为示范: ```python import sys from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow, QVBoxLayout, QWidget import cv2 import numpy as np class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("Depth Camera Preview") layout = QVBoxLayout() label = QLabel('Camera View') layout.addWidget(label) container = QWidget() container.setLayout(layout) self.setCentralWidget(container) cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() if not ret: break rgb_image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) h, w, ch = rgb_image.shape bytes_per_line = ch * w convert_to_Qt_format = QImage(rgb_image.data, w, h, bytes_per_line, QImage.Format_RGB888) p = convert_to_Qt_format.scaled(self.width(), self.height()) label.setPixmap(QPixmap.fromImage(p)) QApplication.processEvents() if __name__ == '__main__': app = QApplication(sys.argv) window = MainWindow() window.showFullScreen() # 或者使用 show 方法正常大小展示窗口 try: sys.exit(app.exec_()) except Exception as e: print(e) ``` 这段脚本创建了一个全屏的应用程序窗口,其中包含了从默认摄像机捕获到的画面。请注意实际部署时需调整`cv2.VideoCapture()`参数以匹配所使用的具体外接设备ID或URI路径。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WYKB_Mr_Q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值