最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python 批量修改 labelImg 生成的xml文件的方法

 更新時(shí)間:2019年09月09日 10:00:01   作者:Miscellaneous0712  
這篇文章主要介紹了python 批量修改 labelImg 生成的xml文件的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

概述

自己在用labelImg打好標(biāo)簽后,想只用其中幾類訓(xùn)練,不想訓(xùn)練全部類別,又不想重新打標(biāo)生成.xml文件,因此想到這個(gè)辦法:直接在.xml文件中刪除原有的不需要的標(biāo)簽類及其屬性。

打標(biāo)時(shí)標(biāo)簽名出現(xiàn)了大小寫(工程量大時(shí)可能會(huì)手滑),程序中有改寫標(biāo)簽值為小寫的過程,因?yàn)槲易鰌y-faster-rcnn 訓(xùn)練時(shí),標(biāo)簽必須全部為小寫。

以如下的.xml文件為例,我故意把標(biāo)簽增加了大寫

<annotation verified="yes">
 <filename>test.jpg</filename>
 <path>C:\Users\yasin\Desktop\test</path>
 <source>
 <database>Unknown</database>
 </source>
 <size>
 <width>400</width>
 <height>300</height>
 <depth>3</depth>
 </size>
 <segmented>0</segmented>
 <object>
 <name>People</name>
 <pose>Unspecified</pose>
 <truncated>0</truncated>
 <difficult>0</difficult>
 <bndbox>
  <xmin>80</xmin>
  <ymin>69</ymin>
  <xmax>144</xmax>
  <ymax>89</ymax>
 </bndbox>
 </object>
 <object>
 <name>CAT</name>
 <pose>Unspecified</pose>
 <truncated>0</truncated>
 <difficult>0</difficult>
 <bndbox>
  <xmin>40</xmin>
  <ymin>69</ymin>
  <xmax>143</xmax>
  <ymax>16</ymax>
 </bndbox>
 </object>
 <object>
 <name>dog</name>
 <pose>Unspecified</pose>
 <truncated>0</truncated>
 <difficult>0</difficult>
 <bndbox>
  <xmin>96</xmin>
  <ymin>82</ymin>
  <xmax>176</xmax>
  <ymax>87</ymax>
 </bndbox>
 </object> 
</annotation>

具體實(shí)現(xiàn)

假如我們只想保留圖片上的people和cat類,其他都刪除,代碼如下:

from xml.etree.ElementTree import ElementTree
from os import walk, path

def read_xml(in_path):
  tree = ElementTree()
  tree.parse(in_path)
  return tree

def write_xml(tree, out_path):
  tree.write(out_path, encoding="utf-8", xml_declaration=True)

def find_nodes(tree, path):
  return tree.findall(path)

def del_node_by_target_classes(nodelist, target_classes_lower, tree_root):
  for parent_node in nodelist:
    children = parent_node.getchildren()
    if (parent_node.tag == "object" and children[0].text.lower() not in target_classes_lower):
      tree_root.remove(parent_node)
    elif (parent_node.tag == "object" and children[0].text.lower() in target_classes_lower):
      children[0].text = children[0].text.lower()

def get_fileNames(rootdir):
  data_path = []
  prefixs = []
  for root, dirs, files in walk(rootdir, topdown=True):
    for name in files:
      pre, ending = path.splitext(name)
      if ending != ".xml":
        continue
      else:
        data_path.append(path.join(root, name))
        prefixs.append(pre)

  return data_path, prefixs

if __name__ == "__main__":
  # get all the xml paths, prefixes if not used here
  paths_xml, prefixs = get_fileNames("/home/yasin/old_labels/")

  target_classes = ["PEOPLE", "CAT"] # target flags you want to keep

  target_classes_lower = []
  for i in range(len(target_classes)):
    target_classes_lower.append(target_classes[i].lower()) # make sure your target is lowe-case

  # print(target_classes_lower)
  for i in range(len(paths_xml)):
    # rename and save the corresponding xml
    tree = read_xml(paths_xml[i])
    
    # get tree node
    tree_root = tree.getroot()

    # get parent nodes
    del_parent_nodes = find_nodes(tree, "./")
    
    # get target classes and delete
    target_del_node = del_node_by_target_classes(del_parent_nodes, target_classes_lower, tree_root)
    
    # save output xml, 000001.xml
    write_xml(tree, "/home/yasin/new_labels/{}.xml".format("%06d" % i))

按照上述代碼,示例.xml變?yōu)槿缦?xml,可以看出我們刪除了除people和cat類的類別(即dog類),并把保留類別的打標(biāo)改成了小寫:

