Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleSeg
提交
7bcd8b1d
P
PaddleSeg
项目概览
PaddlePaddle
/
PaddleSeg
通知
285
Star
8
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
53
列表
看板
标记
里程碑
合并请求
3
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleSeg
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
53
Issue
53
列表
看板
标记
里程碑
合并请求
3
合并请求
3
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
7bcd8b1d
编写于
5月 26, 2020
作者:
L
LutaoChu
提交者:
GitHub
5月 26, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix label tool bugs (#266)
* modify label tool
上级
867d4a5b
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
49 addition
and
40 deletion
+49
-40
docs/annotation/jingling2seg.md
docs/annotation/jingling2seg.md
+7
-13
docs/annotation/labelme2seg.md
docs/annotation/labelme2seg.md
+10
-16
docs/annotation/labelme_demo/annotations/2011_000025.png
docs/annotation/labelme_demo/annotations/2011_000025.png
+0
-0
pdseg/tools/jingling2seg.py
pdseg/tools/jingling2seg.py
+4
-5
pdseg/tools/labelme2seg.py
pdseg/tools/labelme2seg.py
+28
-6
未找到文件。
docs/annotation/jingling2seg.md
浏览文件 @
7bcd8b1d
...
...
@@ -59,16 +59,16 @@
*
经过数据格式转换后的数据集目录结构如下:
```
my_dataset # 根目录
my_dataset # 根目录
|-- outputs # 标注工具导出目录
| |-- annotations # 数据集真值
| |-- xxx.png # 像素级别的真值信息
| |...
| |-- annotations # 数据集真值
| |-- xxx.png # 像素级别的真值信息
| |...
| |-- class_names.txt # 数据集的类别名称
| |-- xxx.json # 标注json文件
|-- xxx.jpg(png or other) # 数据集原图
|-- ...
```
<div
align=
"center"
>
...
...
@@ -76,16 +76,10 @@
<p>
图5 格式转换后的数据集目录的结构示意图
</p>
</div>
*
运行转换脚本需要依赖labelme和pillow,如未安装,请先安装。Labelme的具体安装流程请参见
[
官方安装指南
](
https://github.com/wkentaro/labelme
)
。Pillow的安装:
```
shell
pip
install
pillow
```
*
运行以下代码,将标注后的数据转换成满足以上格式的数据集:
```
python pdseg/tools/jingling2seg.py <PATH/TO/LABEL_JSON_FILE>
python pdseg/tools/jingling2seg.py <PATH/TO/LABEL_JSON_FILE>
```
其中,
`<PATH/TO/LABEL_JSON_FILE>`
为精灵标注产出的json文件所在文件夹的目录,一般为精灵工具使用(3)中
`保存位置`
下的
`outputs`
目录。
...
...
@@ -101,4 +95,4 @@ python pdseg/tools/jingling2seg.py docs/annotation/jingling_demo/outputs/
<div
align=
"center"
>
<img
src=
"../imgs/annotation/jingling-5.png"
width=
"600px"
/>
<p>
图6 格式转换后的数据集各目录的内容示意图
</p>
</div>
</div>
docs/annotation/labelme2seg.md
浏览文件 @
7bcd8b1d
...
...
@@ -53,11 +53,11 @@ LableMe产出的真值文件可参考我们给出的文件夹[docs/annotation/la
<img
src=
"../imgs/annotation/image-5.png"
width=
"600px"
/>
<p>
图5 LableMe产出的真值文件的示意图
</p>
</div>
**Note:**
对于中间有空洞的目标的标注方法:在标注完目标轮廓后,再沿空洞区域边缘画多边形,并将其指定为其他类别,如果是背景则指定为
`_background_`
。如下:
<div
align=
"center"
>
<img
src=
"../imgs/annotation/image-10.jpg"
width=
"600px"
/>
<p>
图6 带空洞目标的标注示意图
</p>
...
...
@@ -69,16 +69,16 @@ LableMe产出的真值文件可参考我们给出的文件夹[docs/annotation/la
*
经过数据格式转换后的数据集目录结构如下:
```
my_dataset # 根目录
|-- annotations # 数据集真值
| |-- xxx.png # 像素级别的真值信息
| |...
my_dataset # 根目录
|-- annotations # 数据集真值
| |-- xxx.png # 像素级别的真值信息
| |...
|-- class_names.txt # 数据集的类别名称
|-- xxx.jpg(png or other) # 数据集原图
|-- ...
|-- xxx.json # 标注json文件
|-- ...
```
<div
align=
"center"
>
...
...
@@ -86,16 +86,10 @@ LableMe产出的真值文件可参考我们给出的文件夹[docs/annotation/la
<p>
图7 格式转换后的数据集目录的结构示意图
</p>
</div>
*
运行转换脚本需要依赖labelme和pillow,如未安装,请先安装。Labelme的具体安装流程请参见
[
官方安装指南
](
https://github.com/wkentaro/labelme
)
。Pillow的安装:
```
shell
pip
install
pillow
```
*
运行以下代码,将标注后的数据转换成满足以上格式的数据集:
```
python pdseg/tools/labelme2seg.py <PATH/TO/LABEL_JSON_FILE>
python pdseg/tools/labelme2seg.py <PATH/TO/LABEL_JSON_FILE>
```
其中,
`<PATH/TO/LABEL_JSON_FILE>`
为图片以及LabelMe产出的json文件所在文件夹的目录,同时也是转换后的标注集所在文件夹的目录。
...
...
@@ -111,4 +105,4 @@ python pdseg/tools/labelme2seg.py docs/annotation/labelme_demo/
<div
align=
"center"
>
<img
src=
"../imgs/annotation/image-7.png"
width=
"600px"
/>
<p>
图8 格式转换后的数据集各目录的内容示意图
</p>
</div>
</div>
docs/annotation/labelme_demo/annotations/2011_000025.png
已删除
100644 → 0
浏览文件 @
867d4a5b
2.6 KB
pdseg/tools/jingling2seg.py
浏览文件 @
7bcd8b1d
...
...
@@ -20,12 +20,11 @@ import glob
import
json
import
os
import
os.path
as
osp
import
numpy
as
np
import
PIL.Image
import
labelme
from
gray2pseudo_color
import
get_color_map_list
from
labelme2seg
import
shape2label
def
parse_args
():
...
...
@@ -102,10 +101,10 @@ def main(args):
img_shape
=
(
data_size
[
'height'
],
data_size
[
'width'
],
data_size
[
'depth'
])
lbl
=
labelme
.
utils
.
shapes_to_
label
(
img_s
hap
e
=
img_shape
,
lbl
=
shape2
label
(
img_s
iz
e
=
img_shape
,
shapes
=
data_shapes
,
label_name_to_value
=
class_name_to_id
,
class_name_mapping
=
class_name_to_id
,
)
if
osp
.
splitext
(
out_png_file
)[
1
]
!=
'.png'
:
...
...
pdseg/tools/labelme2seg.py
浏览文件 @
7bcd8b1d
...
...
@@ -17,13 +17,14 @@ from __future__ import print_function
import
argparse
import
glob
import
math
import
json
import
os
import
os.path
as
osp
import
numpy
as
np
import
PIL.Image
import
labelme
import
PIL.ImageDraw
import
cv2
from
gray2pseudo_color
import
get_color_map_list
...
...
@@ -77,12 +78,12 @@ def main(args):
data
=
json
.
load
(
f
)
img_file
=
osp
.
join
(
osp
.
dirname
(
label_file
),
data
[
'imagePath'
])
img
=
np
.
asarray
(
PIL
.
Image
.
open
(
img_file
))
img
=
np
.
asarray
(
cv2
.
imread
(
img_file
))
lbl
=
labelme
.
utils
.
shapes_to_
label
(
img_s
hap
e
=
img
.
shape
,
lbl
=
shape2
label
(
img_s
iz
e
=
img
.
shape
,
shapes
=
data
[
'shapes'
],
label_name_to_value
=
class_name_to_id
,
class_name_mapping
=
class_name_to_id
,
)
if
osp
.
splitext
(
out_png_file
)[
1
]
!=
'.png'
:
...
...
@@ -98,6 +99,27 @@ def main(args):
'Please consider using the .npy format.'
%
out_png_file
)
def
shape2mask
(
img_size
,
points
):
label_mask
=
PIL
.
Image
.
fromarray
(
np
.
zeros
(
img_size
[:
2
],
dtype
=
np
.
uint8
))
image_draw
=
PIL
.
ImageDraw
.
Draw
(
label_mask
)
points_list
=
[
tuple
(
point
)
for
point
in
points
]
assert
len
(
points_list
)
>
2
,
'Polygon must have points more than 2'
image_draw
.
polygon
(
xy
=
points_list
,
outline
=
1
,
fill
=
1
)
return
np
.
array
(
label_mask
,
dtype
=
bool
)
def
shape2label
(
img_size
,
shapes
,
class_name_mapping
):
label
=
np
.
zeros
(
img_size
[:
2
],
dtype
=
np
.
int32
)
for
shape
in
shapes
:
points
=
shape
[
'points'
]
class_name
=
shape
[
'label'
]
shape_type
=
shape
.
get
(
'shape_type'
,
None
)
class_id
=
class_name_mapping
[
class_name
]
label_mask
=
shape2mask
(
img_size
[:
2
],
points
)
label
[
label_mask
]
=
class_id
return
label
if
__name__
==
'__main__'
:
args
=
parse_args
()
main
(
args
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录