我有一堆视频和XML文件,其中包含有关文件中对象的数据。我正在尝试编写一些函数,将每个视频的每个帧与该视频XML文件进行比较,但是当我遍历根的子子元素并打印其属性时,并未找到所有对象。示例XML文件链接here
我写了这两个函数
def setUP():
os.chdir('/home/abdi/Desktop/TestOpt/FishCLEF2015- TestDataset/Combined/')
listOfGT=[]
for file in glob.glob("*.flv"):
number,types=file.split(".")
listOfGT.append(number)
#print(len(listOfGT))
total=0
for names in listOfGT:
total+=1
print ("**** New File is {} ****".format(str(names) +".xml"))
tree = ET.parse(str(names) + ".xml")
root = tree.getroot()
NumberOfframes=LastFrames(root)
for frames in root:
print("For Frame: {}".format(frames.attrib["id"]))
jakoObject(frames,NumberOfframes,names)
这通过循环查找根结构的所有文件并循环遍历每个子列表(对应于图像中的1帧)来设置所有内容
def jakoObject(frames,NumberOfframes,names):
cam = cv.VideoCapture(str(names) + ".flv")
frame_count=0
while frame_count != NumberOfframes:
ret,frame = cam.read()
attrib=frames.attrib["id"]
if (frame_count==NumberOfframes):
print("Yatta")
break
else:
frame_count+=1
if (frame_count==int(attrib)):
for objects in frames:
# print("For Frame: {} and object {}".format(frames.attrib["id"],franmes.objects.attrib["id"]))
print(objects.attrib)
然后我使用此函数来播放视频,如果当前帧编号等于通过根结构找到的当前帧编号,则启动通过每个名为对象的子列表的循环。
我已经打印过该文件的归属。然而,发生的情况是,对于许多“对象”子列表,没有找到属性。但是在同一XML文件中找到另一个框架的属性。
对于上面链接的文件,输出为
答案 0 :(得分:0)
通过添加行
来检查会发生什么print(frame_count, attrib, NumberOfframes)
后jakoObject
中的
attrib=frames.attrib["id"]
然后你应该明白为什么要跳过它。