IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 使用ObjectDatasetTools制作位姿估计数据集 -> 正文阅读

[人工智能]使用ObjectDatasetTools制作位姿估计数据集


前言

本文记载了使用ObjectDatasetTools制作数据集的过程,包括环境配置、模型扫描、制作标签等过程。


ObjectDatasetTools 可以为各种深度学习项目准备训练和测试数据,例如6D对象位姿估计项目单张拍摄,以及许多对象检测(例如,更快的rcnn)和实例分割(例如,掩码rcnn)项目。基于此存储库包含纯 python 脚本,首先使用 RGB-D 摄像机拍摄对象序列,其次通过 aruco 标记和 ICP 注册实现原始 3D 模型,然后在网格处理软件中进行处理和噪声消除,最后自动生成所需的标签。


准备工作

  • Ubuntu 18.04
  • ROS Melodic
  • python3
  • Intel Realsense D455

一、环境配置

1.安装RealsenseD435 驱动

Step1. 安装相关依赖

#打开终端,分别输入以下命令完成相关依赖的安装:

sudo apt-get install git libssl-dev libusb-1.0-0-dev pkg-config libgtk-3-dev
sudo apt-get install libglfw3-dev

Step2. 进行编译与安装

git clone https://github.com/IntelRealSense/librealsense.git
cd librealsense
mkdir build && cd build
cmake ../ -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=true
sudo make uninstall
make clean && make -j8
sudo make install

Step3. 测试

realsense-viewer

在这里插入图片描述

2.配置ObjectDatasetTools虚拟环境

Step 1. 创建虚拟环境

# 新建虚拟环境
conda create -n ODT python=3.6
#激活虚拟环境
conda create ODT
# 升级pip
sudo apt-get update
sudo apt-get upgrade

Step 2. 克隆项目

# 克隆项目
git clone https://github.com/F2Wang/ObjectDatasetTools
# 进入项目
cd ObjectDatasetTools

Step 3. 安装相关依赖

#安装依赖
sudo apt-get install build-essential cmake git pkg-config libssl-dev libgl1-mesa-glx

Step 4. 安装相关库

pip install numpy Cython==0.19 pypng scipy scikit-learn open3d==0.9.0 scikit-image tqdm pykdtree opencv-python==3.3.0.10 opencv-contrib-python==3.3.0.10  trimesh==2.38.24 pyrealsense2 shapely

注:个别缺少的库可以在虚拟环境是用pip install xxx安装

二、制作数据集

1.准备工作

打印arucomarkers文件夹内的二维码 1-13,并贴在目标周围,确保二维码平整,无重复,间距合理。

2.记录对象序列

方法1:使用实感摄像机

项目提供录制RGB和Depth图的脚本

# 在项目文件夹内打开终端,并激活虚拟环境
conda activate ODT
# 使用相机保存对齐的RGB和Depth,并保存在"LINEMOD/objectName"的文件夹下
python record2.py LINEMOD/objectName

注:

  • 脚本在倒计时 5 后录制 40 秒,录制间隔与时长可在脚本中更改,录制过程中可按"q"退出;
  • 录制时需要保证相机平稳的移动,保证相机的视野中至少出现2-3个标记码;
  • LINEMOD文件夹名称更改将会导致错误;
  • 彩色图像、与彩色图像对齐的深度图以及相机参数将自动保存在序列的目录下。

方法2:使用其他相机

若使用其他相机,需保证获取深度图像与彩色图像对齐,并将彩色图像(.jpg)放在"JPEGImages"的文件夹中,并将深度图像放在"depth"文件夹中。

└──LINEMOD
???└──objectName
???│???├── JPEGImages
???│???│???└── 0.jpg、1.jpg…
???│???├── depth
???│???│???└── 0.jpg、1.jpg…
???│???├── intrinsics.json

在序列目录下创建一个文件“intrinsics.json”,然后按如下格式手动输入相机参数:

