2.GraspNet-API之examples

2.1 检查 Dataset Files

您可以通过以下代码检查数据集中是否有任何丢失的文件。

from graspnetAPI import GraspNet
# GraspNetAPI example for checking the data completeness.
# change the graspnet_root path

### ROOT PATH FOR GRASPNET ###
graspnet_root = 'E:\datasets\GraspNet'

g = GraspNet(graspnet_root, 'kinect', 'all')
if g.checkDataCompleteness():
    print('\n')
    print('Check for kinect passed')


g = GraspNet(graspnet_root, 'realsense', 'all')
if g.checkDataCompleteness():
    print('Check for realsense passed')

2.2 生成 Rectangle Grasp Labels

您可以自行生成矩形抓取标签。

# 1.导入必要的库:
# GraspNetAPI example for generating rectangle grasp from 6d grasp.
# change the graspnet_root path and NUM_PROCESS

from graspnetAPI import GraspNet
from graspnetAPI.graspnet import TOTAL_SCENE_NUM
import os
import numpy as np
from tqdm import tqdm

# 2.设置在生成标签时使用的进程数。
######################################################################
NUM_PROCESS = 24 # change NUM_PROCESS to the number of cores to use. #
######################################################################

# 3. 生成标签的函数。
def generate_scene_rectangle_grasp(sceneId, dump_folder, camera):
    g = GraspNet(graspnet_root, camera=camera, split='all')
    objIds = g.getObjIds(sceneIds = sceneId)
    grasp_labels = g.loadGraspLabels(objIds)
    collision_labels = g.loadCollisionLabels(sceneIds = sceneId)
    scene_dir = os.path.join(dump_folder,'scene_%04d' % sceneId)
    if not os.path.exists(scene_dir):
        os.mkdir(scene_dir)
    camera_dir = os.path.join(scene_dir, camera)
    if not os.path.exists(camera_dir):
        os.mkdir(camera_dir)
    for annId in tqdm(range(256), 'Scene:{}, Camera:{}'.format(sceneId, camera)):
        _6d_grasp = g.loadGrasp(sceneId = sceneId, annId = annId, format = '6d', camera = camera, grasp_labels = grasp_labels, collision_labels = collision_labels, fric_coef_thresh = 1.0)
        rect_grasp_group = _6d_grasp.to_rect_grasp_group(camera)
        rect_grasp_group.save_npy(os.path.join(camera_dir, '%04d.npy' % annId))
# 4.为每个场景和相机运行该函数。
if __name__ == '__main__':
    ####################################################################
    graspnet_root = 'E:\datasets\GraspNet'   # ROOT PATH FOR GRASPNET ##
    ####################################################################

    dump_folder = 'rect_labels'
    if not os.path.exists(dump_folder):
        os.mkdir(dump_folder)

    if NUM_PROCESS > 1:
        from multiprocessing import Pool
        pool = Pool(24)
        for camera in ['realsense', 'kinect']:
            for sceneId in range(120):
                pool.apply_async(func = generate_scene_rectangle_grasp, args = (sceneId, dump_folder, camera))
        pool.close()
        pool.join()
    
    else:
        generate_scene_rectangle_grasp(sceneId, dump_folder, camera)

2.3 加载 Grasp Labels

6D 和 rect 格式标签都可以被加载。

# 1.导入相关库。
from graspnetAPI import GraspNet
import open3d as o3d
import cv2

# GraspNetAPI example for loading grasp for a scene.
# change the graspnet_root path


# 2.设置参数 and 创建 GraspNet 实例
####################################################################
graspnet_root = 'E:\datasets\GraspNet'      # ROOT PATH FOR GRASPNET
####################################################################

sceneId = 1
annId = 3

# initialize a GraspNet instance  
g = GraspNet(graspnet_root, camera='kinect', split='train')

# 3.以6d格式加载 Grasp Label,并可视化结果。
# load grasps of scene 1 with annotation id = 3, camera = kinect and fric_coef_thresh = 0.2
_6d_grasp = g.loadGrasp(sceneId = sceneId, annId = annId, format = '6d', camera = 'kinect', fric_coef_thresh = 0.2)
print('6d grasp:\n{}'.format(_6d_grasp))


# visualize the grasps using open3d
geometries = []
geometries.append(g.loadScenePointCloud(sceneId = sceneId, annId = annId, camera = 'kinect'))
geometries += _6d_grasp.random_sample(numGrasp = 20).to_open3d_geometry_list()
o3d.visualization.draw_geometries(geometries)


# 4.以矩形格式加载 Grasp Label ,并可视化结果。
# load rectangle grasps of scene 1 with annotation id = 3, camera = realsense and fric_coef_thresh = 0.2
rect_grasp = g.loadGrasp(sceneId = sceneId, annId = annId, format = 'rect', camera = 'realsense', fric_coef_thresh = 0.2)
print('rectangle grasp:\n{}'.format(rect_grasp))

# visualize the rectanglegrasps using opencv
bgr = g.loadBGR(sceneId = sceneId, annId = annId, camera = 'realsense')
img = rect_grasp.to_opencv_image(bgr, numGrasp = 20)
cv2.imshow('rectangle grasps', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述

2.4 可视化 Dataset

Visualization of Dataset

# GraspNetAPI example for visualization.
# change the graspnet_root path
####################################################################
graspnet_root = 'E:\datasets\GraspNet'      # ROOT PATH FOR GRASPNET
####################################################################
from graspnetAPI import GraspNet

# 1. initialize a GraspNet instance  
g = GraspNet(graspnet_root, camera='kinect', split='train')

在物体上显示grasp labels。

# 2.1 show object grasps
g.showObjGrasp(objIds = 0, show=True)

在这里插入图片描述

显示场景中物体的6d poses。

# 2.2 show 6d poses
g.show6DPose(sceneIds = 0, show = True)

在这里插入图片描述

在场景中显示矩形grasp labels。

# 2.3 show scene rectangle grasps
g.showSceneGrasp(sceneId = 0, camera = 'realsense', annId = 0, format = 'rect', numGrasp = 20)

在这里插入图片描述

在场景中显示 6D grasp labels。

# 2.4 show scene 6d grasps(You may need to wait several minutes)
g.showSceneGrasp(sceneId = 4, camera = 'kinect', annId = 2, format = '6d')

在这里插入图片描述

2.5 使用 NMS on Grasps

每个物体的初始标签均为一个np.arry列表。

2.6 转换 Labels between rectangle format and 6d format

2.7 评价

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Albot-CV

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

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

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

打赏作者

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

抵扣说明:

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

余额充值