|
@@ -0,0 +1,180 @@
|
|
|
+from mdutils.mdutils import MdUtils
|
|
|
+import os
|
|
|
+import cv2
|
|
|
+import numpy as np
|
|
|
+import requests
|
|
|
+
|
|
|
+
|
|
|
+# url = "http://192.168.199.249:4869"
|
|
|
+
|
|
|
+# 标签是经过归一化的,需要变回来
|
|
|
+# xywh格式 ---> box四个顶点的坐标
|
|
|
+def xywh2lrbt(img_w, img_h, box):
|
|
|
+ c, x, y, w, h = float(box[0]), float(box[1]), float(box[2]), float(box[3]), float(box[4])
|
|
|
+ x = x * img_w # 中心坐标x
|
|
|
+ w = w * img_w # box的宽
|
|
|
+ y = y * img_h # 中心坐标y
|
|
|
+ h = h * img_h # box的高
|
|
|
+
|
|
|
+ lt_x, lt_y = x - w / 2, y - h / 2 # left_top_x, left_top_y
|
|
|
+ lb_x, lb_y = x - w / 2, y + h / 2 # left_bottom_x, left_bottom_y
|
|
|
+ rb_x, rb_y = x + w / 2, y + h / 2 # right_bottom_x, right_bottom_y
|
|
|
+ rt_x, rt_y = x + w / 2, y - h / 2 # right_top_x, right_bottom_y
|
|
|
+
|
|
|
+ lrbt = [[lt_x, lt_y], [lb_x, lb_y], [rb_x, rb_y], [rt_x, rt_y]]
|
|
|
+
|
|
|
+ return lrbt, c
|
|
|
+
|
|
|
+
|
|
|
+def IOU(rect1, rect2):
|
|
|
+ xmin1, ymin1, xmax1, ymax1 = rect1
|
|
|
+ xmin2, ymin2, xmax2, ymax2 = rect2
|
|
|
+ s1 = (xmax1 - xmin1) * (ymax1 - ymin1)
|
|
|
+ s2 = (xmax2 - xmin2) * (ymax2 - ymin2)
|
|
|
+
|
|
|
+ sum_area = s1 + s2
|
|
|
+
|
|
|
+ left = max(xmin2, xmin1)
|
|
|
+ right = min(xmax2, xmax1)
|
|
|
+ top = max(ymin2, ymin1)
|
|
|
+ bottom = min(ymax2, ymax1)
|
|
|
+
|
|
|
+ if left >= right or top >= bottom:
|
|
|
+ return 0
|
|
|
+
|
|
|
+ intersection = (right - left) * (bottom - top)
|
|
|
+ return intersection / (sum_area - intersection) * 1.0
|
|
|
+
|
|
|
+
|
|
|
+def send_requests():
|
|
|
+ return result
|
|
|
+
|
|
|
+img_path = "./images/test1.jpg"
|
|
|
+b_img_list = []
|
|
|
+b_img_list.append(('file_list', ('image.jpeg', open(img_path, 'rb'), 'image/jpeg')))
|
|
|
+payload = {'model_name': 'ocr-layout', 'img_size': 800, 'download_image': False}
|
|
|
+response = requests.request("POST", "http://192.168.199.107:18089/detect", headers={}, data=payload, files=b_img_list)
|
|
|
+result = eval(str(response.text))
|
|
|
+result = eval(str(result['result']))
|
|
|
+# print(len(result))
|
|
|
+
|
|
|
+mdFile = MdUtils(file_name='yolov5_yili_0818_1', title='Markdown File Example')
|
|
|
+mdFile.new_header(level=1, title="yolov5预测结果")
|
|
|
+list_item = ["ori_cla", "predict_cla", "cut_ori_img", "cut_predict_img", "isTrue"]
|
|
|
+# list_item.extend(["ori_cla", "predict_cla", "cut_ori_img", "cut_predict_img", "isTrue"])
|
|
|
+# for i in range(len(result[0])):
|
|
|
+# # print(stencil_list[0][i])
|
|
|
+#
|
|
|
+# predict_cla = result[0][i]["class"]
|
|
|
+
|
|
|
+# 获取真实的标签
|
|
|
+label = "./images/test1.txt"
|
|
|
+with open(label, mode="r", encoding="utf-8") as f:
|
|
|
+ lines = f.readlines()
|
|
|
+
|
|
|
+img = cv2.imread(img_path)
|
|
|
+img_h, img_w, _ = img.shape
|
|
|
+
|
|
|
+arr_label = [] # labels的边界框,存储四个顶点坐标
|
|
|
+ori_clas = [] # label的真实类别
|
|
|
+for line in lines:
|
|
|
+ line = line.split(" ")
|
|
|
+ lrbt, c = xywh2lrbt(img_w, img_h, line)
|
|
|
+ arr_label.append(lrbt)
|
|
|
+ ori_clas.append(c)
|
|
|
+
|
|
|
+# cut_imgs = [] # 被剪切的图像
|
|
|
+num = 0
|
|
|
+for i in range(len(arr_label)):
|
|
|
+ lt_x, lt_y = int(arr_label[i][0][0]), int(arr_label[i][0][1])
|
|
|
+ rb_x, rb_y = int(arr_label[i][2][0]), int(arr_label[i][2][1])
|
|
|
+ rect1 = [lt_x, lt_y, rb_x, rb_y]
|
|
|
+
|
|
|
+ cut_ori_img = img[lt_y:rb_y, lt_x:rb_x, :]
|
|
|
+ save_cut_ori_img = "./images/cut_imgs/" + str(i) + "_" + str(num) + ".jpg"
|
|
|
+ cv2.imwrite(save_cut_ori_img, cut_ori_img)
|
|
|
+ save_cut_ori_img = mdFile.new_inline_image(text='', path=save_cut_ori_img)
|
|
|
+ num += 1
|
|
|
+ ori_cla = ori_clas[i]
|
|
|
+ for j in range(len(result[0])):
|
|
|
+ res = []
|
|
|
+ predict_cla = result[0][j]['class']
|
|
|
+ if ori_cla == predict_cla:
|
|
|
+ rect2 = result[0][j]['bbox']
|
|
|
+ iou = IOU(rect1, rect2)
|
|
|
+ if iou >= 0.5:
|
|
|
+ cut_predict_img = img[rect2[1]:rect2[3], rect2[0]:rect2[2], :]
|
|
|
+ save_cut_predict_img = "./images/cut_imgs/" + str(j) + ".jpg"
|
|
|
+ cv2.imwrite(save_cut_predict_img, cut_predict_img)
|
|
|
+ save_cut_predict_img = mdFile.new_inline_image(text='', path=save_cut_predict_img)
|
|
|
+ isTrue = True
|
|
|
+ list_item.extend([ori_cla, predict_cla, save_cut_ori_img, save_cut_predict_img, isTrue])
|
|
|
+ # list_item.extend(res)
|
|
|
+ break
|
|
|
+ elif j == len(result[0]) - 1:
|
|
|
+ isTrue = False
|
|
|
+ list_item.extend([ori_cla, predict_cla, save_cut_ori_img, "", isTrue])
|
|
|
+ # res.append([ori_cla, predict_cla, "", "", isTrue])
|
|
|
+ list_item.extend(res)
|
|
|
+#
|
|
|
+# print(list_item)
|
|
|
+# print(len(arr_label))
|
|
|
+print(len(list_item))
|
|
|
+# print(len(result[0]))
|
|
|
+mdFile.new_line()
|
|
|
+mdFile.new_table(columns=5, rows=len(list_item)//5, text=list_item, text_align='center')
|
|
|
+mdFile.create_md_file()
|
|
|
+
|
|
|
+if __name__ == "__main__":
|
|
|
+ images_path = "./test_imgs/images/"
|
|
|
+ labels_path = "./test_imgs/labels/"
|
|
|
+ list_images = os.listdir(images_path)
|
|
|
+ list_labels = os.listdir(labels_path)
|
|
|
+ for image in list_images:
|
|
|
+ img_name = image.split(".")[0]
|
|
|
+ mdFile = MdUtils(file_name='yq_0819_' + str(img_name), title='yq_0819_' + str(img_name) + '_iou>=0.5')
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+#
|
|
|
+# images = os.listdir(images_path)
|
|
|
+# labels = os.listdir(labels_path)
|
|
|
+#
|
|
|
+# assert len(images) == len(labels)
|
|
|
+#
|
|
|
+# for i in range(len(images)):
|
|
|
+# image = images[i]
|
|
|
+# label = labels[i]
|
|
|
+# with open(labels_path + label, mode="r", encoding="utf-8") as f:
|
|
|
+# lines = f.readlines()
|
|
|
+#
|
|
|
+# img = images_path + images[i]
|
|
|
+# img = cv2.imread(img)
|
|
|
+# img_h, img_w, _ = img.shape
|
|
|
+#
|
|
|
+# arr_label = [] # labels的边界框,存储四个顶点坐标
|
|
|
+# ori_cla = [] # label的真实类别
|
|
|
+# for line in lines:
|
|
|
+# line = line.split(" ")
|
|
|
+# lrbt, c = xywh2lrbt(img_w, img_h, line)
|
|
|
+# arr_label.append(lrbt)
|
|
|
+# ori_cla.append(c)
|
|
|
+#
|
|
|
+# cut_path = "./valid_img/cut/"
|
|
|
+#
|
|
|
+# for i in range(len(arr_label)):
|
|
|
+# lt_x, lt_y = int(arr_label[i][0][0]), int(arr_label[i][0][1])
|
|
|
+# rb_x, rb_y = int(arr_label[i][2][0]), int(arr_label[i][2][1])
|
|
|
+# cut_img = img[lt_y:rb_y, lt_x:rb_x, :]
|
|
|
+# cv2.imwrite(cut_path + str(i) + ".jpg", cut_img)
|
|
|
+#
|
|
|
+# box = np.reshape(np.array(arr_label[i]), [-1, 1, 2]).astype(np.int32)
|
|
|
+# img = cv2.polylines(np.array(img), [box], True, (255, 0, 0), 5)
|
|
|
+#
|
|
|
+#
|
|
|
+#
|
|
|
+#
|
|
|
+# mdFile.create_md_file()
|
|
|
+#
|
|
|
+#
|