D435相机结合Yolo V8识别出目标物体,并转点云出抓取位姿。

最近项目上需要完成整个识别、定位、到最后的抓取流程。
分享一下,通过使用D435相机并结合Yolo V8识别出目标物体后,抠取出目标物体部分的有效深度图,最后将前景物体部分的RGB

D435相机结合Yolo V8识别出目标物体,并转点云出抓取位姿

  • 1、D435相机取流
  • 2、D435结合Yolo V8实时检测
  • 3、扣取指定物体的深度图
    • 3.1 扣取指定物体的mask
    • 3.2 根据mask扣取物体有效深度部分
  • 4、 结合相机内参转物体点云
  • 5、 抓取

1、D435相机取流

使用pyrealsense2进行RGB-D获取视频流,这里最大的坑其实就是每一帧得做一个RGB-D帧间的对齐。

import cv2
import numpy as np
import pyrealsense2 as rspipeline = rs.pipeline()
align_to = rs.stream.color
align = rs.align(align_to)
config = rs.config()
D400_imgWidth, D400_imgHeight = 640, 480
config.enable_stream(rs.stream.color, D400_imgWidth, D400_imgHeight, rs.format.bgr8, 30)
config.enable_stream(rs.stream.depth, D400_imgWidth, D400_imgHeight, rs.format.z16, 30)profile = pipeline.start(config)while True:frames = pipeline.wait_for_frames()# RGB-D对齐aligned_frames = align.process(frames)aligned_color_frame = aligned_frames.get_color_frame()aligned_depth_frame = aligned_frames.get_depth_frame()if not aligned_depth_frame or not aligned_color_frame:raise Exception("[info] No D435 data.")rgb = np.asanyarray(aligned_color_frame.get_data())d = np.asanyarray(aligned_depth_frame.get_data())if len(rgb):cv2.imshow("RGB", rgb)cv2.imshow("D", rgb)if cv2.waitKey(1) & 0xFF == ord("q"):break

2、D435结合Yolo V8实时检测

其实就是将D435的RGB流按照循环逐帧送进Yolo V8进行推理
from ultralytics import YOLOmodel = YOLO(r"/train/weights/best.pt")
while True:frames = pipeline.wait_for_frames()aligned_frames = align.process(frames)aligned_color_frame = aligned_frames.get_color_frame()aligned_depth_frame = aligned_frames.get_depth_frame()if not aligned_depth_frame or not aligned_color_frame:raise Exception("[info] No D435 data.")rgb = np.asanyarray(aligned_color_frame.get_data())d = np.asanyarray(aligned_depth_frame.get_data())if len(rgb):results = model(rgb, conf=0.25)annotated_frame = results[0].plot()cv2.imshow("YOLOv8 Inference", annotated_frame)if cv2.waitKey(1) & 0xFF == ord("q"):break

3、扣取指定物体的深度图

3.1 扣取指定物体的mask

正常场景中只有一小部分是我们想要的,比如说一张桌面上有许多物件,但我只想识别、或者后期只抓绿色的杯子。那么就需要将Yolo V8检测出来的所有结果进行后处理,筛出我们想要的物体。

// An highlighted block
'''进行深度学习前向传播推理'''
results = model(color_img, conf=0.25)
# 封装后处理函数,只保留指定“input”的mask。
def backward_handle_output(results , color_img, depth_img, nc, input):center = Nonecls = []mapped_depth = Noneannotated_frame = output[0].plot()mask = None# 如果检测到物体,也就是mask不为空时if results [0].masks is not None:# 获取所有检测框所属的类别 for cls_idx in range(len(output[0].boxes)):cls.append(output[0].names.get(int(output[0].boxes.cls[cls_idx].item())))# 只留下指定的“input”类别物体if input in cls:# 根据“input”对应的索引号,获取其maskcls_idx = cls.index(input)mask = np.array(output[0].masks.data.cpu())[cls_idx] 

3.2 根据mask扣取物体有效深度部分

正常会通过深度图结合相机内参来转点云,所以如果我们只想要将我们待检测的物体部分的深度图转成点云图,那这样就可以过滤掉不相关的物体或背景。

# 判断非指定物体的有效区域
channel_zeros = mask == 0
'''初始化一个与原始深度图类型的一致的全0深度图'''
mapped_depth = np.zeros_like(depth_img)
'''也就是我们指定“input”物体mask区域对应的位置的深度信息抠出来,剩下非物体有效区域深度值全置为0'''
# 这样,我们就成功晒出了物体部分的深度值,其余全为背景0。
mapped_depth[~channel_zeros] = depth_img[~channel_zeros]
mapped_depth[channel_zeros] = 0

4、 结合相机内参转物体点云

