Python玩转Intel RealSense:pyrealsense2从安装到3D点云生成全流程

# Python玩转Intel RealSense:从零构建3D视觉应用的工程实践 如果你是一名Python开发者,正打算踏入三维视觉的世界,或者正在为机器人项目寻找一双可靠的“眼睛”,那么Intel RealSense深度相机很可能已经进入了你的视野。它不再仅仅是实验室里的昂贵设备,而是越来越多地出现在工业检测、服务机器人、三维扫描甚至创意交互项目中。但面对这样一台硬件,如何用Python快速、稳定地获取数据,并最终生成可用于算法处理的3D点云,中间的路该怎么走? 网上能找到的教程,往往只展示了零散的代码片段,比如如何打开摄像头、读取一帧深度图。但当你真正想把它集成到一个完整的项目里时,会发现从环境配置、设备选型、数据对齐、到点云生成与可视化,每一步都可能藏着“坑”。这篇文章的目的,就是为你铺平这条路。我们不只讲“怎么调用API”,更会分享在实际工程中,如何构建一个**健壮、高效且易于维护**的RealSense数据处理流水线。无论你是想为机械臂赋予避障能力,还是构建一个简易的3D扫描仪,这里的内容都将是你坚实的起点。 ## 1. 工程化环境搭建与设备初探 在兴奋地写下第一行 `import pyrealsense2` 之前,一个稳定且可复现的开发环境是重中之重。与单纯安装一个库不同,处理RealSense这类涉及硬件驱动和底层SDK的设备,需要更细致的规划。 ### 1.1 选择你的武器:SDK与Python绑定的搭配 Intel提供了官方的RealSense SDK 2.0 (librealsense),而 `pyrealsense2` 是其Python语言绑定。这里最常见的误区是直接 `pip install pyrealsense2`。对于大多数Linux系统和追求稳定性的项目,我推荐以下步骤: 1. **首先安装底层SDK**:访问Intel RealSense GitHub仓库,根据你的操作系统(Ubuntu, Windows等)选择预编译包或从源码编译。对于Ubuntu用户,官方提供的PPA源通常是最省心的选择。 2. **然后安装Python绑定**:在确保SDK安装成功且环境变量(如`LIBREALSENSE_ROOT`)设置正确后,再通过pip安装。对于需要特定版本或自定义编译选项的高级用户,从源码编译Python绑定是更好的选择。 为什么这么麻烦?因为这样能确保Python库与核心SDK版本严格匹配,避免因动态链接库版本不一致导致的诡异崩溃。你可以通过以下命令快速验证安装是否成功: ```bash # 检查pyrealsense2是否能正常导入并获取版本 python -c "import pyrealsense2 as rs; print(f'pyrealsense2 version: {rs.__version__}')" ``` > 提示:如果你在Windows上使用Anaconda,可能会遇到路径问题。一个实用的技巧是,将SDK的安装目录(包含`realsense2.dll`的文件夹)添加到系统的`PATH`环境变量中,或者直接将其拷贝到你的Python脚本所在目录或虚拟环境的`DLLs`文件夹下。 ### 1.2 连接设备与信息获取 连接上RealSense相机后,第一步不是急着取数据,而是先“认识”你的设备。不同的型号(如D415, D435, L515)在精度、视野范围、深度计算原理上都有差异。通过代码快速获取设备信息,是后续参数配置的基础。 ```python import pyrealsense2 as rs # 创建上下文,管理所有设备 ctx = rs.context() devices = ctx.query_devices() print(f"找到 {len(devices)} 台设备") for dev in devices: print(f"设备名称: {dev.get_info(rs.camera_info.name)}") print(f"序列号: {dev.get_info(rs.camera_info.serial_number)}") print(f"固件版本: {dev.get_info(rs.camera_info.firmware_version)}") # 获取传感器信息 sensors = dev.query_sensors() for i, sensor in enumerate(sensors): print(f" 传感器[{i}]: {sensor.get_info(rs.camera_info.name)}") ``` 这段代码能帮你确认设备是否被系统正确识别,以及其基本型号和固件版本。**固件版本**尤其重要,某些API特性或Bug修复可能依赖于特定版本的固件。 ## 2. 构建稳健的数据采集流水线 数据采集是核心。一个设计良好的流水线(Pipeline)不仅要能拿到数据,还要考虑异常处理、资源释放以及性能。 ### 2.1 配置与启动:超越示例代码 官方示例通常展示最简单的配置。但在实际项目中,你需要根据应用场景做出选择。 ```python import numpy as np import cv2 def create_pipeline(enable_color=True, enable_depth=True, config_file_path=None): """ 创建一个可配置的RealSense流水线。 参数: enable_color: 是否启用彩色流 enable_depth: 是否启用深度流 config_file_path: JSON配置文件的路径,用于加载预设(如高精度模式) """ pipeline = rs.pipeline() config = rs.config() # 如果有配置文件,优先加载硬件预设 if config_file_path: dev = ctx.query_devices()[0] # 假设使用第一台设备 adv_mode = rs.rs400_advanced_mode(dev) with open(config_file_path, 'r') as f: json_str = f.read() adv_mode.load_json(json_str) print("已加载硬件预设配置") # 动态获取并配置设备支持的最高分辨率帧率 if enable_color: # 通常我们选择640x480或1280x720以平衡性能与质量 config.enable_stream(rs.stream.color, 1280, 720, rs.format.bgr8, 30) if enable_depth: # 深度流分辨率需与红外投影仪匹配,848x480是D435系列的常见分辨率 config.enable_stream(rs.stream.depth, 848, 480, rs.format.z16, 30) # 启动管道,profile包含实际启动的流配置信息 profile = pipeline.start(config) return pipeline, profile ``` 这里有几个关键点: * **`rs.format.bgr8` vs `rs.format.rgb8`**:OpenCV默认使用BGR顺序,如果你后续要用OpenCV显示或处理彩色图像,直接使用`bgr8`格式可以避免一次额外的颜色空间转换。 * **硬件预设**:对于D400系列,Intel提供了高级模式,允许通过JSON文件精细调整深度计算的参数(如激光功率、置信度阈值等)。这对于优化特定场景(如透明物体、黑色表面)的深度质量非常有用。 * **`profile`对象**:它包含了流实际开启的参数,有时你请求的配置设备可能不支持,`profile`可以帮助你确认实际生效的配置。 ### 2.2 帧对齐:让像素一一对应 深度相机通常有独立的深度传感器和RGB传感器,它们的位置不同,因此同一时刻捕获的深度图和彩色图在像素位置上并不直接对应。**对齐(Align)** 是将深度图(或彩色图)的坐标系变换到另一个流的坐标系的过程,这是生成彩色点云的关键一步。 ```python # 创建对齐对象:将深度对齐到彩色图像平面 align_to = rs.stream.color align = rs.align(align_to) try: while True: # 等待一组连贯的帧(深度帧和彩色帧时间戳接近) frames = pipeline.wait_for_frames() # 执行对齐操作 aligned_frames = align.process(frames) # 从对齐后的帧集中获取各帧 aligned_depth_frame = aligned_frames.get_depth_frame() color_frame = aligned_frames.get_color_frame() if not aligned_depth_frame or not color_frame: continue # 如果某一帧缺失,跳过此次循环 # 转换为numpy数组 depth_image = np.asanyarray(aligned_depth_frame.get_data()) color_image = np.asanyarray(color_frame.get_data()) # 此时,depth_image中的每个像素点,与color_image中同位置的像素点对应现实世界中的同一点 # ... 后续处理 ... except KeyboardInterrupt: print("采集被用户中断") finally: pipeline.stop() ``` > 注意:对齐操作需要计算资源,并且会“生成”新的深度帧(其内参与目标流一致)。如果你的应用对延迟极其敏感,且不需要彩色点云,可以考虑直接使用未对齐的原始深度数据。 ## 3. 深度数据解码与点云生成实战 拿到对齐后的深度数据后,我们距离三维点云只有一步之遥。但这一步,包含了从二维像素到三维空间的核心数学转换。 ### 3.1 理解深度值与真实距离 深度相机输出的原始数据(`rs.format.z16`)通常是以毫米为单位的16位无符号整数。但这里有一个至关重要的参数:**深度比例因子(Depth Scale)**。 ```python # 获取深度传感器的比例因子 depth_sensor = profile.get_device().first_depth_sensor() depth_scale = depth_sensor.get_depth_scale() # 例如 0.001,表示1个单位代表1毫米 print(f"深度比例因子: {depth_scale}") # 将原始深度值转换为以米为单位的浮点数 depth_image_meters = depth_image.astype(np.float32) * depth_scale ``` **为什么需要这个转换?** 因为深度图的像素值是一个离散的整数,乘以比例因子才能得到物理世界中的连续距离(米)。这是后续所有三维计算的基础。 ### 3.2 从深度图到点云:两种主流方法 生成点云主要有两种方式,各有优劣。 **方法一:使用SDK内置的`pointcloud`类(简单快捷)** 这种方法利用SDK内部的内参,直接计算点云,代码非常简洁。 ```python # 创建点云对象并生成 pc = rs.pointcloud() # 告诉点云生成器,我们希望将纹理(颜色)映射到哪个流上 pc.map_to(color_frame) # 计算点云,输入是对齐后的深度帧 points = pc.calculate(aligned_depth_frame) # 获取顶点(坐标)和纹理(颜色) vtx = np.asanyarray(points.get_vertices()) tex = np.asanyarray(points.get_texture_coordinates()) # vtx是一个结构化数组,每个元素有x, y, z三个字段 print(f"点云数量: {vtx.shape[0]}") print(f"第一个点的坐标: ({vtx[0][0]:.3f}, {vtx[0][1]:.3f}, {vtx[0][2]:.3f})") ``` **方法二:手动使用内参矩阵计算(灵活可控)** 当你需要对生成过程有完全控制,或者想深入理解原理时,手动计算是更好的选择。这需要你获取相机的**内参矩阵(Intrinsics)**。 ```python # 获取深度流的内参(对齐后,深度流的内参与彩色流一致) depth_intrin = aligned_depth_frame.profile.as_video_stream_profile().intrinsics print(f"焦距 fx: {depth_intrin.fx}, fy: {depth_intrin.fy}") print(f"主点 cx: {depth_intrin.cx}, cy: {depth_intrin.cy}") def depth_to_point_cloud(depth_image, depth_scale, intrinsics): """ 手动将深度图转换为点云。 参数: depth_image: 深度图(numpy数组,单位:米) depth_scale: 深度比例因子 intrinsics: 相机内参对象 返回: points_3d: 形状为(H, W, 3)的点云数组,无效点坐标为(0,0,0) """ height, width = depth_image.shape # 创建网格坐标 u, v = np.meshgrid(np.arange(width), np.arange(height)) # 使用内参进行反投影计算 # 公式: X = (u - cx) * Z / fx # Y = (v - cy) * Z / fy # Z = depth z = depth_image x = (u - intrinsics.cx) * z / intrinsics.fx y = (v - intrinsics.cy) * z / intrinsics.fy # 堆叠成(H, W, 3)的数组 points_3d = np.stack((x, y, z), axis=-1) # 将深度为0的点(无效测量)置零 points_3d[z == 0] = 0 return points_3d # 使用手动方法生成点云 point_cloud_manual = depth_to_point_cloud(depth_image_meters, depth_scale, depth_intrin) ``` 手动计算的优势在于,你可以轻松地应用自定义的滤波器(例如,只保留特定距离范围内的点),或者将点云直接转换到其他坐标系(如机器人基座标系)。 ### 3.3 为点云着色 拥有彩色信息的点云显然更有价值。着色需要将颜色从RGB图像映射到每个三维点上。 ```python # 假设我们使用方法一生成的vtx和tex,以及原始的color_image def colorize_point_cloud(vertices, tex_coords, color_image): """ 为点云着色。 参数: vertices: 点云顶点数组 (N, 3) tex_coords: 纹理坐标数组 (N, 2),范围[0,1] color_image: 彩色图像 (H, W, 3) 返回: colored_points: 带颜色的点数组 (N, 6) [x, y, z, r, g, b] """ height, width = color_image.shape[:2] # 将纹理坐标转换为图像像素坐标 u_img = (tex_coords[:, 0] * width).astype(np.int32) v_img = (tex_coords[:, 1] * height).astype(np.int32) # 确保坐标在图像范围内 u_img = np.clip(u_img, 0, width - 1) v_img = np.clip(v_img, 0, height - 1) # 获取每个点对应的颜色 colors = color_image[v_img, u_img] # 合并坐标和颜色 colored_points = np.hstack((vertices, colors)) return colored_points # 生成彩色点云 colored_cloud = colorize_point_cloud(vtx, tex, color_image) ``` ## 4. 点云处理、可视化与工程化存储 生成点云只是开始,如何查看、处理和保存这些数据,决定了它们能否真正被下游应用使用。 ### 4.1 使用Open3D进行高效可视化与处理 虽然Matplotlib可以绘制3D散点图,但对于数十万个点的点云,其性能往往难以接受。**Open3D**是一个专门为3D数据处理设计的库,它提供了高效的可视化和丰富的处理算法。 ```python import open3d as o3d def visualize_with_open3d(points_3d, colors=None): """ 使用Open3D可视化点云。 参数: points_3d: 点云数组,形状为(N, 3)或(N, 6)[包含颜色] colors: 可选,单独的颜色数组 (N, 3),取值范围[0,1] """ pcd = o3d.geometry.PointCloud() pcd.points = o3d.utility.Vector3dVector(points_3d[:, :3]) if colors is not None: pcd.colors = o3d.utility.Vector3dVector(colors) elif points_3d.shape[1] >= 6: # 假设后三位是RGB,且范围是[0,255],需要归一化到[0,1] pcd.colors = o3d.utility.Vector3dVector(points_3d[:, 3:6] / 255.0) # 执行简单的离群点移除(统计方法) cl, ind = pcd.remove_statistical_outlier(nb_neighbors=20, std_ratio=2.0) pcd_inlier = pcd.select_by_index(ind) # 可视化 o3d.visualization.draw_geometries([pcd_inlier], window_name="RealSense 3D Point Cloud", width=1024, height=768) ``` Open3D的强大之处在于它集成了许多点云处理算法,例如: * **降采样**:`pcd.voxel_down_sample(voxel_size=0.01)` * **法线估计**:`pcd.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.1, max_nn=30))` * **平面分割**:使用RANSAC算法检测并移除地面等平面。 ### 4.2 点云数据的持久化存储 将点云保存到文件,便于后续分析或在不同工具间交换。常用的格式有PLY、PCD、LAS等。 ```python def save_point_cloud(filename, points, colors=None, format='ply'): """ 保存点云到文件。 参数: filename: 输出文件名 points: 点坐标 (N, 3) colors: 点颜色 (N, 3), 范围[0,255] format: 文件格式,支持 'ply', 'pcd', 'xyz' 等 """ pcd = o3d.geometry.PointCloud() pcd.points = o3d.utility.Vector3dVector(points) if colors is not None: pcd.colors = o3d.utility.Vector3dVector(colors / 255.0) # Open3D会根据文件后缀名自动选择保存格式 o3d.io.write_point_cloud(filename, pcd, write_ascii=False) print(f"点云已保存至: {filename}") # 示例:保存为二进制PLY格式 save_point_cloud('scan_001.ply', colored_cloud[:, :3], colored_cloud[:, 3:6]) ``` **格式选择建议**: * **PLY**:通用性好,支持颜色和法线,二进制格式文件小,是推荐的首选格式。 * **PCD**:Point Cloud Library (PCL) 的原生格式,在机器人领域常用。 * **NPZ**:如果你只需要在Python的NumPy生态内交换数据,使用`np.savez`保存数组是最快最方便的方式。 ### 4.3 性能优化与常见问题排查 在实际连续运行中,你可能会遇到帧率下降或内存增长的问题。 * **帧缓存管理**:`pipeline.wait_for_frames()` 默认会缓存一定数量的帧。在长时间运行或处理速度跟不上采集速度时,可以设置`frame_queue_size`来限制缓存,避免延迟累积。 ```python # 在 pipeline.start(config) 后配置 playback = profile.get_device().as_playback() playback.set_real_time(False) # 对于读取bag文件,设为False可以按需取帧 ``` * **内存泄漏检查**:确保在循环结束后或异常发生时调用 `pipeline.stop()`。对于`pointcloud`等对象,虽然Python有垃圾回收,但在大循环中显式删除大对象是个好习惯。 * **深度图空洞填充**:RealSense SDK提供了后处理滤波器,可以在生成深度图时直接应用,如`hole_filling_filter`,能有效减少深度图中的无效点(黑洞)。 ```python # 创建并配置空洞填充滤波器 hole_filling = rs.hole_filling_filter() # 处理深度帧 filled_depth = hole_filling.process(depth_frame) ``` 走到这里,你已经掌握了从驱动RealSense相机到生成、处理、可视化并保存3D点云的完整链条。这套流程是许多高级应用(如SLAM、物体识别、体积测量)的基石。我自己的项目里,在长时间采集时,会额外增加一个监控线程来记录帧率和丢帧情况,这对于评估系统稳定性至关重要。下一步,你可以尝试将点云与IMU数据融合,或者接入ROS(Robot Operating System)的`realsense2_camera`节点,让你的三维视觉系统在更复杂的机器人项目中大放异彩。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

