contest

<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)



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章