文章目录

  • 前言
  • 一、CVAT导出的xml格式
  • 二、使用步骤
    • 1.引入库
    • 2.读入xml文件信息,获取所有的image标签
    • 3.numpy对数据进行重组,并保存
    • 4.结果
  • 三、验证坐标点信息

前言

最近要弄人脸坐标点数据集,在使用CVAT对人脸坐标点进行标记后,将数据以CVAT for images 1.1格式进行导出,坐标点的信息保存在xml中。我需要的是与300W数据集相同的格式,通过python的xml.dom进行操作,提取出每张照片对应的人脸坐标点信息,保存为txt文件。并通过绘制图像,验证标注点信息是否正确。


一、CVAT导出的xml格式

 从图中可以看到,主要的信息标签在image下,image标签下嵌入了points标签(这个为需要的内容)

二、使用步骤

1.引入库

import os
import numpy as np
import pandas as pd# 使用dom
from xml.dom.minidom import parse
import xml.dom.minidom

2.读入xml文件信息,获取所有的image标签

# 保存信息
data = []# 使用minidom解析器打开 XML 文档
DOMTree = xml.dom.minidom.parse("./data/Face_points/annotations.xml")
collection = DOMTree.documentElement# 在集合中获取所有image
images = collection.getElementsByTagName("image")# 打印每部电影的详细信息
for image in images:print ("*****image*****")if image.hasAttribute("id"):print ("id: %s" % image.getAttribute("id"))if image.hasAttribute("name"):print ("name: %s" % image.getAttribute("name"))data.append(image.getAttribute("name"))if image.hasAttribute("width"):print ("width: %s" % image.getAttribute("width"))if image.hasAttribute("height"):print ("height: %s" % image.getAttribute("height"))points = image.getElementsByTagName('points')for point in points:if point.hasAttribute("points"):print ("point: %s" % point.getAttribute("points"))data.append(point.getAttribute("points"))

3.numpy对数据进行重组,并保存

data = np.array(data).reshape((-1,2))for i in range(0,data.shape[0]):points_str = data[i][1]points_str = points_str.replace(";",",")points_list = points_str.split(',')points = np.array(points_list).reshape(-1,2)file_name = data[i][0]np.savetxt(os.path.join('./data/Face_points/images/',file_name.replace(".png",".txt")),points, fmt="%s")

4.结果


三、验证坐标点信息

import os
import pandas as pd
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
from torchvision import transforms, utils
import cv2from skimage import io, transform# Ignore warnings
import warnings
warnings.filterwarnings("ignore")image = cv2.imread('./images/indoor_003.png', 1)  # 1 彩色,0 灰色# 读取对应的pts文件
with open('./images/indoor_003.txt') as file_obj:contents = file_obj.readlines();#i = 0
landmarks = []
for line in contents:TT = line.strip("\n")  # strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。# print TTTT_temp = TT.split(" ")x = float(TT_temp[0])y = float(TT_temp[1].strip("\r"))  # \r :回车landmarks.append((x, y))#i += 1
print(landmarks, len(landmarks))#  将关键点标在图片上
'''
cv2.circle(image, center_coordinates, radius, color, thickness)image:它是要在其上绘制圆的图像。center_coordinates:它是圆的中心坐标。坐标表示为两个值的元组,即(X坐标值,Y坐标值)。radius:它是圆的半径。color:它是要绘制的圆的边界线的颜色。对于BGR,我们通过一个元组。例如:(255,0,0)为蓝色。thickness:它是圆边界线的粗细像素。厚度-1像素将以指定的颜色填充矩形形状。返回值:它返回一个图像。cv2.putText(img, text, org, fontFace, fontScale, color, thickness=None, lineType=None, bottomLeftOrigin=None)各参数依次是:图片,添加的文字,左上角坐标,字体,字体大小,颜色,字体粗细
'''
m = 0  # 标号初始为0
for point in landmarks:# print(point[0],point[1])cv2.circle(image, (int(point[0]), int(point[1])), 2, (0, 255, 0), -1)  # 颜色顺序:BGR (0, 255, 0)绿色,-1 实心圆m += 1cv2.putText(image, str(m), (int(point[0]), int(point[1])), cv2.FONT_HERSHEY_SIMPLEX, 0.25, (0, 0, 255),1)  # 每个关键点上标号
#     plt.scatter(np.transpose(point)[0], np.transpose(point)[1])  # 散点图
# plt.show()
cv2.imshow("pointImg", image)
cv2.waitKey()

