<annotation>
<folder>big_img</folder>
<filename>0a9dc8416fd4dcab1507468491.jpg</filename>
<path>/Users/zcunyi/zcy_projects/guangdong/data/big_img/0a9dc8416fd4dcab1507468491.jpg</path>
<source>
<database>Unknown</database>
</source>
<size>
<width>2446</width>
<height>1000</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>small</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>437</xmin>
<ymin>200</ymin>
<xmax>1165</xmax>
<ymax>358</ymax>
</bndbox>
</object>
<object>
<name>big</name>
<pose>Unspecified</pose>
<truncated>1</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>84</xmin>
<ymin>60</ymin>
<xmax>2446</xmax>
<ymax>498</ymax>
</bndbox>
</object>
</annotation>
file = '/Users/zcunyi/Downloads/guangdong1_round1_train1_20190809/Annotations/gt_result.json'
file_path = '/Users/zcunyi/Downloads/guangdong1_round1_train1_20190809/defect_Images/'
cut_target_path ='/Users/zcunyi/zcy_projects/guangdong/data/cut_target/'
# save_path = '/Users/zcunyi/zcy_projects/guangdong/data/visual_data/'
# import json
# import numpy as np
# import pandas as pd
#
# defect_name2label = {
# '破洞': 1, '水渍': 2, '油渍': 2, '污渍': 2, '三丝': 3, '结头': 4, '花板跳': 5, '百脚': 6, '毛粒': 7,
# '粗经': 8, '松经': 9, '断经': 10, '吊经': 11, '粗维': 12, '纬缩': 13, '浆斑': 14, '整经结': 15, '星跳': 16, '跳花': 16,
# '断氨纶': 17, '稀密档': 18, '浪纹档': 18, '色差档': 18, '磨痕': 19, '轧痕': 19, '修痕': 19, '烧毛痕': 19, '死皱': 20, '云织': 20,
# '双纬': 20, '双经': 20, '跳纱': 20, '筘路': 20, '纬纱不良': 20,
# }
#
# result = []
# with open('anno_train.json', 'r') as f:
# data = json.load(f)
# for row in data:
# bbox = np.asarray(row['bbox'])
# defect_name = row['defect_name']
# result.append(['guangdong1_round1_train1_20190818', row['name'], defect_name, defect_name2label[defect_name], bbox[0], bbox[2], bbox[1], bbox[3]])
# with open('anno_train2.json', 'r') as f:
# data = json.load(f)
# for row in data:
# bbox = np.asarray(row['bbox'])
# defect_name = row['defect_name']
# result.append(['guangdong1_round1_train2_20190828', row['name'], defect_name, defect_name2label[defect_name], bbox[0], bbox[2], bbox[1], bbox[3]])
#
# data = pd.DataFrame(result)
# data.columns = ['source', 'name', 'defect_name', 'lable','xmin', 'xmax', 'ymin', 'ymax']
# combine = data.groupby('name')
# for index, data in combine:
#
# xmin = data['xmin'].values
# xmax = data['xmax'].values
# ymin = data['ymin'].values
# ymax = data['ymax'].values
import json
import numpy as np
import pandas as pd
import cv2
import os
import shutil
anno_0818 = '/Users/zcunyi/Downloads/guangdong1_round1_train1_20190818/Annotations/anno_train.json'
anno_0828 = '/Users/zcunyi/Downloads/guangdong1_round1_train2_20190828/Annotations/anno_train.json'
file_path = 'data/merge_data/defect_Images/'
save_path = 'data/visual_merge/'
small_path = 'data/min_img/'
small_cut_path = '/Users/zcunyi/zcy_projects/guangdong/data/min_cut/'
big_path = 'data/big_img/'
big_cut_path = 'data/big_cut_img/'
cut_csv_filepath = 'data/min_cut_file.csv'
defect_name2label = {
'破洞': 1, '水渍': 2, '油渍': 2, '污渍': 2, '三丝': 3, '结头': 4, '花板跳': 5, '百脚': 6, '毛粒': 7,
'粗经': 8, '松经': 9, '断经': 10, '吊经': 11, '粗维': 12, '纬缩': 13, '浆斑': 14, '整经结': 15, '星跳': 16, '跳花': 16,
'断氨纶': 17, '稀密档': 18, '浪纹档': 18, '色差档': 18, '磨痕': 19, '轧痕': 19, '修痕': 19, '烧毛痕': 19, '死皱': 20, '云织': 20,
'双纬': 20, '双经': 20, '跳纱': 20, '筘路': 20, '纬纱不良': 20,
}
result = []
with open(anno_0818, 'r') as f:
data = json.load(f)
for row in data:
bbox = np.asarray(row['bbox'])
defect_name = row['defect_name']
result.append(['guangdong1_round1_train1_20190818', row['name'], defect_name, defect_name2label[defect_name], bbox[0], bbox[2], bbox[1], bbox[3]])
with open(anno_0828, 'r') as f:
data = json.load(f)
for row in data:
bbox = np.asarray(row['bbox'])
defect_name = row['defect_name']
result.append(['guangdong1_round1_train2_20190828', row['name'], defect_name, defect_name2label[defect_name], bbox[0], bbox[2], bbox[1], bbox[3]])
data = pd.DataFrame(result)
data.columns = ['source', 'name', 'defect_name', 'label','xmin', 'xmax', 'ymin', 'ymax']
combine = data.groupby('name')
def cut_image(img,xmin, ymin, xmax, ymax,show=0):
a = min(xmin)
b = max(xmax)
c = min(ymin)
d = max(ymax)
# image_path = os.path.join(file_path, filename)
# image = cv2.imread(image_path)[0:1500, :, :]
# image=cv2.imread(image_path)[0:640,0:640,:] #HWC
image_cut=None
# img = img
h = int(d - c)
w = int(b - a)
# if h <= 600:
# ax.append(index)
if h <= 600 and w <= 600:
# ax.append(index)
# if h <= 639 and w <= 639:
# ax.append(index)
# if h <= 800 and w <= 800:
# ay.append(index)
# print('ax',len(ax))
# print('ay',len(ay))
# print("True")
# shutil.copy(os.path.join(save_path,index),os.path.join(small_path,index))
# else:
# shutil.copy(os.path.join(save_path, index), os.path.join(big_path, index))
if int(a) < 40:
x1 = 0
x2 = 640
img_left = img[:, x1:x2, :]
if int(c) < 40:
y1 = 0
y2 = 640
img_cut = img_left[y1:y2, :, :]
elif int(c) < 360:
y1 = int(c) - 30
y2 = int(c) + 610
ymin = [i - 30 for i in ymin]
ymax = [i - 30 for i in ymax]
img_cut = img_left[y1:y2, :, :]
elif int(c) >= 360:
y1 = 360
y2 = 1000
ymin = [i - 360 for i in ymin]
ymax = [i - 360 for i in ymax]
img_cut = img_left[y1:y2, :, :]
elif int(a) < 1806:
x1 = int(a) - 30
x2 = int(a) + 610
img_middle = img[:, x1:x2, :]
xmin = [i - 30 for i in xmin]
xmax = [i - 30 for i in xmax]
if int(c) < 40:
y1 = 0
y2 = 640
img_cut = img_middle[y1:y2, :, :]
elif int(c) < 360:
y1 = int(c) - 30
y2 = int(c) + 610
ymin = [i - 30 for i in ymin]
ymax = [i - 30 for i in ymax]
img_cut = img_middle[y1:y2, :, :]
elif int(c) >= 360:
y1 = 360
y2 = 1000
ymin = [i - 360 for i in ymin]
ymax = [i - 360 for i in ymax]
img_cut = img_middle[y1:y2, :, :]
elif int(a) >= 1806:
x1 = 1806
x2 = 2446
img_right = img[:, x1:x2, :]
xmin = [i - 1806 for i in xmin]
xmax = [i - 1806 for i in xmax]
if int(c) < 40:
y1 = 0
y2 = 640
img_cut = img_right[y1:y2, :, :]
elif int(c) < 360:
y1 = int(c) - 30
y2 = int(c) + 610
ymin = [i - 30 for i in ymin]
ymax = [i - 30 for i in ymax]
img_cut = img_right[y1:y2, :, :]
elif int(c) >= 360:
y1 = 360
y2 = 1000
ymin = [i - 360 for i in ymin]
ymax = [i - 360 for i in ymax]
img_cut = img_right[y1:y2, :, :]
return img_cut,xmin, ymin, xmax, ymax
else:
return
def write_csv_and_save_img(image_cut,x1, y1, x2, y2,label,filename):
if len(x1) == 1:
# print(image_cut)
# print(1111,small_cut_path + filename, image_cut)
cv2.imwrite(small_cut_path + filename, image_cut)
with open(cut_csv_filepath,'a') as f:
f.write(str(filename)+','+str(x1[0])+','+str(y1[0])+','+str(x2[0])+','+str(y2[0])+','+str(label[0])+'\n')
else:
l = len(x1)
cv2.imwrite(small_cut_path + filename, image_cut)
for i in range(l):
xmin = x1[i]
ymin = y1[i]
xmax = x2[i]
ymax = y2[i]
lab = label[i]
with open(cut_csv_filepath,'a') as f:
f.write(str(filename)+','+str(xmin)+','+str(ymin)+','+str(xmax)+','+str(ymax)+','+str(lab)+'\n')
i = 0
for index, data in combine:
img = cv2.imread(file_path + str(index))
img = img[0:1000, :, :]
# a = min(data['xmin'].values.tolist())
# b = max(data['xmax'].values.tolist())
# c = min(data['ymin'].values.tolist())
# d = max(data['ymax'].values.tolist())
xmin = data['xmin'].values.tolist()
xmax = data['xmax'].values.tolist()
ymin = data['ymin'].values.tolist()
ymax = data['ymax'].values.tolist()
label = data['label'].values.tolist()
img_file = cut_image(img, xmin, ymin, xmax, ymax)
if img_file is not None:
cut_img, xmin, xmax, ymin, ymax = img_file
write_csv_and_save_img(cut_img, xmin, xmax, ymin, ymax, label, index)
i+=1
print(i)
# xmin = data['xmin'].values
# xmax = data['xmax'].values
# ymin = data['ymin'].values
# ymax = data['ymax'].values
# save_file = open('save_file.csv','w')
# h_count = []
# w_count = []
# for index, data in combine:
# img = cv2.imread(file_path + str(index))
# xmin = data['xmin'].values
# xmax = data['xmax'].values
# ymin = data['ymin'].values
# ymax = data['ymax'].values
# label = data['lable']
# a = max(data['xmin'].values.tolist())
# b = max(data['xmax'].values.tolist())
# c = max(data['ymin'].values.tolist())
# d = max(data['ymax'].values.tolist())
# label_dir = save_path + str(label)
# # 对每张图所有bbox可视化并保存
# length = len(xmin)
# xmin = data['xmin'].values.tolist()
# xmax = data['xmax'].values.tolist()
# ymin = data['ymin'].values.tolist()
# ymax = data['ymax'].values.tolist()
# for i in range(length):
# x1,y1,x2,y2 = int(xmin[i]),int(ymin[i]),int(xmax[i]),int(ymax[i])
# cv2.rectangle(img, (x1,y1),(x2,y2),(0,0,255))
# cv2.imwrite(save_path+'/'+index, img)
# 统计所有bbox并集长宽
# h = d-c
# w = b-a
# h_count.append(h)
# w_count.append(w)
# print(a)
# print(xmin.shape)
# if ' ' in xmin:
# print(xmin)
# line = index + ',' + str(xmin) + ',' + str(xmax) + ',' + str(ymin) + ',' + str(ymax) + '\n'
# save_file.write(line)