最近有一个任务,对室内场景几何重建得到的模型,进行语义标注和模型替换。通过查找资料发现有两个开源工具和我的需求比较符合,这里简单介绍一下它们各自的功能,并对环境配置的流程进行梳理。
[01] SSTK简介
1)语义分割与标注
-
输入:输入数据的格式要求如下
-
语义预分割工具:针对.ply模型,ScanNet 分割器使用 Felzenswalb 和 Huttenlocher 的Graph Based Image Segmentation 算法在计算的网格法线上创建基于顶点的分割,生成.segs.json 文件。 -
数据准备:准备描述您的资产的元数据文件和列出您资产的索引文件。最简单的索引是一个 csv 文件,其中列出了您的资产 ID,以及您想要存储的任何资产信息。 -
官网数据测试: -
真实场景重建结果测试: -
输出:
-
json文件格式:
{
"params": {
"kThresh": "0.0001",
"segMinVerts": "20",
"minPoints": "750",
"maxPoints": "30000",
"thinThresh": "0.05",
"flatThresh": "0.001",
"minLength": "0.02",
"maxLength": "1"
},
"sceneId": "...",
"segIndices": [1,1,1,1,3,3,15,15,15,15],
}
{
"sceneId": "...",
"appId": "...",
"segGroups": [
{
"id": 0,
"objectId": 0,
"segments": [1,4,3],
"label": "couch"
},
],
"segmentsFile": "..."
}
2)模型替换
- 输入:
*.ply :模型重建结果;*.semseg.json :语义分割与标注结果; - 官网数据集测试:
- 问题:error not found,这个功能去用的话,目前还有一个问题是找不到模型库对应资源,待解决。。。
[02] STK环境配置
参考官网readme
-
Install node.js:命令如下,node -v 命令可查看node当前版本。nvm是node版本管理器,nvm ls 命令查看安装的所有node版本,nvm use v10.23.2 命令选择当前使用的node版本,注意node和npm的版本对应关系,若npm版本太高导致node不能使用需重装为对应版本。我使用的是node v10.23.2 + npm v6.14.10 。 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
source ~/.bashrc
nvm install v10.23.2
-
Build and run server:命令如下,成功以后即可访问http://localhost:8010 进行模型查看,默认的例子是一个沙发。 cd stk
./build.sh
cd server
./run.sh
-
Build client:命令如下,也可直接运行build.sh ,每次客户端文件变化时需重新build。
cd client - Type
npm install to install client dependencies - Run
npm run build to package the stk source files
- Use
NODE_ENV=dev npm run build to build source maps and have webpack watch for changes. - Use
NODE_ENV=prod npm run build to optimize (including minify) the JS assets. -
Running the server:命令如下,也可直接运行server/run.sh 启动服务。 cd server
npm install
npm start
-
Specifying Task Configuration:参考官网
- 修改任务配置文件
server/proj/scannet/tasks/segment_annotation/default.config.yml ,指向需要标注的资产。
- scansToAnnotate: filename of your file with list of scans that you people to annotate
- idPrefix: your asset source
- 用ln命令在
server/static/data 目录下创建指向metadata/data 文件夹下数据的链接。准备数据时,每个资产库结构如图,例如bf资产库首先有bf.csv 和 bf.json ,记得修改两个文件的路径位置,然后每个场景一个文件夹分别包括 .ply模型 和 .json预分割文件。
-
data base:安装mysql,安装solr,配置server/config/index.js 文件中solr的端口号和config.annDb参数,根据scripts/db 下的三个表在mysql数据库中建表。 -
start annotation:
- 准备好资产后访问
http://localhost:8010/scans/segment-annotator-single?condition=manual&userId=username&taskMode=new&modelId=nyu2.bedroom_0114 - 其中 modelId = 资产库名.场景名
- 在右侧输入框中输入标签,再选择左侧模型中对应的面片,标注80%以上即可点击next按钮保存
-
export annotation:
- 访问
http://localhost:8010/scans/segment-annotations/list?condition=manual 查看所有标注好的模型 - 运行ssc文件夹下的js代码,导出
*.semseg.json (语义分割文件)和*.annotated.ply (使用基于顶点的分割和注释的点云文件) -
Scan-Model-Aligner:
- 访问
http://localhost:8010/scans/segment-annotations/list?conditio 进行CAD模型选择和对齐,但我这里的模型库还有一些问题不能显示模型并进行交互。
[03] Scan2cad简介
- 工具:该论文提供了一个webapp进行标注,实现重建模型到CAD模型的选择和对齐;
- 输入:
scene.ply :模型/重建结果;scene.labels.ply :模型对应的语义分割结果,在stk第一步中由export-annotated-ply 可以导出;.obj :CAD模型库,作者用的是ShapeNet数据集里的模型; - 官网数据集测试:
- 标注结果:
[04] Scan2cad环境配置
参考官网readme,这个配置比较简单
./server/run.sh
visit `http://localhost:8080/Scan2CAD/new/scene0470_00 进行替换
cd ~/code/solr-8.11.1/bin
./solr start
一些其它安装配置参考教程如下:
- node+npm版本对应关系 [Link]
- mysql 常用命令 [Link]
- ubuntu安装solr [Link]
|