欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

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

系統 2738 0

概述

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

打標時標簽名出現了大小寫(工程量大時可能會手滑),程序中有改寫標簽值為小寫的過程,因為我做py-faster-rcnn 訓練時,標簽必須全部為小寫。

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

            
              
                test.jpg
              
              
                C:\Users\yasin\Desktop\test
              
              
                
                  Unknown
                
              
              
                
                  400
                
                
                  300
                
                
                  3
                
              
              
                0
              
              
                
                  People
                
                
                  Unspecified
                
                
                  0
                
                
                  0
                
                
                  
                    80
                  
                  
                    69
                  
                  
                    144
                  
                  
                    89
                  
                
              
              
                
                  CAT
                
                
                  Unspecified
                
                
                  0
                
                
                  0
                
                
                  
                    40
                  
                  
                    69
                  
                  
                    143
                  
                  
                    16
                  
                
              
              
                
                  dog
                
                
                  Unspecified
                
                
                  0
                
                
                  0
                
                
                  
                    96
                  
                  
                    82
                  
                  
                    176
                  
                  
                    87
                  
                
              
            
          

具體實現

假如我們只想保留圖片上的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變為如下.xml,可以看出我們刪除了除people和cat類的類別(即dog類),并把保留類別的打標改成了小寫:

            
              
                test.jpg
              
              
                C:\Users\yasin\Desktop\test
              
              
                
                  Unknown
                
              
              
                
                  400
                
                
                  300
                
                
                  3
                
              
              
                0
              
              
                
                  people
                
                
                  Unspecified
                
                
                  0
                
                
                  0
                
                
                  
                    80
                  
                  
                    69
                  
                  
                    144
                  
                  
                    89
                  
                
              
              
                
                  cat
                
                
                  Unspecified
                
                
                  0
                
                
                  0
                
                
                  
                    40
                  
                  
                    69
                  
                  
                    143
                  
                  
                    16
                  
                
              
            
          

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 不卡一区 | 亚洲精品视频在线 | 欧美va在线视频 | 久久se精品一区二区国产 | 一级特色黄大片 | 久久久久女人精品毛片 | 欧美成人18性 | 亚洲一区国产视频 | 欧美午夜在线播放 | 三级网站在线播放 | 日韩精品一二区 | 天天操天天干天天操 | 偷拍小美女洗澡在线播放 | 一级一级一级一级毛片 | 午夜在线成人 | 成人免费在线电影 | 久草在线视频资源站 | 中文字幕一区在线观看视频 | 8844aa在线毛片 | 婷婷丝袜 | 国产九色在线 | 成人久久 | 亚洲国产精品二区久久 | 免费99热在线观看 | 成人国产一区二区三区 | 欧美大黄视频 | 特级一级毛片免费看 | 午夜成人免费视频 | 欧美高清正版在线 | 久色乳综合思思在线视频 | 国产黄色三级 | 一级片一级片一级片一级片 | 久久欧美精品1024你懂得 | 久草资源网站 | 久久久久国产精品免费免费搜索 | 99热久久这里只有精品首页 | 日韩国产在线 | 最新色图 | 国产999精品久久久久久 | 天天摸天天碰天天碰 | 色综合色狠狠天天久久婷婷基地 |