Skip to content

Rapid Vision

Rapid Vision (rv) это современный инструмент для генерации размеченных синтетических датасетов.

Преимущества

  1. Фотореалистичные результаты благодаря движку рендеринга Cycles
  2. Простой и понятный Python API
  3. Автоматическое создание сегментационной разметки
  4. Полностью открытый исходный код
  5. Бесшовная интеграция с продвинутым процедурным инструментарием Blender

Быстрый старт

  1. Установите зависимости

    Установите Go и Blender.

  2. Установите утилиту rv
    bash
    go install github.com/Rapid-Vision/rv@latest
  3. Создайте скрипт сцены
    python
    import rv
    
    class BasicScene(rv.Scene):
        def generate(self):
            self.get_world().set_params(sun_intensity=0.03)
            cube = (
                self.create_cube()
                .set_location((1, 0, 0.5))
                .set_scale(0.5)
                .set_tags("cube")
            )
            sphere = (
                self.create_sphere()
                .set_location((-1, 0, 1))
                .set_shading("smooth")
                .set_tags("sphere")
            )
            plane = self.create_plane(size=1000)
            empty = self.create_empty().set_location((0, 0, 1))
    
            cam = (
                self.get_camera()
                .set_location((7, 7, 3))
                .point_at(empty)
            )
  4. Просмотрите сцену
    bash
    rv preview scene.py

    Пока не закрывайте окно предпросмотра.

  5. Сделайте сцену случайной

    Посмотрите, как предпросмотр меняется при каждом сохранении файла.

    python
    import rv
    from random import uniform 
    
    class BasicScene(rv.Scene):
        def generate(self):
            self.get_world().set_params(sun_intensity=0.03)
            cube = (
                self.create_cube()
                .set_location((1, 0, 0.5))
                .set_scale(0.5)
                .set_tags("cube")
            )
            cube.rotate_around_axis(            
                rv.mathutils.Vector((0, 0, 1)), 
                uniform(0, 360),                
            )                                   
            sphere = (
                self.create_sphere()
                .set_location((-1, 0, 1))
                .set_shading("smooth")
                .set_tags("sphere")
            )
            plane = self.create_plane(size=1000)
            empty = self.create_empty().set_location((0, 0, 1))
    
            cam = (
                self.get_camera()
                .set_location((7, 7, 3))
                .point_at(empty)
            )
  6. Отрендерите итоговый результат
    bash
    rv render scene.py
  7. Посмотрите на получившийся датасет

    Получившийся датасет имеет следующую структуру каталогов:

    text
    out/
    └── 1/
        └── 424702d4-b28e-4082-b5e5-5499f9a49065/
            ├── _meta.json
            ├── Image.png
            ├── PreviewIndexOB.png
            ├── IndexOB.png
            ├── Alpha.png
            └── Noisy Image.png
    ИмяОписание
    outКорневой каталог, содержащий результаты всех запусков
    1Каталог с результатами одного запуска рендеринга. Номер увеличивается последовательно
    424702d4-b28e-4082-b5e5-5499f9a49065Каталог с итоговым изображением, разметкой и дополнительными проходами рендера
    _meta.jsonИнформация о разметке
    Image0001.pngИтоговое изображение
    PreviewIndexOB0001.pngПревью сегментационных масок
    IndexOB0001.pngСегментационные маски. Это 16-битное черно-белое изображение, где каждый пиксель соответствует полю index соответствующего объекта в файле _meta.json.
    ОстальноеДругие проходы рендеринга, которые могут быть полезны для задач компьютерного зрения и могут быть дополнительно включены методом Scene.set_passes.
  8. Используйте rv для генерации вашего следующего синтетического датасета

    Подробнее смотрите в обзоре возможностей и API reference.