pybullet GGCNN数据集制作(三)

本文介绍了如何使用康奈尔数据集制作深度相机数据集,包括驱动安装、pyrealsense2配置、数据抓取与标注,以及GGCNN环境配置与数据增强技术。通过实例演示了如何在Python中操作深度相机、创建数据集,并对抓取点和抓取模式进行标注,以便于后续的机器学习模型训练。
摘要由CSDN通过智能技术生成

目录

深度相机

驱动安装

pyrealsense2安装

学校端口问题用以下方法安装 

其它相关环境安装 

Vscode配置anaconda环境

数据集制作和加载

调用深度相机进行数据集制作

代码部分

 运行效果

展示的代码文件

数据集标注

 相关环境配置

代码理解 

标签代码

可视化标签代码

 数据增强


康奈尔数据集下载(没有深度相机可以直接用这个数据集学习)

链接:https://pan.baidu.com/s/1lgPBUT4NPKYXNbzKgBIzCQ 
提取码:1n7s

数据集如图所示

day01--数据集制作(一)_m0_46154334的博客-CSDN博客_cornell数据集1.Cornell数据集下载链接:https://pan.baidu.com/s/1sVH5cgWWzyISv5v1XaPllg?pwd=udc6提取码:udc6图一 cornell grasp data文件图二 cornell文件两者内容解压后内容差不多(图一为linux下压缩包)1.1Windows下解压tar.gz文件1、进入解压包所在的文件夹,按住shift点击鼠标右键,打开Powershell窗口。2、输入命令tar -zxvf 文件名3、解压完成后,应该有4种文件,一https://blog.csdn.net/m0_46154334/article/details/124119048 此处注意需要进行相关转换

先说明一下:没有深度相机也可以学习,直接用的康奈尔数据集里的进行标注

相关资料:

链接:https://pan.baidu.com/s/1Q6UXKxAqkjerpSZkRBW4pA 
提取码:02eo 
--来自百度网盘超级会员V4的分享

深度相机

注意要用USB3.0连接

 如果是这种情况确定插入的是usb3.0的插口的情况下,那就是线不对(不能用type-c的手机数据线)

要用

 这种

用手机数据线的话只能通过代码开摄像机

驱动要关闭

测量的实际深度越多误差越大

左边第一个和右边第二个是红外主动测距立体相机

左边第二个大的是红外投影(投射红外点阵,然后用红外主动测距相机捕捉反射测量距离)

最右边是RGB彩色相机

工作原理:

通过红外主动测距立体相机可以拍摄到场景包含红外信息的图像

(通过三角测距法来获得每一点的深度)

驱动安装

Window10 intel realsense D435安装并实现opencv显示realsense读取的彩色和深度数据(QT+openCV+rsD35)_Pabebe的博客-CSDN博客

 这个可以查看图像

深度指令(平时是不用的)

 右上角可以选择2D或者3D模式

左边已经显示连接到了USB接口上

第一个选项是查看深度图像,第二个选项RGB

pyrealsense2安装

 Windows下使用Python配置环境、调用Intel realsense D435/D435i,即pyrealsense2库的安装_GRF-Sunomikp31的博客-CSDN博客_d435i windowsWindows下使用Python配置环境、调用Intel realsense D435/D435i前言错误尝试尝试一尝试二配置过程创建Python3.6环境安装**pyrealsense2**、opencv、numpy库测试记录笔记后言Bibliography前言近来太懒了,想拿起Python玩玩,突然想到可以把手边的D435i配置一下,在windows下利用python调调;经过几个小时的配置,解决了一些问题,总结如下;由于只使用RGB和深度图,不使用IMU,因此D435i和D435配置是完全相同的https://blog.csdn.net/qq_44847636/article/details/113821588?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165270910516780357213382%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=165270910516780357213382&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-2-113821588-null-null.nonecase&utm_term=Windows%E4%B8%8B%E4%BD%BF%E7%94%A8Python&spm=1018.2226.3001.4450

