|
@@ -71,7 +71,13 @@ def remove_intervals(original, masks):
|
|
|
|
|
|
|
|
def update_det_boxes(dt_boxes, mfd_res):
|
|
def update_det_boxes(dt_boxes, mfd_res):
|
|
|
new_dt_boxes = []
|
|
new_dt_boxes = []
|
|
|
|
|
+ angle_boxes_list = []
|
|
|
for text_box in dt_boxes:
|
|
for text_box in dt_boxes:
|
|
|
|
|
+
|
|
|
|
|
+ if calculate_is_angle(text_box):
|
|
|
|
|
+ angle_boxes_list.append(text_box)
|
|
|
|
|
+ continue
|
|
|
|
|
+
|
|
|
text_bbox = points_to_bbox(text_box)
|
|
text_bbox = points_to_bbox(text_box)
|
|
|
masks_list = []
|
|
masks_list = []
|
|
|
for mf_box in mfd_res:
|
|
for mf_box in mfd_res:
|
|
@@ -85,6 +91,9 @@ def update_det_boxes(dt_boxes, mfd_res):
|
|
|
temp_dt_box.append(bbox_to_points([text_remove_mask[0], text_bbox[1], text_remove_mask[1], text_bbox[3]]))
|
|
temp_dt_box.append(bbox_to_points([text_remove_mask[0], text_bbox[1], text_remove_mask[1], text_bbox[3]]))
|
|
|
if len(temp_dt_box) > 0:
|
|
if len(temp_dt_box) > 0:
|
|
|
new_dt_boxes.extend(temp_dt_box)
|
|
new_dt_boxes.extend(temp_dt_box)
|
|
|
|
|
+
|
|
|
|
|
+ new_dt_boxes.extend(angle_boxes_list)
|
|
|
|
|
+
|
|
|
return new_dt_boxes
|
|
return new_dt_boxes
|
|
|
|
|
|
|
|
|
|
|
|
@@ -143,9 +152,11 @@ def merge_det_boxes(dt_boxes):
|
|
|
angle_boxes_list = []
|
|
angle_boxes_list = []
|
|
|
for text_box in dt_boxes:
|
|
for text_box in dt_boxes:
|
|
|
text_bbox = points_to_bbox(text_box)
|
|
text_bbox = points_to_bbox(text_box)
|
|
|
- if text_bbox[2] <= text_bbox[0] or text_bbox[3] <= text_bbox[1]:
|
|
|
|
|
|
|
+
|
|
|
|
|
+ if calculate_is_angle(text_box):
|
|
|
angle_boxes_list.append(text_box)
|
|
angle_boxes_list.append(text_box)
|
|
|
continue
|
|
continue
|
|
|
|
|
+
|
|
|
text_box_dict = {
|
|
text_box_dict = {
|
|
|
'bbox': text_bbox,
|
|
'bbox': text_bbox,
|
|
|
'type': 'text',
|
|
'type': 'text',
|
|
@@ -202,8 +213,9 @@ def get_ocr_result_list(ocr_res, useful_list):
|
|
|
|
|
|
|
|
p1, p2, p3, p4 = box_ocr_res[0]
|
|
p1, p2, p3, p4 = box_ocr_res[0]
|
|
|
text, score = box_ocr_res[1]
|
|
text, score = box_ocr_res[1]
|
|
|
- average_angle_degrees = calculate_angle_degrees(box_ocr_res[0])
|
|
|
|
|
- if average_angle_degrees > 0.5:
|
|
|
|
|
|
|
+ # average_angle_degrees = calculate_angle_degrees(box_ocr_res[0])
|
|
|
|
|
+ # if average_angle_degrees > 0.5:
|
|
|
|
|
+ if calculate_is_angle(box_ocr_res[0]):
|
|
|
# logger.info(f"average_angle_degrees: {average_angle_degrees}, text: {text}")
|
|
# logger.info(f"average_angle_degrees: {average_angle_degrees}, text: {text}")
|
|
|
# 与x轴的夹角超过0.5度,对边界做一下矫正
|
|
# 与x轴的夹角超过0.5度,对边界做一下矫正
|
|
|
# 计算几何中心
|
|
# 计算几何中心
|
|
@@ -257,3 +269,12 @@ def calculate_angle_degrees(poly):
|
|
|
# logger.info(f"average_angle_degrees: {average_angle_degrees}")
|
|
# logger.info(f"average_angle_degrees: {average_angle_degrees}")
|
|
|
return average_angle_degrees
|
|
return average_angle_degrees
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+def calculate_is_angle(poly):
|
|
|
|
|
+ p1, p2, p3, p4 = poly
|
|
|
|
|
+ height = ((p4[1] - p1[1]) + (p3[1] - p2[1])) / 2
|
|
|
|
|
+ if 0.8 * height <= (p3[1] - p1[1]) <= 1.2 * height:
|
|
|
|
|
+ return False
|
|
|
|
|
+ else:
|
|
|
|
|
+ # logger.info((p3[1] - p1[1])/height)
|
|
|
|
|
+ return True
|