import open3d as o3d
pcd = o3d.geometry.PointCloud()def create_point_cloud_from_depth_image(depth, camera, organized=True):""" Generate point cloud using depth image only.Input:depth: [numpy.ndarray, (H,W), numpy.float32]depth imagecamera: [CameraInfo]camera intrinsicsorganized: boolwhether to keep the cloud in image shape (H,W,3)Output:cloud: [numpy.ndarray, (H,W,3)/(H*W,3), numpy.float32]generated cloud, (H,W,3) for organized=True, (H*W,3) for organized=False"""assert(depth.shape[0] == camera.height and depth.shape[1] == camera.width)xmap = np.arange(camera.width)ymap = np.arange(camera.height)xmap, ymap = np.meshgrid(xmap, ymap)points_z = depth / camera.scalepoints_x = (xmap - camera.cx) * points_z / camera.fxpoints_y = (ymap - camera.cy) * points_z / camera.fycloud = np.stack([points_x, points_y, points_z], axis=-1)if not organized:cloud = cloud.reshape([-1, 3])return cloudif mapped_depth is not None:mapped_depth = mapped_depth.astype(float) / 1000.0depth_img = depth_img.astype(float) / 1000.0mask_cloud = create_point_cloud_from_depth_image(mapped_depth, camera, organized=True)depth_range = [0.0, 1.5]mask = (depth_img < depth_range[1]) & (depth_img > depth_range[0])obj_cloud_masked = mask_cloud[mask]rgb_masked = color_img[mask] / 255idxs = np.random.choice(len(cloud_masked), 20000, replace=True)obj_cloud_sampled = obj_cloud_masked[idxs]rgb_sampled = rgb_masked[idxs]pcd.points = o3d.utility.Vector3dVector(obj_cloud_sampled.astype(np.float32))pcd.colors = o3d.utility.Vector3dVector(rgb_sampled.astype(np.float32))# 如果可视化的点云方向不正,可进行坐标系方向调整# obj_cloud_sampled[:, 1] = - obj_cloud_sampled[:, 1]# obj_cloud_sampled[:, 2] = - obj_cloud_sampled[:, 2]o3d.visualization.draw_geometries([pcd])

5、 抓取

如果相对整个场景进行感知抓取,而非指定单个物体,就可以把根据物体mask扣取深度图部分取消。进而,使用开源GraspNet、AnyGrasp等抓取网络进行抓取姿势预测。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/347253.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

问题:设开环系统的频率特性为则其相频特性穿越-180°线时对应的频率为()。 #学习方法#微信

问题&#xff1a;设开环系统的频率特性为则其相频特性穿越-180线时对应的频率为&#xff08;&#xff09;。 ? A、10rad1s B、3rad/s C、lradIs D、√3rad/s 参考答案如图所示

python使用wkhtmltopdf将html字符串保存pdf,解决出现方框的问题

出现的问题&#xff1a; 解决办法&#xff1a; <html> <head><meta charset"UTF-8"/> </head> <style> * {font-family: Arial,SimSun !important; } </style> </html>在html字符串前面加上上面代码&#xff0c;意思是设…

结构体<C语言>

导言 结构体是C语言中的一种自定义类型&#xff0c;它的值&#xff08;成员变量&#xff09;可以是多个&#xff0c;且这些值可以为不同类型&#xff0c;这也是和数组的主要区别&#xff0c;下面将介绍它的一些基本用法&#xff0c;包括&#xff1a;结构体的创建、结构体变量的…

Pyramid Vision Transformer, PVT(ICCV 2021)原理与代码解读

paper&#xff1a;Pyramid Vision Transformer: A Versatile Backbone for Dense Prediction without Convolutions official implementation&#xff1a;GitHub - whai362/PVT: Official implementation of PVT series 存在的问题 现有的 Vision Transformer (ViT) 主要设计…

一款优秀的下载和共享工具

一、简介 1、它以舒适和快速的方式下载Internet文件&#xff0c;同时支持断点续传和嗅探视频音频的功能。 它具有站点抓取、批量下载队列和计划任务下载等功能&#xff0c;可以接管所有浏览器的下载任务&#xff0c;包括Edge&#xff0c;Firefox和Chrome等主流浏览器。 对于用…

Django DeleteView视图

Django 的 DeleteView 是一个基于类的视图&#xff0c;用于处理对象的删除操作。 1&#xff0c;添加视图函数 Test/app3/views.py from django.shortcuts import render# Create your views here. from .models import Bookfrom django.views.generic import ListView class B…

Windows电脑清理C盘内存空间

ps&#xff1a;过程截图放在篇末 一、%tmp%文件 win R键呼出运行窗口&#xff0c;输入 %tmp% 自动进入tmp文件夹&#xff0c;ctrl A全选删除 遇到权限不足&#xff0c;正在运行&#xff0c;丢失的文件直接跳过即可 二、AppData文件夹 1、pipcache 在下列路径下面&…

