当前位置: 首页 > news >正文

用3D扫描生成合成数据

合成数据集(Synthetic Datasets)正在成为计算机视觉模型训练的标准部分。 虽然新工具使合成数据集变得更容易访问,但除了标准机器学习过程之外,许多工具还需要对 3D 建模有基本的了解。 最简单的捷径是从现实世界中获取现有对象并将其导入 3D 场景中。

在这里插入图片描述

推荐:用 NSDT编辑器 快速搭建可编程3D场景

在本文中,我们将介绍如何对对象进行 3D 扫描以获取合成数据。 这是一个工作流程,可将你从真实对象带到 Blender 内的基本实现。 然后,使用合成数据工具包 zpy,你可以创建任意大小的合成数据集所需的标签、分段和随机变体。

要复制此实验,你需要使用 Blender、Meshroom、zpy 和手机摄像头。

1、3D 扫描物体

如果我们遵循一些最佳实践,拍摄 3D 扫描照片可能会非常简单。 尝试消除深阴影并保持照明一致。 为此,我们使用了一个非常简单的台灯。 尽可能保持整个物体的焦点。
在这里插入图片描述

使用手机摄像头,我们希望从各个可能的角度覆盖整个物体。 这有助于运动算法的结构找出物体的形状并将其重建为点云。

需要注意的是:一旦开始拍照,请勿移动物体或改变灯光,否则你将不得不重新开始。 即使是在背景中移动的物体(如上图所示的好奇宠物)也可能会导致 3D 重建出现问题。

我们在大约 5 分钟的时间内拍了 54 张照片。 一方面,不存在“图片太多”这样的问题,但试图获得“全面覆盖”却会让自己发疯。对于一个小物体,你不需要数千张图片,所以当遇到问题时就停下来。 你认为你已经足够了。

拍摄照片后,上传到 Meshroom 非常简单 - 只需拖放到图像文件夹中即可。 完成后,点击“开始”,Meshroom 会完成剩下的工作。 在 Meshroom 工作时密切关注它可能是件好事,否则就不清楚是否发生了任何事情。 Meshroom 有一个非常精彩的简短视频,介绍如何使用他们的产品,因此我们不会深入了解 Meshroom 的工作原理,但真正需要的只是几次点击和一些时间来输出模型。

在这里插入图片描述

完成模型后,我们可以检查输出中列出的 Meshroom 缓存。

2、导入Blender

接下来我们将导入并清理 Meshroom 输出。 打开 Blender 并单击“文件”,然后单击“导入”。 选择 OBJ,然后导航到 Meshroom Cache 以选择我们的纹理网格。 结果通常是模型未正确旋转或缩放。
在这里插入图片描述

我们可以使用屏幕左侧提供的简单工具来解决此问题,移动、旋转和缩放按钮是图中从上到下的三个按钮。
在这里插入图片描述

Blender 是一个非常复杂的软件包,拥有庞大的社区,因此如果你有更多问题并想深入研究 3D 动画,Youtube 上有大量教程。

现在,我们要让模型直立并调整尺寸。 我们可以通过点击最右侧的圆形按钮切换到纹理版本。 如果你的模型看起来很暗,请尝试添加灯光来调整场景的亮度。

在这里插入图片描述

即使没有任何编辑,我们已经得到了很好的结果!
在这里插入图片描述

但正如你所看到的,我们在网格中捕获了许多周围区域。 如果我们想创建机器学习数据集,我们需要将对象与背景隔离。

为了获得这种隔离,我们可以通过单击对象来选择对象,点击选项卡按钮,然后单击并拖动以框选我们要删除的区域。
在这里插入图片描述

点击删除按钮并选择“顶点”,然后再次点击选项卡,现在我们有了一个非常好的 3D 扫描模型可以在 Blender 中使用。

在这里插入图片描述

在我们开始数据集创建之前,需要进行更多的清理工作。 原点应该以我们的几何体为中心,以便我们获得一致的旋转和缩放。 通过选择“对象”选项卡,选择“选择原点”,然后选择“原点到几何体”来执行此操作。
在这里插入图片描述

