比賽只給了json檔案,需要轉成xml檔案首先需要乙個labelimg標註好的xml檔案做模板,格式如下:
"no"
>
train<
/folder>
000000
<
/filename>
d:/study/pycharmprojects/cv零
;基;礎
;/input/train/
000000.png<
/path>
unknown<
/database>
<
/source>
741<
/width>
350<
/height>
3<
/depth>
<
/size>
0<
/segmented>
1<
/name>
unspecified<
/pose>
0<
/truncated>
0<
/difficult>
259<
/xmin>
77<
/ymin>
320<
/xmax>
272<
/ymax>
<
/bndbox>
<
/object>
<
/annotation>
需要修改的地方有:
filename
size節點下的width、height、depth
object節點下的name(標籤名)
object節點下的bndbox下的xmin、ymin、xmax、ymax
比賽提供的json格式如下:
,'000001.png':,
'000002.png'
:}
注意:這裡與labelimg標註的xml中xmin、xmax、ymin、ymax有所不同
xmin = left
ymin = top
xmax = left + width
ymax = top + height
具體實現:
import os, json
import copy
from lxml.etree import element, subelement, tostring, elementtree
import cv2
import numpy as np
template_file =
'../input/xml/anno.xml'
# xml模板
target_dir =
'../input/xml/annotations/'
#儲存路徑
image_dir =
'../input/val/'
# 資料夾
train_file =
'../input/val.json'
# 儲存了資訊的json檔案
# 提取json
defparse_json
(d):
arr = np.array(
[ d[
'top'
], d[
'height'
], d[
'left'
], d[
'width'
], d[
'label']]
) arr = arr.astype(
int)
arr = arr.astype(
str)
return arr
trainfiles = json.load(
open
(train_file)
)tree = elementtree(
)for k, line in
enumerate
(trainfiles)
: arr = parse_json(trainfiles[line]
) file_name = line #檔名
for i in
range
(arr.shape[1]
):if i ==0:
label = arr[
4, i]
# 標籤名
# 座標
ymin = arr[
0, i]
ymax =
str(
int(arr[
0, i])+
int(arr[
1, i]))
# xmin = arr[
2, i]
xmax =
str(
int(arr[
2, i])+
int(arr[
3, i]))
tree.parse(template_file)
# 解析樹
root = tree.getroot(
)# 根節點
root.find(
'filename'
).text = file_name
# size
sz = root.find(
'size'
) im = cv2.imread(image_dir + file_name)
#讀取資訊
sz.find(
'height'
).text =
str(im.shape[0]
) sz.find(
'width'
).text =
str(im.shape[1]
) sz.find(
'depth'
).text =
str(im.shape[2]
)# object
obj = root.find(
'object'
) obj.find(
'name'
).text = label
bb = obj.find(
'bndbox'
) bb.find(
'xmin'
).text = xmin
bb.find(
'ymin'
).text = ymin
bb.find(
'xmax'
).text = xmax
bb.find(
'ymax'
).text = ymax
# 有多個標籤需要新增object
else
: label = arr[
4, i]
ymin = arr[
0, i]
ymax =
str(
int(arr[
0, i])+
int(arr[
1, i]))
xmin = arr[
2, i]
xmax =
str(
int(arr[
2, i])+
int(arr[
3, i]))
obj_ori = root.find(
'object'
) obj = copy.deepcopy(obj_ori)
# 注意這裡深拷貝
obj.find(
'name'
).text = label
bb = obj.find(
'bndbox'
) bb.find(
'xmin'
).text = xmin
bb.find(
'ymin'
).text = ymin
bb.find(
'xmax'
).text = xmax
bb.find(
'ymax'
).text = ymax
xml_file = file_name.replace(
'png'
,'xml'
) tree.write(target_dir + xml_file, encoding=
'utf-8'
)
SSD講堂四 標註 標註工具LabelImg
目錄 前言ubuntu原始碼安裝 ubuntu pip安裝 windows環境下安裝 安裝anaconda 420 安裝pyqt包 使用方法 後續說明 我們知道,標註主要是用來建立自己的資料集,方便進行深度學習訓練。本篇部落格將推薦一款十分好用的標註工具labelimg,重點介紹其安裝以及使用的過程...
標註工具labelimg的安裝和使用
conda create name labelimg python 3.5 不要用3.6 如果掛掉多試幾次一點會成功的!activate labelimg成功啟用labelimg環境 pip install labelimg 中途可能會掛掉,多試幾次啟動labelimg 如果標籤多不想自己輸入可以去...
目標檢測標註工具labelImg安裝及使用
目標檢測中,原始的標註過程是非常重要的,它的作用是在原始影象中標註目標物體位置並對每張生成相應的xml檔案表示目標標準框的位置。本文介紹一款使用方便且能夠標註多類別並能直接生成xml檔案的標註工具 labelimg工具,並對其使用方法做乙個介紹。方式2 使用git命令 git clone 2 安裝 ...