赞
踩
1.在制作人脸数据集的识别,往往需要制作标注自己的数据集,特征点可以自己定,所以写下这段代码,希望对你有所帮助。
2.用labelme做的标记,按照顺序:五个点+一个bbox
3.用labelme进行标注。
4.下面代码将xml文件转换为Retinaface训练集的label.txt。
5.也可以应用于工业特征点检测识别中。
- from xml.dom.minidom import parse
- import xml.dom.minidom
- import os
- # 使用minidom解析器打开 XML 文档
- # def parse_file(file_name,result_path):
- # DOMTree = xml.dom.minidom.parse(file_name)
- # collection = DOMTree.documentElement
- # shapes = collection.getElementsByTagName("shapes")
- # image_path=collection.getElementsByTagName("imagePath")[0].childNodes[0].nodeValue
- # with open(result_path,"a+",encoding="utf-8") as f:
- # f.writelines([image_path,"\n"])
- # temp=[]
- # for shape in shapes:
- # points=shape.getElementsByTagName("points")
- # for point in points:
- # value=point.childNodes[0].nodeValue
- # value=eval(value)
- # temp.append(str(value[0]))
- # temp.append(str(value[1]))
- # temp.append("0.0")
- # temp= temp[0:len(temp)-1]
- # temp.append("1")
- # line=" ".join(temp)
- # f.write(line)
- # f.write("\n")
-
- def parse_file(file_name,result_path):
- DOMTree = xml.dom.minidom.parse(file_name)
- collection = DOMTree.documentElement
- shapes = collection.getElementsByTagName("shapes")
- image_path=collection.getElementsByTagName("imagePath")[0].childNodes[0].nodeValue
- labels = dict()
- for shape in shapes:
- label=shape.getElementsByTagName("label")[0].childNodes[0].nodeValue
-
- label=eval(label)
- print(label)
- temp=labels.get(label,[])
- temp.append(shape)
- labels[label]=temp
- print(labels)
- line=""
- with open(result_path,"a+",encoding="utf-8") as f:
- f.writelines([image_path,])
- for label in labels:
- label_shapes=labels[label]
- shapes=[]
- for shape in label_shapes:
- points=shape.getElementsByTagName("points")
- temp=[]
- for point in points:
- value=point.childNodes[0].nodeValue
- value=eval(value)
- temp.append(str(value[0]))
- temp.append(str(value[1]))
- shapes.append(" ".join(temp))
- line+=(" 0.0 ".join(shapes)+' 1 ')
- f.write("\n")
- f.write(line)
- f.write("\n")
-
- def exchange(dir_path,result_file_path):
- # dirs=os.listdir("D:\projects\pycharm\experiments")
- dirs=os.listdir(dir_path)
- for file in dirs:
- print(file)
- parse_file(dir_path+'/'+file,result_file_path)
-
- print(dirs)
- if __name__ == '__main__':
- # 第一个参数是xml文件夹路径,第二个参数是txt文件路径,可以不存在
- exchange(r"D:\projects\pycharm\experiments\test",r"D:\projects\pycharm\experiments\result.txt")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。