|
Traceback (most recent call last):
File "E:/deep_learning-studying/ssd_detection/ssd/datazets/commodity/new.py", line 27, in <module> et = ET.parse(xml_path + filename) File "F:\anaconda\anaconda\lib\xml\etree\ElementTree.py", line 1197, in parse tree.parse(source, parser) File "F:\anaconda\anaconda\lib\xml\etree\ElementTree.py", line 598, in parse self._root = parser._parse_whole(source) xml.etree.ElementTree.ParseError: no element found: line 1, column 0 CSDN上说是xml文件错误,但仔细检查过了,xml文件没问题,路径设置也没问题,文件里的信息也可以在解码过程中读取显示,不知道该怎么调。 |
|
最新喜欢: |
|
沙发#
发布于:2020-09-30 11:47
|
|
|
|
板凳#
发布于:2020-09-30 11:07
doubleyong:楼主,你试试非常感谢您的回答,十分感谢! 关于第一个方法:应该不是路径的问题,因为xml文件是可以读到的,里面的内容也可以解析出来,过程中的文件名,xmin,ymin等内容可以被显示打印。 第二个方法我这样改了,但还是提示一模一样的错误。 再次感谢您回答,非常谢谢您 |
|
|
地板#
发布于:2020-09-30 10:00
楼主,你试试
1. ET.parse 方法里的xml路径,写成相对路径 2. 试试,下面代码,看看能不能读取 import xml.etree.ElementTree as ET f = open(‘C:\test.xml’) xml_text = f.read() root = ET.fromstring(xml_text) f.close() 方法1,如果还是报错,你就试试方法2 |
|
|
|
4楼#
发布于:2020-09-29 16:54
非常感谢您的回复,我的代码是这样的
doubleyong:网上找了下,说可能是因为,没有关闭文件句柄,你可以试试 import xml.etree.ElementTree as ET import numpy as np import pickle import os def one_hot(name): one_hot_vector = [0] * 3 # 此处3代表分类的类别数 if name == 'mukuai': one_hot_vector[0] = 1 elif name == 'yingliaoping': one_hot_vector[1] = 1 elif name == 'zhiban': one_hot_vector[2] = 1 else: print('unknow label: %s' % name) return one_hot_vector # file_path目录下是xml文件 file_path = 'E:/deep_learning-studying/ssd_detection/ssd/datazets/commodity/Annotations/' xml_path = file_path num_classes = 3 data = {} for filename in os.listdir(xml_path): # et = ET.parse(xml_path + filename) # root = et.getroot() source = open(xml_path + filename) et = ET.parse(xml_path + filename) root = et.getroot() # 获取图片基础属性 # 获取size size = root.find('size') # print(size) width = float(size.find('width').text) height = float(size.find('height').text) depth = float(size.find('depth').text) # print(width,height,depth) # 2、对于每张图片,解析其中的多个物体 # print(root.findall('object')) bounding_boxes = [] one_hot_classes = [] for object_tree in root.findall('object'): for bounding_box in object_tree.iter('bndbox'): xmin = float(bounding_box.find('xmin').text) / width ymin = float(bounding_box.find('ymin').text) / height xmax = float(bounding_box.find('xmax').text) / width ymax = float(bounding_box.find('ymax').text) / height # print(xmin,ymin,xmax,ymax) bounding_box = [xmin, ymin, xmax, ymax] bounding_boxes.append(bounding_box) class_name = object_tree.find('name').text # 将类别进行one_hot编码 one_hot_class = one_hot(class_name) one_hot_classes.append(one_hot_class) #print(bounding_boxes,one_hot_classes) # 进行物体位置和目标值的one_hot编码进行拼接 image_name = root.find('filename').text bounding_boxes = np.asarray(bounding_boxes) one_hot_classes = np.asarray(one_hot_classes) # 存储图片标注的结果对应的名字,以及图片的标注数据(4个坐标以及onehot编码) image_data = np.hstack((bounding_boxes, one_hot_classes)) data[filename] = image_data source.close() print(image_data) # print(data.data) pickle.dump(data.data,open('./commodity_gt.pkl','wb')) |
|
|
7楼#
发布于:2020-09-29 16:45
from xml.etree import ElementTree as ET import os import numpy as np import pickle class XmlProcess(object): def __init__(self,file_path): self.xml_path = file_path self.num_classes = 3 self.data = {} def process_xml(self): """ 处理图片的标注信息,解析图片大小,图片中所有物体位置、类别 存入序列化的pkl文件 :return: """ #1、找到路径对应的图片 flienames = os.listdir(self.xml_path) for filename in flienames: et = ET.parse(self.xml_path + filename) print(et) root = et.getroot() print(root) #获取图片基础属性 #获取size size = root.find('size') #print(size) width = float(size.find('width').text) height = float(size.find('height').text) depth = float(size.find('depth').text) #print(width,height,depth) #2、对于每张图片,解析其中的多个物体 #print(root.findall('object')) bounding_boxes = [] one_hot_classes = [] for object_tree in root.findall('object'): for bounding_box in object_tree.iter('bndbox'): xmin = float(bounding_box.find('xmin').text) / width ymin = float(bounding_box.find('ymin').text) / height xmax = float(bounding_box.find('xmax').text) / width ymax = float(bounding_box.find('ymax').text) / height #print(xmin,ymin,xmax,ymax) bounding_box = [xmin, ymin, xmax, ymax] bounding_boxes.append(bounding_box) class_name = object_tree.find('name').text #将类别进行one_hot编码 one_hot_class = self.one_hot(class_name) one_hot_classes.append(one_hot_class) #print(bounding_boxes,one_hot_classes) #进行物体位置和目标值的one_hot编码进行拼接 #image_name = root.find('filename').text bounding_boxes = np.asarray(bounding_boxes) one_hot_classes = np.asarray(one_hot_classes) #存储图片标注的结果对应的名字,以及图片的标注数据(4个坐标以及onehot编码) image_data = np.hstack((bounding_boxes,one_hot_classes)) self.data[filename] = image_data print(image_data) return None def one_hot(self,name): one_hot_vector = [0] * 3 #此处3代表分类的类别数 if name == 'mukuai': one_hot_vector[0] = 1 elif name == 'yingliaoping': one_hot_vector[1] = 1 elif name == 'zhiban': one_hot_vector[2] = 1 else: print('unknow label: %s' % name) return one_hot_vector if __name__ =='__main__': # 此路径下是XML文件 xp = XmlProcess('E:/deep_learning-studying/ssd_detection/ssd/datazets/commodity/Annotations/') xp.process_xml() # print(xp.data) pickle.dump(xp.data,open('./commodity_gt.pkl','wb')) |
|
|
8楼#
发布于:2020-09-29 15:53
网上找了下,说可能是因为,没有关闭文件句柄,你可以试试
source = open(path_to_file) tree = ET.parse(source) ... do your work ... source.close() |
|
|
|
9楼#
发布于:2020-09-29 15:43
朋友,你解析文件的代码,贴一个吧
|
|
|