Omniverse Replicator环境配置和使用说明

news2024/10/5 16:22:47

Omniverse Replicator使用说明

本教程将介绍Omniverse Replicator的环境配置和使用说明, 参加Sky Hackathon的同学可以参考本教程来合成训练数据集.

文章目录

  • Omniverse Replicator使用说明
    • 1. Omniverse环境配置
      • 1.a.安装Omniverse Launcher
        • 1.a.1.在下面的地址下载Omniverse Launcher
        • 1.a.2.安装Omniverse Launcher
        • 1.a.3.登录
      • 1.b 安装Omniverse CODE
    • 2. Omniverse Code介绍
    • 3.使用Omniverse Code/Replicator生成场景并合成图像数据集

1. Omniverse环境配置

NVIDIA Omniverse 可以在任何搭载了 RTX 的设备上运行。为了获得理想性能,我们建议使用显存不低于 8GB 的 GeForce RTX 3070 或 NVIDIA RTX A4000 显卡。

组成部分最低规格
支持的操作系统Windows 11/ Windows 10(64 位 版本 1909 及更高版本)
CPUIntel I7 /AMD Ryzen 2.5 GHz 或更高
CPU Core 核心数4 个或更多
RAM16Gb 或更多
存储500Gb SSD 或更多
GPU任何 RTX GPU
VRAM6Gb 或更多
最低 视频驱动版本单击 此处,查看新版驱动

Omniverse中的应用需要GPU和安装驱动, 如果您已安装则无需重复操作.

如果您未安装, 请参考:

  • Windows: https://blog.csdn.net/kunhe0512/article/details/124331221
  • Linux: https://blog.csdn.net/kunhe0512/article/details/125061911

您可能需要根据最新版本调整上面文章中的步骤

下面的步骤以Windows 10系统为例

1.a.安装Omniverse Launcher

1.a.1.在下面的地址下载Omniverse Launcher

https://www.nvidia.com/en-us/omniverse/download/

在这里插入图片描述

1.a.2.安装Omniverse Launcher

双击下载omniverse-launcher-win.exe, 按照要求安装.

1.a.3.登录

如果您没有账号, 请创建账号. 如果您已经有账号, 登录Omniverse Launcher

在这里插入图片描述

1.b 安装Omniverse CODE

在EXCHANGE中找到CODE, 点击并安装.

在这里插入图片描述

安装完之后, 在LIBRARY页面中选择CODE并加载

在这里插入图片描述

当出现以下页面, 意味着安装成功了

在这里插入图片描述

注意: 这里一定要等到RTX Loading字样消失在操作CODE, 否则可能会出现卡顿或者程序以外关闭

2. Omniverse Code介绍

Omniverse Code是我们生成图像数据集主要操作的工具, 我们使用的Replicator也是可以在里面操作的一个扩展库.

您可以在Omniverse Code里面输入准备好的代码, 然后生成您想创建的场景, 并通过Replicator合成训练数据集

下面是Omniverse Code的页面展示:

在这里插入图片描述

注意:在每次生成生成一个新的场景是, 需要点击左上角的File -> New -> Don’t Save. 连续更新代码, 然后点击Run(Ctrl + Enter)可能会出现程序意外关闭.

3.使用Omniverse Code/Replicator生成场景并合成图像数据集

  1. 打开Omniverse Code
  2. 在Script Editor里面输入以下代码:
# import replicator envirnoment 
import omni.replicator.core as rep

# setup random view range for camera: low point, high point
sequential_pos = [(-800, 220, -271),(800, 220,500)]

# position of look-at target
look_at_position = (-212, 78, 57)


# setup working layer 
with rep.new_layer():

# define 3d models: usd format file source link, class, initial position  
        WORKSHOP = 'http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/ArchVis/Industrial/Buildings/Warehouse/Warehouse01.usd'
        CONVEYOR = 'http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/DigitalTwin/Assets/Warehouse/Equipment/Conveyors/ConveyorBelt_A/ConveyorBelt_A23_PR_NVD_01.usd'
        BOX1     = 'http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/ArchVis/Industrial/Containers/Cardboard/Cardbox_A3.usd'
        BOX2     = 'http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/ArchVis/Industrial/Containers/Cardboard/Cardbox_B3.usd'
        BOX3     = 'http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/ArchVis/Industrial/Containers/Cardboard/Cardbox_C3.usd'
        BOX4     = 'http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/ArchVis/Industrial/Containers/Cardboard/Cardbox_D3.usd'
        workshop = rep.create.from_usd(WORKSHOP)
        conveyor1 = rep.create.from_usd(CONVEYOR)
        conveyor2 = rep.create.from_usd(CONVEYOR)
        box1 = rep.create.from_usd(BOX1,semantics=[('class', 'box')])
        box2 = rep.create.from_usd(BOX2,semantics=[('class', 'box')])
        box3 = rep.create.from_usd(BOX3,semantics=[('class', 'box')])
        box4 = rep.create.from_usd(BOX4,semantics=[('class', 'box')])
       
        with workshop:
            rep.modify.pose(
                position=(0,0,0),
                rotation=(0,-90,-90)
                )
        with conveyor1:
            rep.modify.pose(
                position=(-40,0,0),
                rotation=(0,-90,-90)
                )
        with conveyor2:
            rep.modify.pose(
                position=(-40,0,100),
                rotation=(-90,90,0)
                )        
                              
        with box1:
            rep.modify.pose(
                position=(-350,78,57),
                rotation=(0,-90,-90),
                scale=rep.distribution.uniform(1,1)
                )
        with box2:
            rep.modify.pose(
                position=(-100,78,57),
                rotation=(0,-90,-90),
                scale=rep.distribution.uniform(1,1)
                )   
        with box3:
            rep.modify.pose(
                position=(100,78,57),
                rotation=(0,-90,-90),
                scale=rep.distribution.uniform(1,1)
                )  
        with box4:
            rep.modify.pose(
                position=(200,78,57),
                rotation=(0,-90,-90),
                scale=rep.distribution.uniform(1,1)
                ) 

