Tensorflow 构建自己的目标检测与识别模型之数据增强(二)
上次的博客中对如何安装Tensorflow Object Detection API的步骤及所遇到的问题进行说明。见链接:https://blog.csdn.net/weixin_41644725/article/details/83007901
接下来,对图像数据进行图像增强。虽然在配置.config文件(后面会说到)时,其中会提到数据增强(data argumentation),但是若是想手动实现,可参考本文,若不想则跳过即可。
1.用labelImage工具生成.xml文件。
该工具的界面如图所示,关于如何安装labelImage,可参考网上的相关博客,在windows和Linux下都有相应的安装过程,此处不叙述安装过程。其中“Open Dir”为打开存储所有图像文件的文件夹。“Change Save Dir”为将生成的.xml文件存储在指定文件夹下面。“Save”表示保存当前的.xml文件。
xml文件的格式如下图所示:
2. xml 转成csv文件
(1)将xml文件转成csv文件代码如下:
import os
import glob
import pandas as pd
import xml.etree.ElementTree as ET
def xml_to_csv(path):
xml_list = []
for xml_file in glob.glob(path + '/*.xml'):
tree = ET.parse(xml_file)
root = tree.getroot()
for member in root.findall('object'):
value = (root.find('filename').text,
int(root.find('size')[0].text),
int(root.find('size')[1].text),
member[0].text,
int(member[4][0].text),
int(member[4][1].text),
int(member[4][2].text),
int(member[4][3].text)
)
xml_list.append(value)
column_name = ['filename', 'width', 'height', 'class', 'xmin', 'ymin', 'xmax', 'ymax']
xml_df = pd.DataFrame(xml_list, columns=column_name)
return xml_df
def main():
xml_path = './xml' #存储xml的文件夹
xml_df = xml_to_csv(xml_path)
xml_df.to_csv('./csv/class.csv', index=None) #生成csv文件并存储在该路径下
print('Successfully converted xml to csv.')
main()
(2)得到该图像中对应类的边界框(bounding box),代码如下:
import os
import cv2
import pandas as pd
import matplotlib.pyplot as plt
def get_bbox(image_name,csv_path):
full_labels = pd.read_csv(csv_path)
selected_value = full_labels[full_labels.filename == image_name]
images_bbox = []
img_class = ''
for index,row in selected_value.iterrows():
list_bbox = []
list_bbox.append(row['xmin'])
list_bbox.append(row['ymin'])
list_bbox.append(row['xmax'])
list_bbox.append(row['ymax'])
list_bbox.append(image_name)
img_class = row['class']
images_bbox.append(list_bbox)
return images_bbox,img_class
img_path = '023.jpg'
csv_path = ''./csv/class.csv''
img = cv2.imread(img_path)
b, g, r = cv2.split(img)
img = cv2.merge([r, g, b])
image = cv2.GaussianBlur(img, (3, 3), 0)
coords = get_bbox(img_path)
coords = [coord[:4] for coord in coords]
for i in range(len(coords)):
bbox =