ShapeNet简介和下载、binvox文件python示例

现在所有草图三维重建的顶会paper都用到了shapenet(其实也就不到十篇),有必要学习一下。

目录

ShapeNet简介

binvox文件格式

Python读取示例

下载


ShapeNet简介

ShapeNet是一个由对象的三维CAD模型表示的丰富注释的,大规模的形状存储库。ShapeNet包含来自多种语义类别的3D模型,并按照WordNet分类法组织它们。它是一组数据集,为每个3D模型提供许多语义标注,如一致的刚性对准、零件和双边对称平面、物理尺寸、关键字以及其他计划的标注。注释通过基于web的公共接口提供,以支持对象属性的数据可视化,促进数据驱动的几何分析,并为计算机图形学和视觉研究提供大规模定量基准。ShapeNet已经索引了超过300万个模型,其中22万个模型被分为3135个类别(WordNet synsets)。

ShapeNetCore

ShapeNetCore是完整ShapeNet数据集的子集,具有单个干净的3D模型以及手动验证的类别和路线注释。它涵盖约55,300个独特的3D模型和55个常见对象类别。ShapeNetCore涵盖了流行的计算机视觉3D基准数据集PASCAL 3D +的12个对象类别。

ShapeNetSem

ShapeNetSem是一个较小的,注释更密集的子集,由分布在270个类别中的12,000个模型组成。除了手动验证的类别标签和一致的对齐方式之外,这些模型还带有实际尺寸,类别级别的材料成分估计以及总体积和总重量的注释。

binvox文件格式

binvox可读取3D模型文件,将其栅格化为二进制3D体素网格,然后写入生成的体素文件,以binvox格式存储3D点云格式文件,节约存储空间

在线读取器:https://raahii.github.io/simple_voxel_viewer/index.html

ShapeNet简介和下载、binvox文件python示例_第1张图片

离线读取软件下载地址:https://www.patrickmin.com/viewvox/win/viewvox.exe?rnd=1612535001696693

Python读取示例

import numpy as np


class Voxels(object):
    def __init__(self, data, dims, translate, scale, axis_order):
        self.data = data
        self.dims = dims
        self.translate = translate
        self.scale = scale
        # axis不是xyz坐标系的时候触发异常
        assert (axis_order in ('xzy', 'xyz'))
        self.axis_order = axis_order


def read_as_3d_array(fp, fix_coords=True):
    dims, translate, scale = read_header(fp)
    raw_data = np.frombuffer(fp.read(), dtype=np.uint8)
    # if just using reshape() on the raw data:
    # indexing the array as array[i,j,k], the indices map into the
    # coords as:
    # i -> x
    # j -> z
    # k -> y
    # if fix_coords is true, then data is rearranged so that
    # mapping is
    # i -> x
    # j -> y
    # k -> z
    values, counts = raw_data[::2], raw_data[1::2]
    data = np.repeat(values, counts).astype(np.bool)
    data = data.reshape(dims)
    if fix_coords:
        # xzy to xyz TODO the right thing
        data = np.transpose(data, (0, 2, 1))
        axis_order = 'xyz'
    else:
        axis_order = 'xzy'
    return Voxels(data, dims, translate, scale, axis_order)


def read_header(fp):
    # 读取binvox头文件
    line = fp.readline().strip()
    if not line.startswith(b'#binvox'):
        raise IOError('Not a binvox file')
    dims = list(map(int, fp.readline().strip().split(b' ')[1:]))
    translate = list(map(float, fp.readline().strip().split(b' ')[1:]))
    scale = list(map(float, fp.readline().strip().split(b' ')[1:]))[0]
    line = fp.readline()
    return dims, translate, scale


if __name__ == '__main__':
    path = 'model.binvox'
    with open(path, 'rb') as f:
        model = read_as_3d_array(f)
        # 尺寸(长宽高),转化矩阵,放缩系数
        print(model.dims, model.translate, model.scale)
        print(model.data)

下载

官网的网速真的是一言难尽,5kb/s的速度我下载了一个星期。放到网盘自取吧。

https://pan.baidu.com/s/1-307NLJENO8MHgkcGRzm3Q 提取码: c1gv

https://pan.baidu.com/s/1FF4asm_pbw4jK8JOYksbxQ 提取码: cjx8

官网地址:https://www.shapenet.org/

 

你可能感兴趣的:(三维重建)