<?xml version='1.0' encoding='utf-8'?>
<annotation verified="yes">
 <filename>test.jpg</filename>
 <path>C:\Users\yasin\Desktop\test</path>
 <source>
 <database>Unknown</database>
 </source>
 <size>
 <width>400</width>
 <height>300</height>
 <depth>3</depth>
 </size>
 <segmented>0</segmented>
 <object>
 <name>people</name>
 <pose>Unspecified</pose>
 <truncated>0</truncated>
 <difficult>0</difficult>
 <bndbox>
  <xmin>80</xmin>
  <ymin>69</ymin>
  <xmax>144</xmax>
  <ymax>89</ymax>
 </bndbox>
 </object>
 <object>
 <name>cat</name>
 <pose>Unspecified</pose>
 <truncated>0</truncated>
 <difficult>0</difficult>
 <bndbox>
  <xmin>40</xmin>
  <ymin>69</ymin>
  <xmax>143</xmax>
  <ymax>16</ymax>
 </bndbox>
 </object>
</annotation>

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python 如何將office文件轉(zhuǎn)換為PDF

    python 如何將office文件轉(zhuǎn)換為PDF

    這篇文章主要介紹了python 如何將office文件轉(zhuǎn)換為PDF,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-09-09
  • Python第三方包PrettyTable安裝及用法解析

    Python第三方包PrettyTable安裝及用法解析

    這篇文章主要介紹了Python第三方包PrettyTable安裝及用法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 8種用Python實(shí)現(xiàn)線性回歸的方法對(duì)比詳解

    8種用Python實(shí)現(xiàn)線性回歸的方法對(duì)比詳解

    這篇文章主要介紹了8種用Python實(shí)現(xiàn)線性回歸的方法對(duì)比詳解,說到如何用Python執(zhí)行線性回歸,大部分人會(huì)立刻想到用sklearn的linear_model,但事實(shí)是,Python至少有8種執(zhí)行線性回歸的方法,sklearn并不是最高效的,需要的朋友可以參考下
    2019-07-07
  • web.py在模板中輸出美元符號(hào)的方法

    web.py在模板中輸出美元符號(hào)的方法

    這篇文章主要介紹了web.py在模板中輸出美元符號(hào)的方法,即在web.py的模板中輸出$符號(hào)的方法,需要的朋友可以參考下
    2014-08-08
  • pandas中Series運(yùn)算匯總(算術(shù)、比較和邏輯運(yùn)算)

    pandas中Series運(yùn)算匯總(算術(shù)、比較和邏輯運(yùn)算)

    本文主要介紹了pandas中Series運(yùn)算匯總,包括算術(shù)運(yùn)算、比較運(yùn)算和邏輯運(yùn)算等,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • Python的高階函數(shù)用法實(shí)例分析

    Python的高階函數(shù)用法實(shí)例分析

    這篇文章主要介紹了Python的高階函數(shù)用法,結(jié)合實(shí)例形式分析了Python針對(duì)字符串、列表轉(zhuǎn)換、運(yùn)算、過濾等操作函數(shù)相關(guān)使用技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-04-04
  • Django對(duì)models里的objects的使用詳解

    Django對(duì)models里的objects的使用詳解

    今天小編就為大家分享一篇Django對(duì)models里的objects的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • pycharm無法安裝cv2模塊問題及解決方案

    pycharm無法安裝cv2模塊問題及解決方案

    這篇文章主要介紹了pycharm無法安裝cv2模塊問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • python3實(shí)現(xiàn)ftp服務(wù)功能(服務(wù)端 For Linux)

    python3實(shí)現(xiàn)ftp服務(wù)功能(服務(wù)端 For Linux)

    這篇文章主要介紹了python3實(shí)現(xiàn)ftp服務(wù)功能,服務(wù)端 For Linux,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • python函數(shù)遞歸調(diào)用的實(shí)現(xiàn)

    python函數(shù)遞歸調(diào)用的實(shí)現(xiàn)

    本文主要介紹了python函數(shù)遞歸調(diào)用的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05

最新評(píng)論

双牌县| 寻乌县| 常州市| 荔波县| 苏尼特左旗| 体育| 镇宁| 吉安市| 姜堰市| 榆林市| 三明市| 保山市| 榆林市| 沙河市| 政和县| 仁怀市| 安顺市| 金平| 涿州市| 武义县| 通渭县| 靖江市| 宜兴市| 韩城市| 苍溪县| 青铜峡市| 双鸭山市| 东源县| 贵定县| 麻城市| 柘荣县| 阿合奇县| 章丘市| 富宁县| 广东省| 修水县| 科尔| 孝昌县| 竹溪县| 宁陕县| 崇阳县|