【问题标题】:How to convert XML Files into Text files (YOLOV3 Format) for object detection如何将 XML 文件转换为文本文件(YOLOV3 格式)以进行对象检测
【发布时间】:2022-08-16 17:33:15
【问题描述】:

我们如何将 XML 注释文件夹转换为文本或 YOLOv3 格式进行检测???我使用此代码进行转换,但它只需要一个 xml 图像并转换为 .txt ..但我想一次转换我的完整文件夹。您有任何简单的解决方案将 xml 文件转换为文本文件。我有 15000 多张图片。

from xml.dom import minidom
import os
import glob

lut={}
lut[\"14111\"] =0
lut[\"14131\"] =1
lut[\"14141\"] =2

def convert_coordinates(size, box):
  dw = 1.0/size[0]
  dh = 1.0/size[1]
  x = (box[0]+box[1])/2.0
  y = (box[2]+box[3])/2.0
  w = box[1]-box[0]
  h = box[3]-box[2]
  x = x*dw
  w = w*dw
  y = y*dh
  h = h*dh
  return (x,y,w,h)


def convert_xml2yolo( lut ):

  for fname in glob.glob(\"/content/gdrive/MyDrive/Dataset /Annotation/14111_00000002.xml\"):
      
      xmldoc = minidom.parse(fname)
      
      fname_out = (fname[:-4]+\'.txt\')

      with open(fname_out, \"w\") as f:

          itemlist = xmldoc.getElementsByTagName(\'object\')
          size = xmldoc.getElementsByTagName(\'size\')[0]
          width = int((size.getElementsByTagName(\'width\')[0]).firstChild.data)
          height = int((size.getElementsByTagName(\'height\')[0]).firstChild.data)

          for item in itemlist:
              # get class label
              classid =  (item.getElementsByTagName(\'name\')[0]).firstChild.data
              if classid in lut:
                  label_str = str(lut[classid])
              else:
                  label_str = \"-1\"
                  print (\"warning: label \'%s\' not in look-up table\" % classid)

              # get bbox coordinates
              xmin = ((item.getElementsByTagName(\'bndbox\')[0]).getElementsByTagName(\'xmin\')[0]).firstChild.data
              ymin = ((item.getElementsByTagName(\'bndbox\')[0]).getElementsByTagName(\'ymin\')[0]).firstChild.data
              xmax = ((item.getElementsByTagName(\'bndbox\')[0]).getElementsByTagName(\'xmax\')[0]).firstChild.data
              ymax = ((item.getElementsByTagName(\'bndbox\')[0]).getElementsByTagName(\'ymax\')[0]).firstChild.data
              b = (float(xmin), float(xmax), float(ymin), float(ymax))
              bb = convert_coordinates((width,height), b)
              #print(bb)

              f.write(label_str + \" \" + \" \".join([(\"%.6f\" % a) for a in bb]) + \'\\n\')

      print (\"wrote %s\" % fname_out)



def main():
  convert_xml2yolo( lut )


if __name__ == \'__main__\':
  main()

    标签: python xml google-colaboratory yolo yolov4


    【解决方案1】:

    关注this github 存储库。

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案2】:

    你只需要编辑这一行:

    for fname in glob.glob("/content/gdrive/MyDrive/Dataset/Annotation/*.xml"):
    

    这意味着您将读取 Annotation 文件夹中的所有 .xml 文件并将它们转换为 .txt 文件。

    【讨论】:

      猜你喜欢
      • 2019-07-15
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      • 1970-01-01
      • 2012-12-20
      相关资源
      最近更新 更多