{"fx": 614.4744262695312, "fy": 614.4745483398438, "height": 480, "width": 640, "ppy": 233.29214477539062, "ppx": 308.8282470703125, "ID": "620201000292"}

其中 fx,fy,cx,cy是必须参数,且fx = fy是图像的宽度,cx、cy是图像的中心。对于640*480分辨率的图像,fx=fy=640,cx=320、cy=240。

3.获取帧变换

针对第一帧以指定的时间间隔(可以在 config/registrationParameters 中更改间隔)对第一帧计算帧的变换,将变换(4*4 同构变换)保存为 numpy 数组 (.npy),经历此步骤后文件夹内会增加一个“transforms.npy”文件。

python compute_gt_poses.py LINEMOD/objectName

在这里插入图片描述

4.目标物体三维重构

方法1: register_scene

在终端输入命令,原始的“registeredScene.ply ”将保存在指定目录下(例如,LINEMOD/objectNamer)。

python register_scene.py LINEMOD/objectName

在这里插入图片描述
“ registerScene.ply” 是场景的注册点云,包括桌面、标记和扫描过程中暴露的任何其他对象,并具有一定程度的噪声消除。 生成的网格看起来如下图,需要在步骤 5 中手动处理。
在这里插入图片描述

方法2: register_segmented

默认情况下,register_segmented尝试删除所有不需要的背景并执行表面重建,将注册的点云转换为三角形网格。如果MESHING设置为false,脚本将仅尝试移除背景并使用平坦表面自动完成看不见的底部(如果FILLBOTTOM设置为 true),需要执行步骤5。

python register_segmented.py LINEMOD/objectName

在这里插入图片描述

register_segmented使用一些特殊的方法来分割背景,可能需要调整“MAX_RADIUS”参数,默认值为0.2m。随着目标到运行register_segmented的结果如下所示:
在这里插入图片描述

5.手动处理点云数据

若对运行register_segmented的结果感到满意,则可以跳过步骤 5,反之,需要使用Meshlab处理已注册的点云:

  • 删除不感兴趣的背景,
  • 执行表面重建并完成缺失的一侧,反之亦然,
  • 处理重建的网格(您可能需要切断零件并重新完成缺失的一侧),
  • 确保处理后的网格没有任何孤立的噪声。

Step 1. 安装Meshlab

### Step 2. 导入 registerScene.ply

在这里插入图片描述

Step 3. 删除不感兴趣的背景:

点击1选中需要去除的点云,并按2删除

确保处理后的网格没有任何孤立噪音

Step 4. 曲面重建

计算每个点的法线,在弹出的框内输入100,点击Apply,运行完成,点击Close

曲面重建,不用管第一个文本框,第2个文本框里面,调为1.0。点击Apply,运行之后点击Close,关闭这个对话框。

查看的模型的效果,并且右边栏中的Faces项的值已经有数值了:

Step 6. 保存Mesh

打开查看

6. 生成掩码和标签文件

当为自定义对象完成步骤1-5后,运行如下代码:

python create_label_files.py all
或者(推荐)
python create_label_files.py LINEMOD/objectName

在这里插入图片描述

同时创建一个名为“container3.ply”的新网格,其AABB以原点为圆心,并且与OBB的尺寸相同。

同时还生成图像掩码(保存在mask文件下),关于新网格的4*4同质变换(保存在transforms里),标签文件保存在labels文件。

三、检测创建数据集

1.检查创建的 3D 边界框和掩码的正确性:

python inspectMasks.py LINEMOD/container3

在这里插入图片描述

2.创建训练和测试映像

python makeTrainTestfiles.py

在这里插入图片描述

3.获得物体比例(最大垂直距离)

python getmeshscale.py

在这里插入图片描述

4.为对象检测项目创建边界框标签

python get_BBs.py
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:28:33  更:2022-03-08 22:30:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 16:37:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码