zoukankan      html  css  js  c++  java
  • 目标检测_训练数据处理

    1、训练xml中的矩形框到图上并保存:

    # coding=utf-8
    import os
    import xml.dom.minidom
    import cv2 as cv
      
    ImgPath = './JPEGImages/'
    AnnoPath = './Annotations_new/' 
    save_path = './save_JPEGImages/'
    def draw_anchor(ImgPath,AnnoPath,save_path):
      imagelist = os.listdir(ImgPath)
      for image in imagelist:  
        image_pre, ext = os.path.splitext(image)
        imgfile = ImgPath + image
        xmlfile = AnnoPath + image_pre + '.xml'
        DOMTree = xml.dom.minidom.parse(xmlfile)
        collection = DOMTree.documentElement
        img = cv.imread(imgfile)
      
        filenamelist = collection.getElementsByTagName("filename")
        filename = filenamelist[0].childNodes[0].data
        print(filename)
        objectlist = collection.getElementsByTagName("object")  
        for objects in objectlist:
          namelist = objects.getElementsByTagName('name')
          objectname = namelist[0].childNodes[0].data  
          bndbox = objects.getElementsByTagName('bndbox')
          for box in bndbox:
            x1_list = box.getElementsByTagName('xmin')
            x1 = int(x1_list[0].childNodes[0].data)
            y1_list = box.getElementsByTagName('ymin')
            y1 = int(y1_list[0].childNodes[0].data)
            x2_list = box.getElementsByTagName('xmax')  
            x2 = int(x2_list[0].childNodes[0].data)
            y2_list = box.getElementsByTagName('ymax')
            y2 = int(y2_list[0].childNodes[0].data)
            cv.rectangle(img, (x1, y1), (x2, y2), (255, 255, 255), thickness=2)
            cv.putText(img, objectname, (x1, y1), cv.FONT_HERSHEY_COMPLEX, 0.7, (0, 255, 0),
                  thickness=2)
            cv.imwrite(save_path+'/'+filename+'.jpg', img)  
    draw_anchor(ImgPath,AnnoPath,save_path)
    

     2、xml转txt并保存(符合yoloV*训练):

    # coding=utf-8
    import os
    import xml.dom.minidom
    import xml.etree.ElementTree as ET
    
    ImgPath = './JPEGImages/'
    AnnoPath = './Annotations/' 
    save_path = './Labels/'
    
    def convert(size, box):
        dw = 1./size[0]
        dh = 1./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 draw_anchor(ImgPath,AnnoPath,save_path):
      imagelist = os.listdir(ImgPath)
      for image in imagelist:
        image_pre, ext = os.path.splitext(image)
        imgfile = ImgPath + image
        xmlfile = AnnoPath + image_pre + '.xml'
        DOMTree = xml.dom.minidom.parse(xmlfile)
        collection = DOMTree.documentElement
        #img = cv.imread(imgfile)
        
        filenamelist = collection.getElementsByTagName("filename")
        filename = filenamelist[0].childNodes[0].data
        print(filename)
        cls_id = 0
    
        tree=ET.parse(xmlfile)
        root = tree.getroot()
        size = root.find('size')
        w = int(size.find('width').text)
        h = int(size.find('height').text)
        
        out_file = open(save_path+filename+'.txt', 'w')
    
        objectlist = collection.getElementsByTagName("object")
        for objects in objectlist:
          namelist = objects.getElementsByTagName('name')
          objectname = namelist[0].childNodes[0].data
      
          bndbox = objects.getElementsByTagName('bndbox')
          for box in bndbox:
            x1_list = box.getElementsByTagName('xmin')
            x1 = int(x1_list[0].childNodes[0].data)
            y1_list = box.getElementsByTagName('ymin')
            y1 = int(y1_list[0].childNodes[0].data)
            x2_list = box.getElementsByTagName('xmax')  
            x2 = int(x2_list[0].childNodes[0].data)
            y2_list = box.getElementsByTagName('ymax')
            y2 = int(y2_list[0].childNodes[0].data)
            
            b = (float(x1), float(x2), float(y1), float(y2))
            bb = convert((w,h), b)
            out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '
    ')
    
    draw_anchor(ImgPath,AnnoPath,save_path)
    
  • 相关阅读:
    Android基础知识
    使用Android Studio和Genymotion模拟器搭建Andriod开发环境
    【原】Java开发环境搭建
    【转】JavaScript顶级对象参考模型
    【转】在.Net中关于AOP的实现
    【转】各版本IIS下ASP.net请求处理过程区别
    【转】我们应该如何去了解JavaScript引擎的工作原理
    Linux系统编程(27)——线程控制
    Linux系统编程(26)——守护进程
    Linux系统编程(25)——终端
  • 原文地址:https://www.cnblogs.com/wjjcjj/p/14133000.html
Copyright © 2011-2022 走看看