前提描述:关于目标检测方面,在做实际项目时,现实场景中遇到的环境相较于样本集来说可能会复杂很多,比如我所做的桥梁表观病害检测,拍摄的图片中许多图片里面是没有病害的,而且存在许多与要检测病害相似的样本,所以如果不做负样本的话,就会存在很多误检的样本产生;于是我们就需要将许多没有病害的图片来制作负样本,而这些负样本如果数量庞大的话,手工制作将会是很大的体力活,所以我们就需要用代码来解决;
代码功能:提供需要做标签的图片,就能生成对应的”无坐标“的xml文件用于训练,代码如下:
#! /usr/bin/python
# -*- coding:UTF-8 -*-
import os, sys
import glob
from PIL import Image
# VEDAI 图像存储位置
src_img_dir = "/home/lehui/Desktop/负样本700"
# VEDAI 图像生成的xml文件存放位置
src_xml_dir = "/home/lehui/Desktop/xml"
img_Lists = glob.glob(src_img_dir + '/*.jpg')
img_basenames = [] # e.g. 100.jpg
for item in img_Lists:
img_basenames.append(os.path.basename(item))
img_names = [] # e.g. 100
for item in img_basenames:
temp1, temp2 = os.path.splitext(item)
img_names.append(temp1)
for img in img_names:
im = Image.open((src_img_dir + '/' + img + '.jpg'))
width, height = im.size
# write in xml file
#os.mknod(src_xml_dir + '/' + img + '.xml')
xml_file = open((src_xml_dir + '/' + img + '.xml'), 'w')
xml_file.write('<annotation>\n')
xml_file.write(' <folder>VOC2007</folder>\n')
xml_file.write(' <filename>' + str(img) + '.jpg' + '</filename>\n')
xml_file.write(' <path>'+ src_xml_dir + '/' + str(img) + '.jpg' + '</path>\n')
xml_file.write(' <source>\n')
xml_file.write(' <database>' + "Unknow" + '</database>\n')
xml_file.write(' </source>\n')
xml_file.write(' <size>\n')
xml_file.write(' <width>' + str(width) + '</width>\n')
xml_file.write(' <height>' + str(height) + '</height>\n')
xml_file.write(' <depth>3</depth>\n')
xml_file.write(' </size>\n')
xml_file.write(' <segmented>0</segmented>\n')
xml_file.write('</annotation>')
结果如图所示:
喜欢就点个赞(≧▽≦)/!