安装的时候如果有问题可以临时换源

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

恢复源

https://www.csdn.net/tags/MtjaYg4sOTAxNDctYmxvZwO0O0OO0O0O.html

 

学校端口问题用以下方法安装 

在python中安装包出现Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None))_lsf_007的博客-CSDN博客先向大家展示以下困扰了我好久的问题死活就是安装不上,总是说出错,其实就是说连接超时,下载不了安装包,我这里也没有科学上网的工具,经过多方百度,找到了办法通过几次pip的使用,对于默认的pip源的速度实在无法忍受,于是便搜集了一些国内的pip源,如下:阿里云 http://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi.mirrors....https://blog.csdn.net/lsf_007/article/details/87931823

其它相关环境安装 

 

 

 用以下方式安装即可

pip install  --user -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn opencv-python

 此时cv2不再报错

 安装imageio

pip install  --user -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn imageio

 

WARNING: The scripts imageio_download_bin.exe and imageio_remove_bin.exe are installed in 'C:\Users\SZU\AppData\Roaming\Python\Python38\Scripts' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.

 出现这个提醒

加入提示的环境变量

Vscode配置anaconda环境

下载相关拓展

关联VSCode与Anaconda
在VSCode里使用快捷键 Ctrl + P ,搜索 >select intetrpreter ,点击图片上这个:

 点击这个python旁边的版本数字

选择要用的环境即可 

数据集制作和加载

自己制作数据集最好是100张以上的图片

调用深度相机进行数据集制作

没有深度图也没事,可以直接用数据集里的图片 

以下是相机拍摄效果

代码部分

打开对应的编码文件 

 这一部分是建立相机到程序的联通

def run():
    pipeline = rs.pipeline()

    #Create a config并配置要流​​式传输的管道
    config = rs.config()
    config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
    config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)

    align_to = rs.stream.color
    align = rs.align(align_to)

这一部分是建立保存图像的文件夹(文件夹名为日期)

    # 按照日期创建文件夹
    save_path = os.path.join(os.getcwd(), "out", time.strftime("%Y_%m_%d_%H_%M_%S", time.localtime()))
    os.mkdir(save_path)

这一部分是建立两个opencv2的两个窗口

    # 保存的图片和实时的图片界面
    cv2.namedWindow("live", cv2.WINDOW_AUTOSIZE)
    cv2.namedWindow("save", cv2.WINDOW_AUTOSIZE)
    saved_count = 0

然后进入循环

 因为抓取检测最好是用彩色图像和深度图对齐的

所以获取了RGB图像以及和RGB对齐的深度图像

            # 获取RGB图像
            color_frame = aligned_frames.get_color_frame()
            color_image = np.asanyarray(color_frame.get_data())
            # 获取深度图
            aligned_depth_frame = aligned_frames.get_depth_frame()
            depth_image = np.asanyarray(aligned_depth_frame.get_data()).astype(np.float32) / 1000.   # 单位为m

 但因为获取的深度图是以毫米为单位的,为了单位一致,转换成米

此处可以补全也可以不补全

            # 可视化图像
            # depth_image = inpaint(depth_image)  # 补全缺失值

先看一下不补全的效果(所以此处注释掉了补全)
Python-OpenCV中的cv2.inpaint()函数的使用_python_脚本中心 - 编程客栈目录概念库函数实现代码概念修复是图像插值。数字修复算法在图像插值,照片恢复,缩放和超分辨率等方面具有广泛的应用。大多数人会在家里放一些旧的退化照片,上面有一些黑点,一些笔画等。你有没有想过恢复它?我们...http://www.cppcns.com/jiaoben/python/402435.html

深度图转换成RGB(这样观感更好)

depth_image_color = depth2RGB(depth_image)

然后展示出来

