from lxml import etree
import cv2
# 读取 xml 文件信息,并返回字典形式
def parse_xml_to_dict(xml):
if len(xml) == 0: # 遍历到底层,直接返回 tag对应的信息
return {xml.tag: xml.text}
result = {}
for child in xml:
child_result = parse_xml_to_dict(child) # 递归遍历标签信息
if child.tag != 'object':
result[child.tag] = child_result[child.tag]
else:
if child.tag not in result: # 因为object可能有多个,所以需要放入列表里
result[child.tag] = []
result[child.tag].append(child_result[child.tag])
return {xml.tag: result}
# xml 标注文件的可视化
def xmlShow(img, xml, save=True):
image = cv2.imread(img)
with open(xml, encoding='gb18030', errors='ignore') as fid: # 防止出现非法字符报错
xml_str = fid.read()
xml = etree.fromstring(xml_str)
data = parse_xml_to_dict(xml)["annotation"] # 读取 xml文件信息
ob = [] # 存放目标信息
for i in data['object']: # 提取检测框
name = str(i['name']) # 检测的目标类别
bbox = i['bndbox']
xmin = int(bbox['xmin'])
ymin = int(bbox['ymin'])
xmax = int(bbox['xmax'])
ymax = int(bbox['ymax'])
tmp = [name, xmin, ymin, xmax, ymax] # 单个检测框
ob.append(tmp)
# 绘制检测框
for name, x1, y1, x2, y2 in ob:
cv2.rectangle(image, (x1, y1), (x2, y2), color=(255, 0, 0), thickness=2) # 绘制矩形框
cv2.putText(image, name, (x1, y1 - 10), fontFace=cv2.FONT_HERSHEY_SIMPLEX,
fontScale=0.5, thickness=1, color=(0, 0, 255))
# 保存图像
if save:
cv2.imwrite('result.png', image)
if __name__ == "__main__":
import os
import random
img_path = './data/train/images/' # 传入图片
image = [os.path.join(img_path, i) for i in os.listdir(img_path)]
r = random.randint(0, len(image) - 1) # 生成随机索引
image_path = image[r]
labels_path = image_path.replace('images', 'labels') # 自动获取对应的 xml 标注文件
labels_path = labels_path.replace('.jpg', '.xml')
xmlShow(img=image_path, xml=labels_path, save=True)
听风吹等浪起
- 粉丝: 2w+
- 资源: 2320
最新资源
- 华为路由器数通实例文档以及华为命令手册
- 基于Python爬虫+flask框架+echarts的天气展示系统资料源码+说明文档(高分完整项目)
- 三菱FX3G FX3S 485协议通讯四台三菱E700变频器程序资料 三菱FX3G FX3S+485bd扩展,采用modbus rtu协议,crc校验,通讯控制四台E700变频器,可以实现正反转
- 基于Python爬虫+flask框架+echarts的天气展示系统资料+文档说明(高分项目)
- 机械设计自动翻转+人工组装线sw21可编辑项目全套技术资料.zip
- 三菱FX3U六轴标准完美程序,程序包含本体3轴控制,扩展3个1PG定位模块,一共六轴 程序有轴点动控制,回零控制,相对定位,绝对定位 另有气缸数个,一个大是DD马达控制的转盘,整个是转盘多工位流水
- 基于springboot的文理医院预约挂号系统源码(java毕业设计完整源码+LW).zip
- 基于springboot的高校教师科研管理系统源码(java毕业设计完整源码+LW).zip
- 三凌FX3U源码,包括pcb,原理图 ,FX3U源码 PLC FX3U源码 FX-3U 全套生产方案,稳定运行
- 基于Python flask框架仓库管理系统详细资料(高分项目)
- 基于springboot的毕业设计系统的开发源码(java毕业设计完整源码+LW).zip
- 基于Qt的轻量级的Ribbon控件(Office样式UI),界面截图: 它支持4种目前常见的ribbon样式在线切 包括2种office模式,office模式是最常见的ribbon模式了,就是我们经常
- 基于springboot的智能家居系统源码(java毕业设计完整源码+LW).zip
- 机械设计自动平卷纸管机x_t项目全套技术资料.zip
- 基于springboot的疫情打卡健康评测系统源码(java毕业设计完整源码+LW).zip
- 三菱FX3G 3U RTU方式通讯四台台达vfd-e变频器示例 1.需要硬件:fx3g或fx3u一台,fx3g-cnv-bd或fx3u-cnv-bd,fx3u-485ADP-mb. 2,实现功能:FB
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