你现在已经获得了现实世界对象的 3D 模型。 围绕它创建一个场景可能需要做更多的工作,但是这是否值得花费时间和精力完全取决于你的用例以及你希望将场景发展到什么程度。

3、生成综合数据

3D 模型完成后,你就可以开始使用 zpy 了。 作为一个为 Blender 添加功能的开源工具包,它允许我们创建各种各样的图像,这些图像构成了用于机器学习目的的数据集。 你可以选择为 3D 模型实现随机背景、随机相机角度、随机照明,甚至引入其他对象以增加数据集的复杂性。

开始使用 zpy(可在 GitHub 上获取)的最简单方法是按照这个简短视频教程系列中概述的步骤进行操作。

希望这能让你对如何 3D 扫描物体并开始使用合成数据有一个坚实的了解。


原文链接:用3D扫描生成合成数据 — BimAnt

相关文章:

用3D扫描生成合成数据

合成数据集(Synthetic Datasets)正在成为计算机视觉模型训练的标准部分。 虽然新工具使合成数据集变得更容易访问,但除了标准机器学习过程之外,许多工具还需要对 3D 建模有基本的了解。 最简单的捷径是从现实世界中获取现有对象并…...

pip安装依赖报错

执行命令时 pip install --upgrade pip 报错: pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。pip install --upgrade pip~~~ Category…...

规范的项目流程图怎么写

编写规范的项目流程图可以遵循以下步骤: 1.明确项目目标:首先,明确项目的目标以及需要实现的结果。这有助于确定项目的范围和要求。 2.识别项目任务:识别和列出所有的任务,这可以包括获得资源、实施动作、收集信息等…...

模型部署笔记--Pytorch-FX量化

目录 1--Pytorch-FX量化 2--校准模型 3--代码实例 3-1--主函数 3-2--prepare_dataloader函数 3-3--训练和测试函数 1--Pytorch-FX量化 Pytorch在torch.quantization.quantize_fx中提供了两个API,即prepare_fx和convert_fx。 prepare_fx的作用是准备量化&#…...

解决XXLJOB重复执行问题--Redis加锁+注解+AOP

基于Redis加锁注解AOP解决JOB重复执行问题 现象解决方案自定义注解定义AOP策略redis 加锁实践 现象 线上xxljob有时候会遇到同一个任务在调度的时候重复执行,如下图: 线上JOB服务运行了2个实例,有时候会重复调度到同一个实例,有…...

云安全(1)--初识容器逃逸之特权容器逃逸

文章目录 前言privileged,特权容器逃逸环境配置实际利用实际环境利用计划任务/var/spool/cron/crontabs/ 适用于ubuntu debain/var/spool/cron 适用于centos ld.so.preloadssh 前言 在10.15号的上海中华武数杯的渗透赛里做到了一个k8s的题目,这应该是我第一次在比赛…...

二阶系统时域响应

二阶系统微分方程 二阶系统传递函数 二阶系统单位阶跃响应 过阻尼系统 临界阻尼系统 欠阻尼系统 无阻尼系统 二阶系统阶跃响应仿真 在Matlab中进行仿真,设置不同阻尼比2、1、0.5和0,可以得到结论: 阻尼比越小,系统响应速度越快&…...

mstsc改端口为33389

windows 远程默认端口3389不太安全,改成33389防下小人 把下面的2个文本存在后缀.reg的文件,双击导入注册表,"PortNumber"dword:0000826d 这个就是33389对应的端口号的16进制值,要想自己改成其它的换下值即可 Windows …...

经典算法试题(二)

文章目录 一、岁数1、题目2、思路讲解3、代码实现4、结果 二、打碎的鸡蛋1、题目2、思路讲解3、代码实现4、结果 三、分糖1、题目2、思路讲解3、代码实现4、结果 四、兔子产子1、题目2、思路讲解3、代码实现4、结果 五、矩阵问题1、题目2、思路讲解3、代码实现4、结果 六、谁是…...