Python爬取城市空气质量数据

Python爬取城市空气质量数据 一、思路分析1、寻找数据接口2、发送请求3、解析数据4、保存数据二、完整代码一、思路分析 目标数据所在的网站是天气后报网站,网址为:www.tianqihoubao.com,需要采集武汉市近十年每天的空气质量数据。先看一下爬取后的数据情况: 1、寻找数据…

Spark学习——不同模式下执行脚本

举个简单的例子&#xff1a;使用spark官方用例"取pi值" 一、local模式 进入spark目录执行后台命令&#xff1a; bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master local[*] \ ./examples/jars/spark-examples_2.12-3.2.1.jar \ 10运行结…

【华为 ICT HCIA eNSP 习题汇总】——题目集21

1、OSPF协议中的hello报文不包括以下哪个字段&#xff1f; A、Priority&#xff08;优先级&#xff09; B、Neighbor&#xff08;邻居表&#xff09; C、Interval&#xff08;时间间隔&#xff09; D、Checksum&#xff08;校验和&#xff09; 考点&#xff1a;路由技术原理 解…

视频行人搜索 (Person Search in Videos)

文章目录 视频行人搜索 (Person Search in Videos)图像行人搜索存在问题Video PS 定义MTA-PS数据集First person search dataset in videosComplicated ambient conditions and realistic monitoring scenariosPrivacy insensitivity 方法 视频行人搜索 (Person Search in Vide…

GIS之arcgis系列10:arcpy实现批量掩膜提取

按掩膜提取 (Spatial Analyst) 提取掩膜所定义区域内的相应栅格像元。 OutRas ExtractByMask(InRas1, InMsk1, "INSIDE") 使用情况 输入栅格中的其他属性&#xff08;若有的话&#xff09;将按照原样添加到输出栅格属性表。 根据所记录的属性&#xff0c;某些属性…

查看服务器的硬件信息、操作系统等常用命令

在Linux下查看服务器是什么类型的服务器&#xff0c;通常可以通过查看服务器的硬件信息、操作系统和已安装的服务来判断。以下是一些常用的命令&#xff1a; 查看操作系统信息&#xff1a; cat /etc/*release* 查看CPU信息&#xff1a; lscpu 查看内存信息&#xff1a; free…

分布式光纤测温DTS与红外热成像系统的主要区别是什么?

分布式光纤测温DTS和红外热成像系统在应用领域和工作原理上存在显著的区别&#xff0c;两者具有明显的差异性。红外热成像系统适用于表现扩散式发热、面式场景以及环境条件较好的情况下。它主要用于检测物体表面的温度&#xff0c;并且受到镜头遮挡或灰尘等因素的影响会导致失效…

【MySQL】函数

目录 一. 日期函数二. 字符串函数三. 数学串函数四. 其他函数 一. 日期函数 函数名说明current_date( )返回当前日期current_time( )返回当前时间current_timestamp( )返回当前时间戳date(datetime)返回 datetime 参数的日期部分date_add(date, interval d value type)在 date…

科技云报道:“元年”之后,生成式AI将走向何方?

科技云报道原创。 近两年&#xff0c;以大模型为代表的生成式AI技术&#xff0c;成为引爆数字原生最重要的技术奇点&#xff0c;人们见证了各类文生应用的进展速度。Gartner预测&#xff0c;到2026年&#xff0c;超过80%的企业将使用生成式AI的API或模型&#xff0c;或在生产环…

一个数据查询导出工具

数据查询导出工具 安装说明 安装完成后在桌面会创建“数据查询导出工具”的查询工具。 程序初始化 配置数据库连接 首次运行&#xff0c;请先配置数据库连接 点击“数据库连接”后&#xff0c;会出现下面的窗体&#xff0c;要求输入维护工程师密码。&#xff08;维护工程师密码…

下载安装Grafana 监控mysql和Linux主机

下载地址:https://grafana.com/grafana/download [rootlocalhost ~]# wget https://dl.grafana.com/oss/release/grafana-7.2.0- 1.x86_64.rpm 安装 [rootlocalhost ~]# yum install grafana-7.2.0-1.x86_64.rpm -y启动服务 [rootlocalhost ~]# systemctl enable --now grafa…

javaWeb项目-ssm+vue医院住院信息管理系统功能介绍

项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 1、Java简介 现代社…

iOS18首个Beta测试版发布,功能介绍附beta升级办法!

今天凌晨&#xff0c;一年一度的苹果WWDC24开发者大会正式开幕&#xff0c;发布了iOS 18、iPadOS 18、macOS Sequoia、watch OS11等新系统。 大会结束后&#xff0c;苹果火速发布了首个iOS 18开发者Beta版&#xff0c;目前有开发者资格的用户已经可以下载体验尝鲜了。 本次更新…