def seal_detect(img, model, device): boxes = detect.detect(img, model, device) boxes = detect.adjust_ratio(boxes, ratio_w, ratio_h) orig_vertices = [] theta = 0 if boxes is not None and boxes.size: for box in boxes: box = np.array(box[:8]) orig_vertices.append(box) theta += crop_mode.find_min_rect_angle(box) orig_vertices = np.array(orig_vertices) theta /= len(boxes) tmp_img, vertices = crop_mode.rotate_allimg(img, orig_vertices, -theta / math.pi * 180) dict_centers = {} for i, vertice in enumerate(vertices): avg_x = int(crop_mode.averagenum(vertice[::2])) avg_y = int(crop_mode.averagenum(vertice[1::2])) dict_centers[str(avg_x) + ',' + str(avg_y)] = i centers = crop_mode.sort_centers(dict_centers, 1) xcenters = [] for center in centers: xcenters.append([center]) shape = [] for i, xcenter in enumerate(xcenters): for center in xcenter: anno = {} anno['box'] = orig_vertices[int(center[1])] anno['class'] = 'seal' shape.append(anno) return shape, boxes
orig_vertices = [] theta = 0 for box in boxes: box = np.array(box[:8]) orig_vertices.append(box) theta += crop_mode.find_min_rect_angle(box) orig_vertices = np.array(orig_vertices) theta /= len(boxes) tmp_img, vertices = crop_mode.rotate_allimg(rotate_img, orig_vertices, -theta / math.pi * 180) dict_centers = {} for i, vertice in enumerate(vertices): avg_x = int(crop_mode.averagenum(vertice[::2])) avg_y = int(crop_mode.averagenum(vertice[1::2])) dict_centers[str(avg_x) + ',' + str(avg_y)] = i centers = crop_mode.sort_centers(dict_centers, 1) k = 0 xcenters = [] index = [6, 2, 2, 1, 2] for i, j in enumerate(index): xcenter = crop_mode.sort_xcenters(centers[k:k + j], 0) if i == 0: if int(xcenter[0][0].split(',')[1]) < int( xcenter[1][0].split(',')[1]): tmp = xcenter[0] xcenter[0] = xcenter[1]