Linux——生产者消费者模型

目录 一.为何要使用生产者消费者模型 二.生产者消费者模型优点 三.基于BlockingQueue的生产者消费者模型 1.BlockingQueue——阻塞队列 2.实现代码 四.POSIX信号量 五.基于环形队列的生产消费模型 一.为何要使用生产者消费者模型 生产者消费者模式就是通过一个容器来解决生…...

Oracle缓存表

Oracle缓存表(db_buffer_pool)由三部分组成: buffer_pool_defualt buffer_pool_keep buffer_pool_recycle 如果要把表钉死在内存中,也就是把表钉在keep区。相关的命令为: alter table 表名 storage(buffer_pool k…...

智能变电站自动化系统的应用与产品选型

摘要:现如今,智能变电站发展已经成为了电力系统发展过程中的内容,如何提高智能变电站的运行效率也成为电力系统发展的一个重要目标,为了能够更好地促进电力系统安全稳定运行,本文则就智能变电站自动化系统的实现进行了…...

reactnative 底部tab页面@react-navigation/bottom-tabs

使用react-navigation/native做的页面导航和tab‘ 官网:https://reactnavigation.org/docs/getting-started 效果图 安装 npm install react-navigation/nativenpm install react-navigation/bottom-tabs封装tabbar.js import { View, StyleSheet, Image } from …...

运维中心—监控大盘

一、监控大盘内容分类 1、告警 2、业务趋势 3、异常码 4、主机 5、服务状态 6、系统账单 二、API分类 【基础数据】 1、分组查询各自子系统 2、子系统查询名下各个微服务 【主机】 根据分组查询主机信息,按照子系统分组,按照CPU和内存排序 步骤&#xf…...

Node.js的安装

直接在浏览器中搜索Node.js即可 打开下载好的文件 验证是否安装成功 在cmd中输入 node -v,若结果为版本号那就是成功的 环境配置 配置全局模块所在的路径缓存cache的路径 在安装目录中新建两个文件夹,文件夹名为:node_cache和node_global 输…...

vsCode git 修改、清空、重置、保存账号名密码

1、保存账号名密码,之后拉取代码都不用重新输入: git config --global credential.helper store 2、查看git用户名: git config user.name 3、清空所有的用户名和密码: git config --system --unset credential.helper 4、清…...

Docker 安装oracle12c容器并创建新用户

Docker 安装oracle12c容器并创建新用户 下载镜像 docker pull truevoly/oracle-12c启动镜像 8080和22端口没有映射出来,有需要自己 docker run -d -p 8123:1521 -restartalways --privilegedtrue -v /data/docker/Oracle12c_sichuan:/u01/app/oracle/ --name oracle…...

LabVIEW中管理大型数据

LabVIEW中管理大数据 LabVIEW的最大优势之一是自动内存管理。这种内存管理允许用户轻松创建字符串、数组和集群,而无需C/C用户经常担心。但是,这种内存管理设计为绝对安全,因此数据被非常频繁地复制。这通常不会造成任何问题,但是…...

dirsearch网站目录暴力破解

介绍: dirsearch是一个基于python3的命令行工具,常用于暴力扫描页面结构,包括网页中的目录和文件。相比其他扫描工具disearch的特点是: 支持HTTP代理多线程支持多种形式的网页(asp,php)生成报告&#xff0…...

【数据结构】线性表(三)循环链表的各种操作(创建、插入、查找、删除、修改、遍历打印、释放内存空间)

目录 线性表的定义及其基本操作(顺序表插入、删除、查找、修改) 四、线性表的链接存储结构 1. 单链表 2. 循环链表 a. 循环链表节点结构体 b. 创建新节点 c. 在循环链表末尾插入节点 d. 删除循环链表中指定值的节点 e. 在循环链表中查找指定值的…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解

进来是需要留言的&#xff0c;先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码&#xff0c;输入的<>当成字符串处理回显到页面中&#xff0c;看来只是把用户输…...