cv2.imshow("live", np.hstack((color_image, depth_image_color)))

 然后s键保存、q键退出(选中窗口)

            # s 保存图片
            if key & 0xFF == ord('s'):
                cv2.imwrite(os.path.join((save_path), "{:04d}r.png".format(saved_count)), color_image)  # 保存RGB为png文件
                imsave(os.path.join((save_path), "{:04d}d.tiff".format(saved_count)), depth_image)  # 保存深度图为tiff文件
                saved_count+=1
                cv2.imshow("save", np.hstack((color_image, depth_image_color)))

            # q 退出
            if key & 0xFF == ord('q') or key == 27:
                cv2.destroyAllWindows()
                break    

 运行效果

 先切换到配置好的环境

1.不补全缺省值的情况下

这个live窗口是实时的

 

然后点击live窗口,再按一下s 

 

多摁几次s多保存几张

 

 然后保存好之后摁q退出

 保存在这个目录下

进入对应目录

 彩色图像保存为.png格式

深度图保存为.tiff格式

因为后续的GGCNN使用的就是tiff格式

2.打开补全

 live效果(比刚刚生动一点)

 补全后就没有缺失点了

但是其实还有一点糊

可能是因为就是消费级深度相机

展示的代码文件

第二个文件是用来展示刚刚保存的图像

 展示路径为

path = './out/2021_12_24_14_59_49/0000d.tiff'

的图像 

 

然后搭建拍摄平台对着足够的物体或者样本进行拍摄

数据集标注

GGCNN其实没有标注 (其实只是转换了康奈尔数据集的标签)

但是他不精确,因为康奈尔原本的数据集就不精确

 打开网络的代码文件

 相关环境配置

切换到对应环境 

conda activate GGCNN

安装(版本号一定要对上)

conda install scikit-image==0.18.3 

 更新numpy库不然会报错

pip install  -U --user -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn numpy

安装mkl

pip install  --user -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn mkl

同样的环境在vscode和在pycharm中运行报错不一样

主要原因有可能是VSCode

默认使用项目文件夹根目录作为工作目录(cwd),这会使得子文件夹中的程序无法使用相对路径。

可以在File -> Preference -> Settings,再搜索Execute in File Dir,勾上这个即可
在这里插入图片描述

 配置好环境后就运行成功了

代码理解 

主要的程序就是main_label.py

if __name__ == '__main__':
    path = './test' # 数据集图片路径
    label_win_name = 'labeling'
    files = glob.glob(os.path.join(path, 'pcd*[0-9]r.png'))   # 匹配所有的符合条件的文件,并将其以list的形式返回

就是对指定的path下的

pcd*[0-9]r.png

进行标注

(.png)彩色图命名为pcd+四位数编号+r 

  (.tiff)格式图命名为pcd+四位数编号+d

 注意这里有一个pcd0100Label的.txt文件这是因为此时的test文件夹的图片都是标注好的

所以如果想标注(但是没有数据集,可以先把里面的.txt文件删掉或者移除到别的地方)

 程序运行

此时有两个窗口

labeling是可以开始标注的窗口

labeled是显示标注结果的窗口

 操作说明

****** 操作说明 ******
1 用鼠标左键画出一条适合夹持器抓取的直线 

2 按 上/下 调整线宽(抓取区域宽度)
    上: 增加线宽
    下: 减小线宽

3 按 W/S/Q/E 设置抓取模式:
    w: 朝向红色点单向抓取
    S: 朝向绿色单向抓取
    E: 对称抓取
    Q: 圆形抓取

4 按 左/右 调整抓取宽度 (抓取宽度比物体宽2cm,两侧各1cm)
    左: 增加
    右: 减小

换下一张:空格
退出标注:Esc

在换下一张时,当前图像上标注的数据会保存至pcd****label.txt, 
退出时,当前图像的标注不保存

1.

 按住左键拖动然后放开两边出现了一个红色的点和绿色的点(这条直线代表线上的点或者线周围点是可以作为抓取点的)

 按方向键上下可以调节线的宽度(抓取区域宽度)

