> 文章列表 > 运行Omniverse Replicator Headlessly

运行Omniverse Replicator Headlessly

运行Omniverse Replicator Headlessly

运行Replicator Headlessly

学习目标

本教程的目的是向您展示如何不费吹灰之力地使用 Replicator。 Headless 在这种情况下意味着计算设备没有显示器或外围设备,例如键盘和鼠标。 为了做到这一点,我们将对 Replicator 的核心功能 - “Hello World”中解释的脚本进行轻微修改,以使其工作。 鼓励首先阅读该教程以了解 Replicator 的基础知识。

修改 Hello World 脚本以终端形式运行

运行需要两个主要修改。 第一个是添加额外的光。 当使用头部运行时,默认情况下,Omniverse 应用程序会启动顶灯。 终端形式跑时,需要加一盏灯。 对于此示例,选择了球形灯。 但是,您可以选择不同类型的灯。

sphere_light = rep.create.light(light_type="Sphere",temperature=rep.distribution.normal(6500, 500),intensity=rep.distribution.normal(35000, 5000),position=rep.distribution.uniform((-300, -300, -300), (300, 300, 300)),scale=rep.distribution.uniform(50, 100),count=2
)

第二个也是最重要的变化是在脚本末尾添加 rep.orchestrator.run() 。 正如介绍中提到的,在后台复制器制作一个 omnigraph,然后您需要告诉 Omniverse 执行该图。 这将由 rep.orchestrator.run 完成。 没有它,脚本将不会运行 omnigraph 也不会产生输出。 可以复制并粘贴下面的完整脚本。 您可以将其作为 python 文件存储在计算机的任何位置。 为了本示例,将其称为 test.py 。

import omni.replicator.core as repwith rep.new_layer():camera = rep.create.camera(position=(0, 0, 1000))sphere_light = rep.create.light(light_type="Sphere",temperature=rep.distribution.normal(6500, 500),intensity=rep.distribution.normal(35000, 5000),position=rep.distribution.uniform((-300, -300, -300), (300, 300, 300)),scale=rep.distribution.uniform(50, 100),count=2)render_product = rep.create.render_product(camera, (1024, 1024))torus = rep.create.torus(semantics=[('class', 'torus')] , position=(0, -200 , 100))sphere = rep.create.sphere(semantics=[('class', 'sphere')], position=(0, 100, 100))cube = rep.create.cube(semantics=[('class', 'cube')],  position=(100, -200 , 100) )with rep.trigger.on_frame(num_frames=10):with rep.create.group([torus, sphere, cube]):rep.modify.pose(position=rep.distribution.uniform((-100, -100, -100), (200, 200, 200)),scale=rep.distribution.uniform(0.1, 2))# Initialize and attach writerwriter = rep.WriterRegistry.get("BasicWriter")writer.initialize( output_dir="_output", rgb=True,   bounding_box_2d_tight=True)writer.attach([render_product])rep.orchestrator.run()

终端形式运行 Replicator 脚本

现在您已准备好运行上面的 test.py 脚本。 我们需要安装 Omniverse Code 的文件夹的位置。在启动器的“LIBRARY”部分中,选择 Code App。 然后,单击显示三个水平线的代码选项菜单并选择“设置”。 现在应该显示安装路径。 下面是一张 gif 动画,展示了如何获取源代码。

运行Omniverse Replicator Headlessly

从终端转到该文件夹,您会发现其中有适用于 Linux 的 omni.code.sh 或适用于 Windows 的 omni.code.bat。 要从终端运行,您将使用以下命令:

.\\omni.code.bat --no-window --/omni/replicator/script=C:\\PATH\\TO\\test.py

请注意,在 Code 2022.3.0 及更早版本中,您需要在上述命令行中改用 .\\omni.code.replicator.bat

注意

如果您没有修改 output_dir,在 linux 中,数据将位于 HOME/_output 或您的 python 脚本所在的文件夹中。如果由于权限而出现任何错误,请修改脚本中的输出文件夹。

在一分钟左右运行该脚本后,您将获得带有注释的图像。 任何终端形式运行的示例都会有很长的初始启动时间,因为它在后台启动 Omniverse 应用程序。 样本本身的生成应该很快。

注意

已知问题:应用程序关闭有时可能会崩溃,但数据集的完整性不受影响。