角色:
1 .导入图像和标记后的xml文件,并将标记信息写入txt文件。 生成的txt文件位于txt文件夹下,可直接用于训练目标检测算法,如yolo3。
2. txt文件包含图像的路径、注释框的位置和大小以及注释的类别。
3 .可以对标记的图像进行分割,用于行人属性识别。 分割后的图像保存在segmentation文件夹下。
数据集准备:
1 .必须将数据集放在dataset路径下。
2. Annotations保存xml文件,JPEGImages保存图像。
修正:根据需要进行适当的修正。 以下说明:
第一个:
class_tab={
' human':1 ##这是一个类别。 如果有多个类别,则可以添加多个类别
}
第二:
params={ ' XML _ prefix ' : './dataset/annotations/',##请注意,这是XML源文件的路径前缀,末尾有“/”
' img _ prefix ' : ' ./dataset/JPEG images/',##请注意,这是图像源文件的路径前缀,末尾有“/”
' seg _ prefix ' : ' ./segmentation/',##请注意,这是存储分割图像的位置前缀,末尾有“/”
}
第三个:
f=open('./txt/train.txt ',' a'##这是生成的txt文件的路径。
下面附上所有源代码
第一个是main.py
导入系统
# sys.path.remove (/opt/ROS/kinetic/lib/python 2.7/dist-packages ) )
导入cv2
import os
from readxml import *
class_tab={
' humanimport sys
# sys.path.remove (/opt/ROS/kinetic/lib/python 2.7/dist-packages ) )
导入cv2
import os
from readxml import *
class_tab={
' human':1
}
params={ ' XML _ prefix ' : './dataset/annotations/',
' img _ prefix ' : './dataset/JPEG images/',
' seg _ prefix ' : './segmentation/',
}
efwrite_line(f,img_path,boxes ) :
f.write('%s'% ) img_path ) )
for box in boxes:
f.write(str ) box['cls'] )、')
f.write(str ) box['Xmin ' ',' ]
f.write(str ) box['ymin ' ',' ]
f.write(str ) box['xmax ' ',' ]
f.write(str ) box['ymax'] )
f.write (' ) )
f.write((n ) ) ) )。
f.flush () )
efsegment(img_path,imgname,boxes ) :
img=cv2.imread(img_path,cv2.IMREAD_COLOR ) )。
cnt=0
for box in boxes:
seg=img [ int ] box [ ' ymin ' ] ] : int [ ' ymax ' ],int [ ' xmin ' ] ] : int [ ' box [ ' xmax ' ] ]
cv2.im write (params [ ' seg _ prefix ' ] imgname ' _ ' str (CNT ).jpg ',seg ) ) ) ) ) )。
cnt=cnt 1
戴尔主(:
f=open('./txt/train.txt ',' a ' ) )。
img _ list=OS.list dir (params [ ' img _ prefix ' ) ]
for il in img_list:
img _ path=params [ ' img _ prefix ' ] il
tokens=il.split ('.' )
XML _ path=params [ ' XML _ prefix ' ] tokens [0] '.XML '
IFOS.path.isfile(img_path )==False:
raisevalueerror (' % sdoesnotexits!' %img_path )
else:
打印(reading :img_path ) ) ) ) ) ) ) ) ) ) ) )。
boxes=XML_reader(XML_path,class_tab ) ) ) )。
write_line(f,img_path,boxes ) )。
Segment(img_path,tokens[0],boxes ) ) ) ) ) )。
f.close () )
if __name__=='__main__':
main () )
' :1
}
params={ ' XML _ prefix ' : './dataset/annotations/',
' img _ prefix ' : './dataset/JPEG images/',
' seg _ prefix ' : './segmentation/',
}
efwrite_line(f,img_path,boxes ) :
f.write('%s'% ) img_path ) )
for box in boxes:
f.write(str ) box['cls'] )、')
f.write(str ) box['Xmin ' ',' ]
f.write(str ) box['ymin ' ',' ]
f.write(str ) box['xmax ' ',' ]
f.write(str ) box['ymax'] )
f.write (' ) )
f.write((n ) ) ) )。
f.flush () )
efsegment(img_path,imgname,boxes ) :
img=cv2.imread(img_path,cv2.IMREAD_COLOR ) )。
cnt=0
for box in boxes:
seg=img [ int ] box [ ' ymin ' ] ] : int [ ' ymax ' ],int [ ' xmin ' ] ] : int [ ' box [ ' xmax ' ] ]
cv2.im write (params [ ' seg _ prefix ' ] imgname ' _ ' str (CNT ).jpg ',seg ) ) ) ) ) )。
cnt=cnt 1
戴尔主(:
f=open('./txt/train.txt ',' a ' ) )。
img _ list=OS.list dir (params [ ' img _ prefix ' ) ]
for il in img_list:
img _ path=params [ ' img _ prefix ' ] il
tokens=il.split ('.' )
XML _ path=params [ ' XML _ prefix ' ] tokens [0] '.XML '
IFOS.path.isfile(img_path )==False:
raisevalueerror (' % sdoesnotexits!' %img_path )
else:
打印(reading :img_path ) ) ) ) ) ) ) ) ) ) ) )。
boxes=XML_reader(XML_path,class_tab ) ) ) )。
write_line(f,img_path,boxes ) )。
Segment(img_path,tokens[0],boxes ) ) ) ) ) )。
f.close () )
if __name__=='__main__':
main () )
第二,readxml.py
from XML.DOM.minidomimportdocument
import XML.etree.element treea set
efXML_reader(fname,cls_tab ) 3:###,classes_merge_list,classes_merged_name ) 3360
in_file=open(fname )
tree=et.parse(in_file )
root=tree.getroot (
boxes=[]
foriteminroot.ITER(item ) ) :
cls=item.find('name ' ).text
if cls in cls_tab:
bndbox=item.find(bndbox ) )。
b={
' xmin':str(int(bndbox.find ) xmin ).text ),
' ymin':str(int(bndbox.find ) ymin ).text ),
' xmax':str(int(bndbox.find ) xmax ).text ),
' ymax':str(int(bndbox.find ) ymax ).text ),
' cls': cls_tab[cls]
}
Boxes.append(b ) )。
else:
continue
返回盒
if __name__=='__main__':
cls_tab={'human':1}
fname='/home/ta/downloads/Li qiming _ label/dataset/annotations/sa 341.XML '
box=XML_reader(fname,cls_tab ) )。
是打印(盒)