# define lighting function
        def sphere_lights(num):
               lights = rep.create.light(
                     light_type="Sphere",
                     temperature=rep.distribution.normal(3500, 500),
                     intensity=rep.distribution.normal(15000, 5000),
                     position=rep.distribution.uniform((-300, -300, -300), (300, 300, 300)),
                     scale=rep.distribution.uniform(50, 100),
                     count=num
               )
               return lights.node
        rep.randomizer.register(sphere_lights)

# define function to create random position range for target  
        def get_shapes():
            shapes = rep.get.prims(semantics=[('class', 'box')])
            with shapes:
                rep.modify.pose(
                    position=rep.distribution.uniform((0, -50, 0), (0, 50, 0)))
            return shapes.node
        rep.randomizer.register(get_shapes)

# Setup camera and attach it to render product
        camera = rep.create.camera(position=sequential_pos[0], look_at=look_at_position)
        render_product = rep.create.render_product(camera, resolution=(512, 512))

        with rep.trigger.on_frame(num_frames=100): #number of picture
               rep.randomizer.sphere_lights(4)    #number of lighting source 
               rep.randomizer.get_shapes()
               with camera:
                        rep.modify.pose(
                          position=rep.distribution.uniform(sequential_pos[0],sequential_pos[1]), look_at=look_at_position)

# Initialize and attach writer for Kitti format data 
        writer = rep.WriterRegistry.get("KittiWriter")
        writer.initialize(
                 output_dir="D:/sdg", 
                 bbox_height_threshold=25,
                 fully_visible_threshold=0.95,
                 omit_semantic_type=True
               )
        writer.attach([render_product])
        rep.orchestrator.preview()

  1. 单击左下角的Run(Ctrl + Enter)按钮

  2. 选择上面的’Replicator -> Start’

  3. 在D:/sdg文件夹内查看生成的内容. 图片在Camera/rgb文件夹内, label把文件在Camera/object_detection文件夹内, 如下图所示
    在这里插入图片描述

  4. 完成上述步骤, 说明您已经可以成功使用Omniverse Replicator来合成数据

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

案例分享:ChatGPT写python脚本,轻松文本处理

大家好,我是可夫小子,关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加:keeepdance,备注:chatgpt,拉你进群。 在工作中,需要对数据进行筛选、分割和整理,当你接受到一个长长…

浅谈Android PMS解析APP信息流程

前言 前面我们了解了Zygote的启动流程,知道AMS、PMS都是由SystemServer进程启动的,我们都知道PMS主要负责App管理工作,这里我们简单从源码角度分析下PMS是如何解析APP解析的; 源码分析(API 30为例) 我们还是从PackageManagerSe…

SpringBoot缓存技术详解

文章目录 一、 缓存技术介绍1. 缓存技术简介2. JSR107核心接口3. JSR107 图示3. SpringBoot缓存抽象4. 缓存常用注解和接口 一、 缓存技术实战1. Cacheable注解2. 缓存的工作原理4. Cacheable注解的工作流程 一、 缓存技术介绍 1. 缓存技术简介 缓存技术主要分为两大类缓存可…

6 进程的环境

