亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

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

系統 2648 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條評論
主站蜘蛛池模板: 亚洲国产日韩欧美高清片a 亚洲国产日韩欧美一区二区三区 | 国产精品福利自产拍网站 | 四虎影院永久网址 | 日日日操操操 | 黄色在线观看免费 | 久久99这里只有精品 | 色综合天天综合给合国产 | 国产成人精品免费 | 热er99久久6国产精品免费 | 99视频全部看免费观 | 色婷婷狠狠久久综合五月 | 久久久青青 | 国产精品久久天天影视 | 日本免费黄色小视频 | 久久婷婷久久一区二区三区 | 亚洲小视频在线播放 | 亚洲综合精品一区 | 91在线免费公开视频 | 我爱avav | 免费不卡中文字幕在线 | 精品福利在线视频 | 欧美亚洲国产精品久久久久 | 日日夜夜天天干 | 色爱综合网欧美 | 欧美高清在线视频一区二区 | 久九色| 色中色综合 | 99久久精品无码一区二区毛片 | 操穴网 | 国产精品麻豆a啊在线观看 国产精品麻豆高清在线观看 | 成人欧美精品大91在线 | 欧美亚洲在线 | 亚洲第五色综合网 | 亚洲最大成人网 色香蕉 | 亚洲精品一区二区三区美女 | 真人毛片免费拍拍拍aa视频 | 久久这里只有精品99 | 国产日韩精品一区二区 | 国产成人综合日韩精品婷婷九月 | 中中文字幕亚州无线码 | 九九视频免费观看 |