Python内容推荐

基于 python结合YOLOv5对Intel-Realsense-D435i 进行开发,测量物体之间的三维距离

基于 python结合YOLOv5对Intel-Realsense-D435i 进行开发,测量物体之间的三维距离

【作品名称】:基于 python结合YOLOv5对Intel_Realsense_D435i 进行开发,测量物体之间的三维距离 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:nvironment: 1.一个可运行yolov5的环境 2.一个Intel realsense D435i相机,pyrealsense2和各种依赖库 1. could run yolov5 2. pip install -r requirements.txt 3. pip install pyrealsense2 Use: 配置yolov5_D435i_2.0/config/yolov5s.yaml,运行yolov5_D435i_2.0/config/main2.py即可 yolov5_D435i_2.0/config/yolov5s.yaml: weight: "weights/yolov5s.pt" # 输入图像的尺寸 input_size: [640,480]

基于YOLOv5+Intel_Realsense_D435i开发的物体之间三维距离测量python源码+项目说明.zip

基于YOLOv5+Intel_Realsense_D435i开发的物体之间三维距离测量python源码+项目说明.zip

【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于YOLOv5+Intel_Realsense_D435i开发的物体之间三维距离测量python源码+项目说明.zip 结合YOLOv5对Intel_Realsense_D435i 进行开发,实现实时检测物体之间的三维距离 [yolov5]:实时目标检测算法 [Intel Relsense D435i深度摄像头](https://www.intelrealsense.com/zh-hans/depth-camera-d435i/):Intel使用realsense(实感)技术开发出来的的深度摄像头,可以获取目标的三维信息 ## 1.Use and Environment: 如果您想直接使用,请使用yolov5_D435i_2.0 yolov5_D435i_1.0是本人学习时的版本。 ### Environment: 1.一个可运行yolov5的环境 2.一个Intel realsense D435i相机,pyrealsense2和各种依赖库 ``` 1. could run yolov5 2. pip install -r requirements.txt 3. pip install pyrealsense2 ``` ### Use: 配置yolov5_D435i_2.0/config/yolov5s.yaml,运行yolov5_D435i_2.0/config/main2.py即可 yolov5_D435i_2.0/config/yolov5s.yaml: ``` weight: "weights/yolov5s.pt" # 输入图像的尺寸 input_size: [640,480] # 类别个数 class_num: 80 # 标签名称 class_name: [ 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light', 'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone', 'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush' ] # 阈值设置 threshold: iou: 0.45 confidence: 0.6 # 计算设备 # - cpu # - 0 <- 使用GPU device: '0' target: ['person']#检测哪些类别之间的距离 which objects you want to detect ``` ## 2.Attenion ...

基于YOLOv5+Intel-Realsense-D435i开发的物体之间三维距离测量python源码+项目说明.zip

基于YOLOv5+Intel-Realsense-D435i开发的物体之间三维距离测量python源码+项目说明.zip

本资源提供了基于YOLOv5和Intel RealSense D435i相机的物体之间三维距离测量项目的Python源码及详细项目说明。通过结合YOLOv5的目标检测能力和Intel RealSense D435i的深度传感技术,此项目能够实时准确地测量场景中不同物体之间的三维距离。项目中的Python代码实现了从摄像头捕捉图像、进行目标检测、计算物体之间的距离到结果显示的全过程。项目说明文档详细介绍了每个模块的功能及其实现方法,包括如何利用YOLOv5进行目标识别,以及如何通过Intel RealSense D435i获取深度信息并转换为三维坐标。该资源旨在为开发者提供一个学习和实践计算机视觉与深度感知技术的平台,帮助他们理解并掌握相关技术的应用。无论是初学者还是有经验的开发者,都可以通过这个项目深入了解YOLOv5和Intel RealSense D435i的结合应用,提升自己的技术水平。请注意,本资源仅供学习使用,不应用于商业用途。

csv文件,配套 《Python手把手教学通关:入门到进阶,讲练测答四合一 》学习专栏使用

csv文件,配套 《Python手把手教学通关:入门到进阶,讲练测答四合一 》学习专栏使用

《Python手把手教学通关:入门到进阶,讲练测答四合一 》学习专栏:https://blog.csdn.net/cupid_kl/category_13178654.html 专栏中的Python入门学习14:文件操作 中用到此素材。

pyrealsense2安装指南[代码]

pyrealsense2安装指南[代码]

本文详细介绍了在Windows 10 64位系统上,使用Python3.7安装pyrealsense2库的步骤。首先指出了直接使用pip install pyrealsense2命令安装可能失败的问题,随后提供了通过下载.whl文件进行安装的解决方案。具体步骤包括从指定链接下载对应版本的.whl文件,然后在cmd中进入文件所在目录并执行安装命令。最后,文章还提供了一个验证安装成功的Python代码示例,展示了如何连接Intel RealSense D435摄像头并获取数据流信息,包括陀螺仪、深度、彩色和加速度传感器的配置参数。

Intel Realsense 深度相机教程,基于jupyter notebook

Intel Realsense 深度相机教程,基于jupyter notebook

Intel Realsense 深度相机教程,基于jupyter notebook

captureRGBDpt_realsense图像采集_

captureRGBDpt_realsense图像采集_

realsense采集rgb,灰度与点云图

结合YOLOv5对Intel-Realsense-D435i 进行开发测量物体之间的三维距离源码+项目说明.zip

结合YOLOv5对Intel-Realsense-D435i 进行开发测量物体之间的三维距离源码+项目说明.zip

结合YOLOv5对Intel_Realsense_D435i 进行开发,测量物体之间的三维距离结合YOLOv5对Intel_Realsense_D435i 进行开发,测量物体之间的三维距离结合YOLOv5对Intel_Realsense_D435i 进行开发,测量物体之间的三维距离结合YOLOv5对Intel_Realsense_D435i 进行开发,测量物体之间的三维距离结合YOLOv5对Intel_Realsense_D435i 进行开发,测量物体之间的三维距离

【毕业设计】结合YOLOv5对Intel_Realsense_D435i 进行开发测量物体之间的三维距离源码+项目说明.zip

【毕业设计】结合YOLOv5对Intel_Realsense_D435i 进行开发测量物体之间的三维距离源码+项目说明.zip

高分毕业设计源码 基于YOLO的毕业选题设计的程序源码,适用与计算机与软件工程毕业设计选题

基于Yolov5和Intel-Realsense-D435i实现的物体之间三维距离测量源码+使用说明

基于Yolov5和Intel-Realsense-D435i实现的物体之间三维距离测量源码+使用说明

<项目介绍> 结合YOLOv5对Intel_Realsense_D435i 进行开发,实现实时检测物体之间的三维距离 yolov5:实时目标检测算法 Intel Relsense D435i深度摄像头:Intel使用realsense(实感)技术开发出来的的深度摄像头,可以获取目标的三维信息 1.Use and Environment: 如果您想直接使用,请 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------

最详细jetson-xavier-nx调试realsense(l515)

最详细jetson-xavier-nx调试realsense(l515)

#pyrealsense2安装包

Yolov5和Intel-Realsense-D435i开发的物体之间三维距离测量源码+使用说明(高分项目)

Yolov5和Intel-Realsense-D435i开发的物体之间三维距离测量源码+使用说明(高分项目)

Yolov5和Intel_Realsense_D435i开发的物体之间三维距离测量源码+使用说明(高分项目),含有代码注释,新手也可看懂,个人手打98分项目,导师非常认可的高分项目,毕业设计、期末大作业和课程设计高分必看,下载下来,简单部署,就可以使用。 Yolov5和Intel_Realsense_D435i开发的物体之间三维距离测量源码+使用说明(高分项目),含有代码注释,新手也可看懂,个人手打98分项目,导师非常认可的高分项目,毕业设计、期末大作业和课程设计高分必看,下载下来,简单部署,就可以使用。 Yolov5和Intel_Realsense_D435i开发的物体之间三维距离测量源码+使用说明(高分项目),含有代码注释,新手也可看懂,个人手打98分项目,导师非常认可的高分项目,毕业设计、期末大作业和课程设计高分必看,下载下来,简单部署,就可以使用。Yolov5和Intel_Realsense_D435i开发的物体之间三维距离测量源码+使用说明(高分项目),含有代码注释,新手也可看懂,个人手打98分项目,导师非常认可的高分项目,毕业设计、期末大作业和课程设计高分必看,下载下来

在Opencv DNN框架下,使用Intel D435实感摄像头基于Yolov3框架实现目标检测-C/C++开发

在Opencv DNN框架下,使用Intel D435实感摄像头基于Yolov3框架实现目标检测-C/C++开发

使用英特尔D435实感摄像头,在Opencv DNN框架下基于Yolov3框架实现目标检测,并根据深度信息实现对异物的3D定位。 实时显示摄像机坐标系中的坐标。 异议检测和位置RealsenseD435要求C ++版本Ubuntu18.04或16.04 Opencv 4.x C ++ 11_std至少,我在绝对路径/ usr / local / eigen3中使用了C ++ 17 std Eigen3:Cmake> = 3.17 PCL lib> = 1.7.1 Intel Realsense SDK> = 2.0 Yolov3,由Darknet Python版本pyrealsense2.x Opencv-python numpy与C ++版本相同,必须已安装realsense D435的SDK如何使用C ++ git clone https://github.com / Mazhichaoruya /异议检测和定位Rea

XC3588H-V13用户手册.pdf

XC3588H-V13用户手册.pdf

采用新一代旗舰芯片RK3588八核64位大小核架构处理器,4*Cortex-A76 + 4*Cortex-A55,8nm先进制程,主频高达2.4GHz。

XC3576H-V12用户手册.pdf

XC3576H-V12用户手册.pdf

采用新一代旗舰芯片RK3576八核64位大小核架构处理器,4*Cortex-A72 + 4*Cortex-A53,8nm先进制程,主频高达2.2GHz。

Android-Logcat-dmesg-ramdump

Android-Logcat-dmesg-ramdump

Android-Logcat-dmesg-ramdump

GR3014A.pdf

GR3014A.pdf

GR3014A

易语言源码易语言超级找图模块源码

易语言源码易语言超级找图模块源码

易语言源码易语言超级找图模块源码

FS2116A (1).jpg

FS2116A (1).jpg

FS2116A (1)

SUN5155.pdf

SUN5155.pdf

SUN5155

最新推荐最新推荐

recommend-type

显示和隐藏进程的主窗口

显示和隐藏进程的主窗口 显示和隐藏进程的主窗口 显示和隐藏进程的主窗口 显示和隐藏进程的主窗口
recommend-type

#资源达人分享计划# clsWindow2.2_20210331控制PC版QQ发送消息.zip

clsWindow2.2_20210331控制PC版QQ发送消息.zip
recommend-type

根据进程ID获取进程的用户名

根据进程ID号,获取进程的用户名,包括系统用户名,系统登录这用户名,LOCALSERVICE NETWORKSERVICE 都可以获取到
recommend-type

查看窗口和控件句柄、类名、标题、风格

查看窗口和控件句柄、类名、标题、风格
recommend-type

Python获取系统所有进程PID及进程名称的方法示例

主要介绍了Python获取系统所有进程PID及进程名称的方法,涉及Python使用psutil对系统进程进行操作的相关实现技巧,需要的朋友可以参考下
recommend-type

学生成绩管理系统C++课程设计与实践

资源摘要信息:"学生成绩信息管理系统-C++(1).doc" 1. 系统需求分析与设计 在进行学生成绩信息管理系统开发前,首先需要进行系统需求分析,这是确定系统开发目标与范围的过程。需求分析应包括数据需求和功能需求两个方面。 - 数据需求分析: - 学生成绩信息:需要收集学生的姓名、学号、课程成绩等数据。 - 数据类型和长度:明确每个数据项的数据类型(如字符串、整型等)和长度,例如学号可能是字符串类型且长度为一定值。 - 描述:详细描述每个数据项的意义,以确保系统能够准确处理。 - 功能需求分析: - 列出功能列表:用户界面应提供清晰的操作指引,列出所有可用功能。 - 查询学生成绩:系统应能通过学号或姓名查询学生的成绩信息。 - 增加学生成绩信息:允许用户添加未保存的学生成绩信息。 - 删除学生成绩信息:能够通过学号或姓名删除已经保存的成绩信息。 - 修改学生成绩信息:通过学号或姓名修改已有的成绩记录。 - 退出程序:提供安全退出程序的选项,并确保所有修改都已保存。 2. 系统设计 系统设计阶段主要完成内存数据结构设计、数据文件设计、代码设计、输入输出设计、用户界面设计和处理过程设计。 - 内存数据结构设计: - 使用链表结构组织内存中的数据,便于动态增删查改操作。 - 数据文件设计: - 选择文本文件存储数据,便于查看和编辑。 - 代码设计: - 根据功能需求,编写相应的函数和模块。 - 输入输出设计: - 设计简洁明了的输入输出提示信息和操作流程。 - 用户界面设计: - 用户界面应为字符界面,方便在命令行环境下使用。 - 处理过程设计: - 设计数据处理流程,确保每个操作都有明确的处理逻辑。 3. 系统实现与测试 实现阶段需要根据设计阶段的成果编写程序代码,并进行系统测试。 - 程序编写: - 完成系统设计中所有功能的程序代码编写。 - 系统测试: - 设计测试用例,通过测试用例上机测试系统。 - 记录测试方法和测试结果,确保系统稳定可靠。 4. 设计报告撰写 最后,根据系统开发的各个阶段,撰写详细的设计报告。 - 系统描述:包括问题说明、数据需求和功能需求。 - 系统设计:详细记录内存数据结构设计、数据文件设计、代码设计、输入/输出设计、用户界面设计、处理过程设计。 - 系统测试:包括测试用例描述、测试方法和测试结果。 - 设计特点、不足、收获和体会:反思整个开发过程,总结经验和教训。 时间安排: - 第19周(7月12日至7月16日)完成项目。 - 7月9日8:00到计算机学院实验中心(三楼)提交程序和课程设计报告。 指导教师和系主任(或责任教师)需要在文档上签名确认。 系统需求分析: - 使用表格记录系统需求分析的结果,包括数据项、数据类型、数据长度和描述。 - 分析数据项如学生成绩信息、状态器、链表节点等,确定其属性和行为。 以上就是文档中提到的学生成绩信息管理系统开发的关键知识点。开发此类系统需要熟练掌握C++编程基础,了解面向对象的程序设计思想,以及熟悉文件操作和链表等数据结构的应用。此外,良好的软件开发流程意识、测试意识和文档撰写能力也是必不可少的。
recommend-type

别再手动拖拽了!用Lumerical脚本批量创建FDTD仿真结构(附完整代码)

# 告别低效建模:Lumerical脚本自动化实战指南 在光子学仿真领域,时间就是科研生命线。当同行还在GUI界面里反复点击菜单时,你已经用脚本批量生成了20组参数化结构——这不是未来场景,而是每位FDTD用户都应该掌握的基础生产力革命。本文将彻底改变你与Lumerical的交互方式,从手动拖拽的农耕时代,跃迁到自动化建模的工业文明。 ## 1. 为何脚本建模是必然选择 2019年Nature Photonics的一项研究显示,科研工作者在仿真工具上平均浪费37%的时间在重复性操作上。对于需要参数扫描的纳米光学结构设计,这个数字可能更高。手动创建10个不同尺寸的纳米柱阵列意味着: -
recommend-type

Java邮件解析任务中,如何安全高效地提取HTML邮件内容并避免硬编码、资源泄漏和类型转换异常?

<think>我们被要求优化一段Java代码,该代码用于处理邮件(特别是来自特定发件人的构建通知邮件)。代码的主要问题包括: 1. 重复获取邮件内容:在检查MIME类型后,多次调用`msg[i].getContent()`,这可能导致性能问题或流关闭异常。 2. 类型转换问题:直接将邮件内容转换为`Multipart`而不进行类型检查,可能引发`ClassCastException`。 3. 代码结构问题:逻辑嵌套过深,可读性差,且存在重复代码(如插入邮件详情的操作在两个地方都有)。 4. 硬编码和魔法值:例如在解析HTML表格时使用了硬编码的索引(如list3.get(10)),这容易因邮件
recommend-type

RH公司应收账款管理优化策略研究

资源摘要信息:"本文针对RH公司的应收账款管理问题进行了深入研究,并提出了改进策略。文章首先分析了应收账款在企业管理中的重要性,指出其对于提高企业竞争力、扩大销售和充分利用生产能力的作用。然后,以RH公司为例,探讨了公司应收账款管理的现状,并识别出合同管理、客户信用调查等方面的不足。在此基础上,文章提出了一系列改善措施,包括完善信用政策、改进业务流程、加强信用调查和提高账款回收力度。特别强调了建立专门的应收账款回收部门和流程的重要性,并建议在实际应用过程中进行持续优化。同时,文章也意识到企业面临复杂多变的内外部环境,因此提出的策略需要根据具体情况调整和优化。 针对财务管理领域的专业学生和从业者,本文提供了一个关于应收账款管理问题的案例研究,具有实际指导意义。文章还探讨了信用管理和征信体系在应收账款管理中的作用,强调了它们对于提升企业信用风险控制和市场竞争能力的重要性。通过对比国内外企业在应收账款管理上的差异,文章总结了适合中国企业实际环境的应收账款管理方法和策略。" 根据提供的文件内容,以下是详细的知识点: 1. 应收账款管理的重要性:应收账款作为企业的一项重要资产,其有效管理关系到企业的现金流、财务健康以及市场竞争力。不良的应收账款管理会导致资金链断裂、坏账损失增加等问题,严重影响企业的正常运营和长远发展。 2. 应收账款的信用风险:在信用交易日益频繁的商业环境中,企业必须对客户信用进行评估,以便采取合理的信用政策,降低信用风险。 3. 合同管理的薄弱环节:合同是应收账款管理的法律基础,严格的合同管理能够保障企业权益,减少因合同问题导致的应收账款风险。 4. 客户信用调查:了解客户的信用状况对于预测和控制应收账款风险至关重要。企业需要建立有效的客户信用调查机制,识别和筛选信用良好的客户。 5. 应收账款回收策略:企业应建立有效的账款回收机制,包括定期的账款跟进、逾期账款的催收等。同时,建立专门的应收账款回收部门可以提升回收效率。 6. 应收账款管理流程优化:通过改进企业内部管理流程,如简化审批流程、提高工作效率等措施,能够提升应收账款的管理效率。 7. 应收账款管理策略的调整和优化:由于企业的内外部环境复杂多变,因此制定的管理策略需要根据实际情况进行动态调整和持续优化。 8. 信用管理和征信体系的作用:建立和完善企业内部信用管理体系和征信体系,有助于企业更好地控制信用风险,并在市场竞争中占据有利地位。 9. 对比国内外应收账款管理实践:通过研究国内外企业在应收账款管理上的不同做法和经验,可以借鉴先进的管理理念和方法,提升国内企业的应收账款管理水平。 综上所述,本文深入探讨了应收账款管理的多个方面,为RH公司乃至其他同类型企业提供了应收账款管理的改进方向和策略,对于财务管理专业的教育和实践都具有重要的参考价值。
recommend-type

新手别慌!用BingPi-M2开发板带你5分钟搞懂Tina Linux SDK目录结构

# 新手别慌!用BingPi-M2开发板带你5分钟搞懂Tina Linux SDK目录结构 第一次拿到BingPi-M2开发板时,面对Tina Linux SDK里密密麻麻的文件夹,我完全不知道从哪下手。就像走进一个陌生的大仓库,每个货架上都堆满了工具和零件,却找不到操作手册。这种困惑持续了整整两天,直到我意识到——理解目录结构比死记硬背每个文件更重要。 ## 1. 为什么SDK目录结构如此重要 想象你正在组装一台复杂的模型飞机。如果所有零件都混在一个箱子里,你需要花大量时间寻找每个螺丝和面板。但如果有分门别类的隔层,标注着"机身部件"、"电子设备"、"紧固件",组装效率会成倍提升。Ti