运行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 rep

with 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 writer
    writer = 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 动画,展示了如何获取源代码。

从终端转到该文件夹,您会发现其中有适用于 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 应用程序。 样本本身的生成应该很快。

注意

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

你可能感兴趣的:(Omniverse,Replicator开发文档,python,计算机视觉,人工智能,NVIDIA,Omniverse)