日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TensorFlow 对数据集标记的xml文件解析记录

發布時間:2025/5/22 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TensorFlow 对数据集标记的xml文件解析记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

環境

  • Windows:10
  • Python 3.7.10
  • TensorFlow:2.3
  • matplotlib:3.3.4
  • lxml:4.7.1

最近要用TensorFlow做20種水果識別,對剛入手的數據集,開始對數據集進行檢驗。

原圖如下:

以下是通過精靈標注助手生成的xml 文件

<?xml version="1.0" ?> <annotation> <folder>菠蘿</folder> <filename>pineapple.jpg</filename> <path>C:\Users\Desktop\pineapple.jpg</path> <source><database>Unknown</database> </source> <size><width>730</width><height>413</height><depth>3</depth> </size><segmented>0</segmented><object><name>菠蘿</name><pose>Unspecified</pose><truncated>0</truncated><difficult>0</difficult><bndbox><xmin>125</xmin><ymin>112</ymin><xmax>543</xmax><ymax>400</ymax></bndbox> </object><object><name>菠蘿</name><pose>Unspecified</pose><truncated>0</truncated><difficult>0</difficult><bndbox><xmin>547</xmin><ymin>97</ymin><xmax>721</xmax><ymax>390</ymax></bndbox> </object> </annotation>

安裝 matplotlib

pip install matplotlib

安裝 lxml

pip install lxml

通過以下代碼將xml中繪畫的矩形框顯示到圖片中。

import tensorflow as tf import matplotlib.pyplot as plt from lxml import etree from matplotlib.patches import Rectangle # 繪制矩形框img = tf.io.read_file(r'./pineapple.jpg')img = tf.image.decode_jpeg(img) # 對圖像進行解碼 print(img.shape) plt.imshow(img) plt.show()xml = open(r'./pineapple.xml', encoding='utf-8').read() # 讀取 xml文件 sel = etree.HTML(xml) # 對 xml 文件進行解析 width = sel.xpath('//size/width/text()')[0] # 獲取圖片的寬 height = sel.xpath('//size/height/text()')[0] # 獲取圖片的高 bndbox = sel.xpath('//bndbox') ax = plt.gca() # 獲取當前圖像 for i in range(0, len(bndbox)):xmin = sel.xpath('//bndbox/xmin/text()')[i]ymin = sel.xpath('//bndbox/ymin/text()')[i]xmax = sel.xpath('//bndbox/xmax/text()')[i]ymax = sel.xpath('//bndbox/ymax/text()')[i]xmin = int(xmin)ymin = int(ymin)xmax = int(xmax)ymax = int(ymax)plt.imshow(img.numpy())rect = Rectangle((xmin, ymin), (xmax - xmin), (ymax - ymin), fill=False, color='red') # fill=False 不需要填充ax.axes.add_patch(rect) # 添加矩形框 plt.show()

還原出入手的數據集用精靈標注助手標記的效果如下:

由于發現數據集中有多邊形和矩形框數據混合,所以通過以下代碼區分開來

以上xml文件一個一個的點開查看比較麻煩,用以下代碼進行處理查看:

import ostry:import xml.etree.cElementTree as ET except ImportError:import xml.etree.ElementTree as ET# xml文件路徑 txt_path = 'C:\\Users\\vvcat\\Desktop\\xxx\\xxxxx\\outputs2\\'for txt_file in os.listdir(txt_path):txt_name = os.path.splitext(txt_file)[0] #獲取文件名txt_suffix = os.path.splitext(txt_file)[1] # 獲取后綴# print(txt_name, txt_suffix)file_name_path = txt_path + txt_name + txt_suffixroot = ET.parse(file_name_path)bndboxs = root.getiterator("bndbox")if bndboxs == []:print(txt_name + txt_suffix) # 打印包含多邊形框的xml文件

效果如下:

打開A(1).xml文件,內容如下:

通過以下代碼批量將xml中繪畫的矩形框顯示到圖片中,并保存成新的圖片。

import tensorflow as tf import matplotlib.pyplot as plt from lxml import etree from matplotlib.patches import Rectangle # 繪制矩形框 import glob import osimages = glob.glob('./inputs/*.jpg') xmls = glob.glob('./outputs/*.xml') xmls_names = [x.split('\\')[-1].split('.xml')[0] for x in xmls] images_names = [x.split('\\')[-1].split('.jpg')[0] for x in images] names = list(set(images_names) & set(xmls_names)) imgs = [img for img in images if img.split('\\')[-1].split('.jpg')[0] in names] #根據名稱排序 imgs.sort(key=lambda x: x.split('\\')[-1].split('.jpg')[0]) xmls.sort(key=lambda x: x.split('\\')[-1].split('.xml')[0])dstfile = './output_image/' fpath = os.path.dirname(dstfile) # 獲取文件路徑 if not os.path.exists(fpath):os.makedirs(fpath) # 沒有就創建路徑 images_names = ''for i in range(0, len(xmls)):img = tf.io.read_file(imgs[i])img = tf.image.decode_jpeg(img) # 對圖像進行解碼xml = open(xmls[i], encoding='utf-8').read() # 讀取 xml文件sel = etree.HTML(xml) # 對 xml 文件進行解析width = sel.xpath('//size/width/text()')[0] # 獲取圖片的寬height = sel.xpath('//size/height/text()')[0] # 獲取圖片的高bndbox = sel.xpath('//bndbox')ax = plt.gca() # 獲取當前圖像for j in range(0, len(bndbox)):xmin = sel.xpath('//bndbox/xmin/text()')[j]ymin = sel.xpath('//bndbox/ymin/text()')[j]xmax = sel.xpath('//bndbox/xmax/text()')[j]ymax = sel.xpath('//bndbox/ymax/text()')[j]xmin = int(xmin)ymin = int(ymin)xmax = int(xmax)ymax = int(ymax)plt.imshow(img.numpy())rect = Rectangle((xmin, ymin), (xmax - xmin), (ymax - ymin), fill=False, color='red') # fill=False 不需要填充ax.axes.add_patch(rect) # 添加矩形框images_names = imgs[i].split('\\')[-1]plt.savefig(dstfile + images_names)# plt.show()plt.close()

總結

以上是生活随笔為你收集整理的TensorFlow 对数据集标记的xml文件解析记录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。