将VBB文件转换成XML文件
#-*- coding:utf-8 -*-
import os, glob
import cv2
from scipy.io import loadmat
from collections import defaultdict
import numpy as np
from lxml import etree, objectifydef vbb_anno2dict(vbb_file, cam_id):#通过os.path.basename获得路径的最后部分“文件名.扩展名”#通过os.path.splitext获得文件名filename = os.path.splitext(os.path.basename(vbb_file))[0]#定义字典对象annosannos = defaultdict(dict)vbb = loadmat(vbb_file)# object info in each frame: id, pos, occlusion, lock, posvobjLists = vbb['A'][0][0][1][0]objLbl = [str(v[0]) for v in vbb['A'][0][0][4][0]] #可查看所有类别 # person indexperson_index_list = np.where(np.array(objLbl) == "person")[0] #只选取类别为‘person’的xmlfor frame_id, obj in enumerate(objLists):if len(obj) > 0:frame_name = str(cam_id) + "_" + str(filename) + "_" + str(frame_id+1) + ".jpg"annos[frame_name] = defaultdict(list)annos[frame_name]["id"] = frame_nameannos[frame_name]["label"] = "person"for id, pos, occl in zip(obj['id'][0], obj['pos'][0], obj['occl'][0]):id = int(id[0][0]) - 1 # for matlab start from 1 not 0if not id in person_index_list: # only use bbox whose label is personcontinuepos = pos[0].tolist()occl = int(occl[0][0])annos[frame_name]["occlusion"].append(occl)annos[frame_name]["bbox"].append(pos)if not annos[frame_name]["bbox"]:del annos[frame_name]print (annos)return annosdef seq2img(annos, seq_file, outdir, cam_id):cap = cv2.VideoCapture(seq_file)index = 1# captured frame listv_id = os.path.splitext(os.path.basename(seq_file))[0]cap_frames_index = np.sort([int(os.path.splitext(id)[0].split("_")[2]) for id in annos.keys()])while True:ret, frame = cap.read()print (ret)if ret:if not index in cap_frames_index:index += 1continueif not os.path.exists(outdir):os.makedirs(outdir)outname = os.path.join(outdir, str(cam_id)+"_"+v_id+"_"+str(index)+".jpg")print ("Current frame: ", v_id, str(index))cv2.imwrite(outname, frame)height, width, _ = frame.shapeelse:breakindex += 1img_size = (width, height)return img_sizedef instance2xml_base(anno, bbox_type='xyxy'):"""bbox_type: xyxy (xmin, ymin, xmax, ymax); xywh (xmin, ymin, width, height)"""assert bbox_type in ['xyxy', 'xywh']E = objectify.ElementMaker(annotate=False)anno_tree = E.annotation(E.folder('VOC2014_instance/person'),E.filename(anno['id']),E.source(E.database('Caltech pedestrian'),E.annotation('Caltech pedestrian'),E.image('Caltech pedestrian'),E.url('None')),E.size(E.width(640),E.height(480),E.depth(3)),E.segmented(0),)for index, bbox in enumerate(anno['bbox']):bbox = [float(x) for x in bbox]if bbox_type == 'xyxy':xmin, ymin, w, h = bboxxmax = xmin+wymax = ymin+helse:xmin, ymin, xmax, ymax = bboxE = objectify.ElementMaker(annotate=False)anno_tree.append(E.object(E.name(anno['label']),E.bndbox(E.xmin(xmin),E.ymin(ymin),E.xmax(xmax),E.ymax(ymax)),E.difficult(0),E.occlusion(anno["occlusion"][index])))return anno_treedef parse_anno_file(vbb_inputdir,vbb_outputdir):# annotation sub-directories in hda annotation input directoryassert os.path.exists(vbb_inputdir)sub_dirs = os.listdir(vbb_inputdir) #对应set00,set01...for sub_dir in sub_dirs:print ("Parsing annotations of camera: ", sub_dir)cam_id = sub_dir#获取某一个子set下面的所有vbb文件vbb_files = glob.glob(os.path.join(vbb_inputdir, sub_dir, "*.vbb")) for vbb_file in vbb_files:#返回一个vbb文件中所有的帧的标注结果annos = vbb_anno2dict(vbb_file, cam_id)if annos:#组成xml文件的存储文件夹,形如“/Users/chenguanghao/Desktop/Caltech/xmlresult/”vbb_outdir = vbb_outputdir#如果不存在if not os.path.exists(vbb_outdir):os.makedirs(vbb_outdir)for filename, anno in sorted(annos.items(), key=lambda x: x[0]): if "bbox" in anno:anno_tree = instance2xml_base(anno)outfile = os.path.join(vbb_outdir, os.path.splitext(filename)[0]+".xml")print ("Generating annotation xml file of picture: ", filename)#生成最终的xml文件,对应一张图片etree.ElementTree(anno_tree).write(outfile, pretty_print=True)
def visualize_bbox(xml_file, img_file):import cv2tree = etree.parse(xml_file)# load imageimage = cv2.imread(img_file)origin = cv2.imread(img_file)# 获取一张图片的所有bboxfor bbox in tree.xpath('//bndbox'):coord = []for corner in bbox.getchildren():coord.append(int(float(corner.text)))print (coord)cv2.rectangle(image, (coord[0], coord[1]), (coord[2], coord[3]), (0, 0, 255), 2)# visualize imagecv2.imshow("test", image)cv2.imshow('origin', origin)cv2.waitKey(0)def main():vbb_inputdir = "C:/Users/dell/Desktop/annotations"vbb_outputdir = "C:/Users/dell/Desktop/annotations"parse_anno_file(vbb_inputdir, vbb_outputdir)"""下面这段是测试代码""""""xml_file = "/Users/chenguanghao/Desktop/Caltech/xmlresult/set07/bbox/set07_V000_4.xml"img_file = "/Users/chenguanghao/Desktop/Caltech/JPEG/set07/V000/4.jpg"visualize_bbox(xml_file, img_file)"""
if __name__ == "__main__":main()
将VBB文件转换成XML文件相关推荐
- Java实现从Excel文件转换成XML文件(一)
实现思路: 直接从Excel文件装换成XML文件是可以实现的,这里我采用一个中间装换,也就是先实现excel文件内容放入实现设计好的access数据库文件中,然后再从access中读取 ...
- Java方法excel文件转换成xml文件
excel转xml文件其实是很简单的,主要在于你要知道怎么去解决这个业务上的流程,那我们应该知道一点的是:我们必须把数据先从excel中读出来,然后对这些数据进行xml格式的封装.这样我们就很容易解决 ...
- python 怎么样去txt中提取xml_如何使用python将.txt文件转换成xml文件?
尝试以下代码作为启动程序:#!python3 import re import xml.etree.ElementTree as ET rex = re.compile(r'''(?P Longitu ...
- Linux把日志文件转换成xml,[转载]将 HTML 文件转换成 XML
在 Java 专家 Michael Geisler 为 Builder 澳大利亚写的第一篇文章中,他向读者展示了如何使用 JTidy 将 HTML 文件转换成 XML. 有关 Java 的最重要的事情 ...
- Java使用aspse实现Excel文件转换成PDF文件
使用Java代码把Excel文件转换成PDF文件 需要引用aspose包,引入操作我写了一个博客,地址如下 https://blog.csdn.net/weixin_46713508/article/ ...
- Java使用aspose把PDF文件转换成PNG文件,以及把PDF文件水印转换成PNG格式
Java代码把PDF文件转换成PNG文件 需要引用aspose包,引入操作我写了一个博客,地址如下 https://blog.csdn.net/weixin_46713508/article/deta ...
- python将txt转换为csv_Python Pandas 三行代码将 txt 文件转换成 csv 文件
今天需要处理几个比较大的 txt 文件,每个文件都在 2GB 以上,直接用 Excel 将其转换成 csv 文件显然是不太可行的,于是用 Python 中的数据处理神器 Pandas,三行代码就能搞定 ...
- bat脚本中获取上级目录_使用Python写一个可以监控Tomcat 运行的脚本,并且把.py文件转换成.exe文件...
使用Python写一个可以监控Tomcat 运行的脚本,并且把.py文件转换成.exe文件 文章来源与博主本人的CSDN博客,博客地址:https://blog.csdn.net/weixin_435 ...
- csv文件转换成xlsx文件方法
背景: 在实际工作中,我们经常会面对大批量的数据进行处理,其中将csv文件文件转换成xlsx文件就是其中的一项,废话少说,上家伙: 一般方法: 将csv文件另存为xlsx文件: 但实际中03版本(.x ...
- 如何将Ai文件转换成PDF文件
要将Ai文件转换成PDF文件,请按照以下步骤操作: 1. 打开客汇宝网站软件并打开要转换的文件. 2. 点击"文件"菜单并选择"另存为". 3. 在" ...
最新文章
- 明晚8点公开课 | 用AI给旧时光上色!详解GAN在黑白照片上色中的应用
- Ubuntu下非常给力的下载工具–aira2
- Leetcode 40组合总数(回溯)Ⅱ41缺失的第一个正数42接雨水
- solr配置同义词,停止词,和扩展词库(IK分词器为例)
- 手机连接投影机的步骤_投影机安装过程详解
- 基于Docker快速搭建ELK
- opencv HOG SVM 二
- python使用ip代理抓取网页
- 泰山游记:厕所竟然没水,可想而知
- 滑动拼图验证码的原理和破解方法~
- 电感的作用和工作原理
- 显卡驱动卸载工具DDU
- VC++课程设计常见问题解答
- 简单 html 分页标签
- 读《MacTalk#183;人生元编程》及Mac经常使用软件
- 百度云虚拟主机bch 重定向
- VMSB200A16自定义组织功能配置指导
- LIS检验管理系统源码 医院管理系统源码
- 【redis前传】集思广益之quicklist,取其精华去其糟粕
- 混合开发框架的对比,Flutter更胜一筹?