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, seed):
            self.world.set_params(sun_intensity=0.03)
            cube = (
                self.objects.cube()
                .set_location((1, 0, 0.5))
                .set_scale(0.5)
                .set_tags("cube")
            )
            sphere = (
                self.objects.sphere()
                .set_location((-1, 0, 1))
                .set_shading("smooth")
                .set_tags("sphere")
            )
            plane = self.objects.plane(size=1000)
            empty = self.objects.empty().set_location((0, 0, 1))
    
            cam = (
                self.camera
                .set_location((7, 7, 3))
                .point_at(empty)
            )
  4. Просмотрите сцену
    bash
    rv preview scene.py

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

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

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

    python
    import random 
    import rv
    
    class BasicScene(rv.Scene):
        def generate(self, seed):
            rng = random.Random(seed)          
            self.world.set_params(sun_intensity=0.03)
            cube = (
                self.objects.cube()
                .set_location((1, 0, 0.5))
                .set_scale(0.5)
                .set_tags("cube")
            )
            cube.rotate_around_axis(            
                rv.mathutils.Vector((0, 0, 1)), 
                rng.uniform(0, 360),            
            )                                   
            sphere = (
                self.objects.sphere()
                .set_location((-1, 0, 1))
                .set_shading("smooth")
                .set_tags("sphere")
            )
            plane = self.objects.plane(size=1000)
            empty = self.objects.empty().set_location((0, 0, 1))
    
            cam = (
                self.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.