bpycv 项目介绍
项目概述
bpycv 是一个专门为 Blender 设计的计算机视觉和深度学习工具集,旨在帮助用户进行图像渲染和相关注释数据的生成。通过该项目,用户可以轻松地制作语义分割、实例分割以及全景分割的注释数据,同时支持生成 6DoF 姿态和深度图的真实数据。
功能特性
bpycv 提供了一系列强大的功能,使得图像处理和数据集构建变得更加简单和高效。以下是它的一些主要功能:
- 渲染注释:支持语义分割、实例分割和全景分割。
- 生成 6DoF 姿态:提供物体在空间中六个自由度位置的真实数据。
- 渲染深度数据:可以生成图像的深度信息。
- 预定义的领域随机化:包括灯光和背景的变化,以及从形状网(ShapeNet)引入的干扰物(例如:花瓶、画作、托盘等)。
- 容易上手和演示:提供便捷的安装流程及多种示例。
- 支持 Docker:用户可以通过 Docker 环境快速进行实验。
- 代码库:提供构建合成数据集的 Python 代码基础。
- 格式转换:可以将数据转换为 Cityscapes 注释格式。
- 简化开发和调试:无需复杂的打包,直接利用 Blender 的原生 API。
bpycv 项目曾在 2020 年 IROS 的开放云机器人桌面组织挑战赛中获得第二名的优异成绩。
安装流程
bpycv 支持 Blender 2.9 及以上版本的使用。用户可以按照以下步骤安装:
-
从 Blender 官网下载并安装 Blender。
-
在命令行中进入 Blender 目录,运行安装脚本:
./blender -b --python-expr "from subprocess import sys,call;call([sys.executable,'-m','ensurepip'])" ./blender -b --python-expr "from subprocess import sys,call;call([sys.executable]+'-m pip install -U pip setuptools wheel'.split())" ./blender -b --python-expr "from subprocess import sys,call;call([sys.executable]+'-m pip install -U bpycv'.split())"
示例演示
实例分割与深度演示
用户可以通过在 Blender 的脚本编辑器中运行以下 Python 代码,快速体验实例分割与深度数据生成:
import cv2
import bpy
import bpycv
import random
import numpy as np
# 删除所有 MESH 对象
[bpy.data.objects.remove(obj) for obj in bpy.data.objects if obj.type == "MESH"]
for index in range(1, 20):
location = [random.uniform(-2, 2) for _ in range(3)]
if index % 2:
bpy.ops.mesh.primitive_cube_add(size=0.5, location=location)
categories_id = 1
else:
bpy.ops.mesh.primitive_uv_sphere_add(radius=0.5, location=location)
categories_id = 2
obj = bpy.context.active_object
obj["inst_id"] = categories_id * 1000 + index
result = bpycv.render_data()
cv2.imwrite("demo-rgb.jpg", result["image"][..., ::-1])
cv2.imwrite("demo-inst.png", np.uint16(result["inst"]))
depth_in_mm = result["depth"] * 1000
cv2.imwrite("demo-depth.png", np.uint16(depth_in_mm))
cv2.imwrite("demo-vis(inst_rgb_depth).jpg", result.vis()[..., ::-1])
通过这个演示,用户可以快速生成并查看三维物体的 RGB 图像、实例分割图以及深度图。
使用建议
- 使用 Blender 打开
.obj
文件可能会有兼容性问题,可以使用meshlabserver
进行格式转换以确保文件正确导入。
通过 bpycv,用户不仅可以轻松进行图像渲染与注释,还可以高效地构建学习数据集,支持多样化的应用场景。欢迎对项目提出建议和进行贡献。