6.1 main函数 C程序总是从main函数开始执行。main函数的原型是: int main(int argc, char *argv[]) 6.2 进程终止 有五种方式使进程终止: (1)正常终止: (a)从main返回。 (b&…

Pycharm十种不为人所知的技巧,不得不知道

Pycharm是Python语言开发中的一个非常强大的IDE工具,其高度的定制能力、日常开发中常用的工具和各种快捷键等功能,都能帮助Pycharm用户提高开发效率。但是,Pycharm中的许多功能并不为人所知。因此,以下是十种Pycharm技巧&#xff…

【MCS-51】51单片机指令系统大全

指令是指挥微型计算机工作的的计算机命令,对于51单片机来说,其主要使用的指令有两种形式:机器语言指令和汇编语言指令。 机器语言指令是指使用二进制代码表示的指令; 汇编语言指令是指使用容易我们记忆的缩写符号表示的机器语言…

YOLO入门指南:理解YOLO原理及构建第一个目标检测模型

YOLO(You Only Look Once)是一种快速且准确的目标检测算法,可以在图像或视频中检测出多个对象的位置和类别。在本篇文章中,我们将介绍YOLO的基本原理,并使用TensorFlow构建第一个目标检测模型。 YOLO的基本原理 YOLO的…

linux 安装jdk、tomcat

文章目录 前言一、Linux上安装jdk1、jdk安装与配置过程2、linux查看jdk安装路径 二、Linux上安装tomcat1、tomcat安装与配置过程2、对外开放访问的端口、重启防火墙、查看日志 三、在window系统中通过浏览器访问 前言 先检察是否安装jdk java -jar ## 查看是否安装jdk java -…

K8S—Helm

一、Helm介绍 helm通过打包的方式,支持发布的版本管理和控制,很大程度上简化了Kubernetes应用的部署和管理。 Helm本质就是让k8s的应用管理(Deployment、Service等)可配置,能动态生成。通过动态生成K8S资源清单文件&a…

文笔润色-文本校对改写工具

文段改写软件 写作是一项对于很多人来说都需要频繁进行的活动,无论是工作中的商业写作还是学术写作,在完成优质内容的同时也需要付出大量的时间和精力进行语言润色和修改。然而,现在有了147ChatGPT改写润色软件,该软件可以全自动…

近期分享学习心得

1、数据类型 原始类型undefined null number string boolean symbol bigint 引用类型 对象 2、大厂为什么不允许赋值undifined? 必须let avoid 0;效果一样 void是关键字,后面跟表达式,无论跟啥最终制造undefined,但是习惯写0。…

动态规划设计

文章目录 动态规划设计一、什么是最长递增子序列?[300. 最长递增子序列](https://leetcode.cn/problems/longest-increasing-subsequence/)注意子序列和子串的区别: 二、动态规划解法2.1什么是数学归纳法?2.2最长递增子序列中数学归纳的实际应…

simulink电力系统仿真(1):电力系统库+(电力系统基础知识)

文章目录 基础知识仿真库搭建一个简单的电路 基础知识 ★三相交流电:三相电是三组幅值相等、频率相等、相位互相差120的交流电,由有三个绕组的三相发电机产生,是工业上常用的电源,可提供超过数千瓦或以上功率的电力。★电力系统暂…

看一看吧,面试真的卷......

大家好,最近有不少小伙伴在后台留言,今年面试实在是太卷了,不知道从何下手! 不论是跳槽涨薪,还是学习提升!先给自己定一个小目标,然后再朝着目标去努力就完事儿了! 为了帮大家节约…

美术培训学校学生作品管理平台

本系统主要是为了美术培训学校和学生使用的,系统分为了前台和后台两部分,前台部分主要是展示美术培训学校的信息和让学生查看自己的课程信息服务的,后台主要是管理人员对系统进行管理使用的 前台部分功能 1. 网站首页,首页部分…

jar的反编译为java文件

目录 1、cfr工具下载 2、反编译指令 3、反编译说明 1、cfr工具下载 反编译插件工具比较多,但是我认为最后用的工具为cfr,基本能解决所有jar包,下载地址为:cfr官网 点击图中位置下载即可 2、反编译指令 来到你下载完成cfr目录下&…

蓝牙耳机哪个牌子好?数码粉总结学生平价蓝牙耳机推荐

蓝牙耳机这几年发展飞速,涌现了很多品牌和产品,越来越多的用户选择放弃有线耳机使用蓝牙耳机,学生们也不例外。前段时间看到网上很多学生在讨论蓝牙耳机哪个牌子好,我整理了五款口碑最好的学生平价蓝牙耳机推荐清单: 1…

cesium坐标系转换:经纬度地理坐标系 弧度地理坐标系 笛卡尔坐标 屏幕坐标之间的相互转换

参考了网上资料 核心就是 cesium 计算的地理数据用弧度坐标系表示(很多公式计算出来的是弧度结果),我们采集的数据是经纬度表示的(即我们正常的经纬度),围绕着cesium球体展示的用笛卡尔坐标系计算的其方位…

5月新刊 | MDPI版面费将全面上涨,还有哪些期刊可投?(新增多领域高性价比新刊, 含CCF-B/SSCI/EI)~

近期MDPI官方发布消息称,MDPI出版社旗下期刊的OA论文处理费 (APC), 价格将在2023年6月底上涨,超过90种OA期刊的APC涨幅在200-1200瑞士法郎 (折合人民币1560元-9300元)。 在MDPI出版的OA期刊中,有5种期刊处于2022年中国通迅作者发表OA论文数量…

junit如何在多模块项目中使用

文章目录 前言一、最简单的单元测试二、springboot多模块测试单元1.问题2.解决 总结 前言 相信后端的小伙伴对于junit测试应该不陌生,当我们写好了一些功能之后,由于不太放心是否会出现问题,我们会选择自测; 第一种 通过类似postman之类的,直接走接口测试第二种 由于构造数据…