最好不要超过6

注意:如果物体很窄,那画线跟它对齐就行

抓取模式设置(此时要设置为英文输入法)

3 按 W/S/Q/E 设置抓取模式: (实际上就是抓取角)

w: 朝向红色点单向抓取

S: 朝向绿色单向抓取

E: 对称抓取

Q: 圆形抓取

下图为按了E键的效果 

 

 对称抓取是针对二指抓取器的

如果是单侧的话

代表一边的抓手先到红色点然后再抓取

 4 按 左/右 调整抓取宽度 (抓取宽度比物体宽2cm,两侧各1cm)

左: 增加

右: 减小

代表抓手的张开宽度 (一定要物体更宽防止碰撞)

 换下一张:空格

在换下一张时,当前图像上标注的数据会保存至pcd****label.txt,

这是生成的遥控器的抓取配置

.txt 命名是pcd+编号+Label

每一行五个数

 前两个数代表第一条画的线上的点(没有宽度时)

 第三个数和第四个数就是抓取角的弧度

 如果使用单侧抓取模式

此时只有一个抓取角弧度

 

 最后一个数代表抓取宽度

是以像素为单位的

注:圆形抓取

1.先按住左键点一个点

2.按上下调整点的大小

 3.选择圆形抓取模式并用左右键调整宽度

 

此时只有三个数

 前两个数是抓取点的横轴和纵轴

第三个数就是抓取宽度也就是直径

 没有角度是因为在这种情况下怎么抓取都是可以的

标签代码

 对应修改path为刚刚的test的路径即可(记得调整反斜杠)

 运行前

 运行后

对每个图片生成了.mat格式文件

 里面的内容是

3代表3个通道

480 640 代表图片大小

 抓取点这个通道其实就是对这个480*640的图片上每个像素的抓取置信度

刚刚标注的就是浅蓝色上的点都是置信度都是1其他都是0

抓取角是当时标注时的第一个角

比如说第一行这里它就只选择3.03914880008267作为抓取角

抓取宽度是除以一个数让它在0-1之间

这样就可以直接用sigmod

.mat格式可以通过python的scipy直接读取

可视化标签代码

修改path为test的路径

注意反斜杠

 

 保存路径如下(此处将保存函数注释掉了,需要的话可以解开注释)

 

 运行结果

 数据增强

 

 缩放

旋转(抓取配置也要对应旋转)

裁剪出适合图像训练的尺寸

随机的翻转

    def __getitem__(self, idx):
        # 读取img和标签
        image = DepthImage(self.depth_files[idx])
        label = GraspMat(self.grasp_files[idx])
        # 数据增强
        if self.argument:
            # resize
            scale = np.random.uniform(0.9, 1.1)
            image.rescale(scale)
            label.rescale(scale)
            # rotate
            rota = 30
            rota = np.random.uniform(-1 * rota, rota)
            image.rotate(rota)
            label.rotate(rota)
            # crop
            dist = 30
            crop_bbox = image.crop(self.output_size, dist)
            label.crop(crop_bbox)
            # flip
            flip = True if np.random.rand() < 0.5 else False
            if flip:
                image.flip()
                label.flip()
        else:
            # crop
            crop_bbox = image.crop(self.output_size)
            label.crop(crop_bbox)

        # img归一化
        image.normalize()
        # 获取target
        label.encode()

        img = self.numpy_to_torch(image.img)
        grasp_point = self.numpy_to_torch(label.grasp_point)
        grasp_cos = self.numpy_to_torch(label.grasp_cos)
        grasp_sin = self.numpy_to_torch(label.grasp_sin)
        grasp_width = self.numpy_to_torch(label.grasp_width)

        return img, (grasp_point, grasp_cos, grasp_sin, grasp_width)

归一化就是减去均值,让其位于-1~1之间 (0均值标准化使其符合正态分布)

 角度就是生成论文的cos和sin那个

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值