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

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

系統 3015 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毛片在线播出 | 中文字幕一区二区在线视频 | 久久日韩精品 | 九九视频在线观看视频 | 777精品视频| 亚洲国产精久久久久久久 | 手机看片福利日韩国产 | 久久精品国产大片免费观看 | 91手机在线观看 | 天天做天天爱天天爽 | 丁香狠狠色婷婷久久综合 | 国产91在线|亚洲 | 精品一区二区三区中文字幕 | 日日摸夜夜添夜夜添人人爽 | 国产视频99 | 五月婷婷视频在线 | 久久99精品国产麻豆婷婷 | 在线播放a 1| 久青草国产在线视频_久青草免 | 国产精品亚洲片在线观看麻豆 | 亚洲精品久久久久久久久久久网站 | 日韩在线欧美高清一区 | 国产精品免费入口视频 | 亚洲免费一级视频 | 日本欧洲亚洲一区在线观看 | 欧美一级特黄一片免费 | 全部免费的毛片在线看青青 | 国产精品免费观在线 | 不卡国产在线 | 国产在线精品一区二区三区不卡 | 久久精品视频国产 | 国产精品网页 | 国产精品亚洲欧美日韩区 | 欧美成人黄色网 | 四虎在线影院 | 91久久综合九色综合欧美亚洲 | 一区二区三区在线免费观看视频 | 久久99久久99精品观看 |