python提取XML信息保存为txt相关推荐

  1. Python学习-批量提取图片名称保存至txt文件

    个人微信公众号:AI研习图书馆,欢迎关注~ 深度学习知识及资源分享,学习交流,共同进步~ Python提取图片名称保存到txt文件 1. 环境 Windows7+Anaconda3+python 3. ...

  2. python提取xml格式的出参并转成dict

    python提取xml格式的出参并转成dict # python提取xml格式的出参并转成dict xml_data = """<S:Envelopees xmln ...

  3. python提取xml的所有框坐标_python 提取批量xml文件中的坐标信息存入txt文件 xml文件转txt文件...

    读取多个xml文件中的坐标信息:xmin.xmax.ymin.ymax(实际为一个矩形框的坐标值),并通过简单的计算得到矩形框的长.宽,最后按照自己的需求读入到一个txt文档中 xml文件目录及文件如 ...

  4. python提取xml文件中的坐标点(labelimg标记文档)

    LabelImg是深度学习中用来标注图片中物体位置与名称的工具,LabelImg标记数据的xml文档也比较简洁明了. 标记图片: 保存后生成的xml文件: Python提取文档中的标记信息(坐标信息& ...

  5. 从json提取数据,保存成txt格式

    前段时间有一个需求做文本语义匹配,但是公司的标注数据不够无监督学习效果不够好,只能使用开源的数据集.开源的数据集清洗成json格式,我们从json提取数据保存成txt格式方便后续的使用.JSON数据格 ...

  6. 记录 || Python | 提取xml/tmx文件中的文本内容

    # -*- coding:utf-8 -*- import codecs import xml.etree.ElementTree as ET import sysdefaultencoding = ...

  7. 教你用Python提取Chrome浏览器保存的密码

    @Author:Runsen 由于Chrome会将大量浏览数据本地保存磁盘中,在本教程中,我们将编写 Python 代码来提取 Windows 计算机上 Chrome 中保存的密码. 首先,让我们安装 ...

  8. python提取发票信息发票识别_分享一个电子发票信息提取工具(Python)

    电子发票太多,想统计下总额异常困难,网上工具不好用,花了2个小时实现一份,测试过中石油.京东开具的电子发票还行,部分发票名称失败有问题不影响统计,有需要的小伙伴自己拿去改吧. import cmd i ...

  9. python提取身份证信息_Python selenium 身份证信息在线解析爬取

    当做笔记: 身份证地区查询,网络上的查询网站也比较多.现在查询数据库中的身份证,识别其中的信息.主要通过该网站:http://www.gpsspg.com/sfz/ 脚本: #-*- coding: ...

最新文章

  1. outlook 2010 记忆式键入不工作的解决办法
  2. 从挂起到实现,你知道内核是如何实现的?
  3. 反汇编基础、OllyDbg简介和界面、基本操作、初级TraceMe练习
  4. 微软创立全新人工智能实验室,与DeepMind、OpenAI同台竞技
  5. 【Python】选取二维列表的第一列
  6. 第三章 JVM内存回收区域+对象存活的判断+引用类型+垃圾回收线程
  7. Laravel测试驱动开发 -- 正向单元测试
  8. 全国计算机office二级选择题,全国计算机二级msoffice选择题汇总含答案
  9. 微信小程序-配置请求合法域名的问题以及豆瓣api问题
  10. 华为acl怎么生效_华为ACL配置教程
  11. Ubuntu系统用户忘记密码
  12. android 显示Gift图片
  13. vs2008 jquery 智能提示
  14. dateframe取某列数据_数据清洗amp;预处理入门完整指南
  15. 算法:回溯十 挑选卡片pickup cards
  16. 如何生成javadoc文档(JDK帮助文档)
  17. 对Bat文件进行加密
  18. html三段式布局,移动端 三段式布局 (flex方式)
  19. JQuery中$(document)是什么意思?
  20. 赫夫曼编码树(图解+完整代码)

热门文章

  1. Word/WPS文档中缩小行距
  2. Linux截取不定长度字符串,Linux技巧:使用 expr 命令获取子字符串和字符串长度...
  3. excel 导出加水印
  4. 多多小程序(doodoo)发布1.0,基于node,vue开发的微信小程序系统
  5. 连接中控指纹考勤机 zkemkeeper zksoftware ZKTeco
  6. 杀了一个程序员祭天换来今天的正常推送:仿知乎APP源码分享
  7. 设置表头QHeaderView
  8. 云服务器几核CPU够用
  9. 做个男人,做个成熟的男人
  10. 2019互联网BATJ等大厂中秋礼盒大PK