Spaces:
Runtime error
Runtime error
File size: 1,732 Bytes
2366e36 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# Copyright (c) OpenMMLab. All rights reserved.
import numpy as np
import mmocr.utils as utils
def sort_vertex(points_x, points_y):
"""Sort box vertices in clockwise order from left-top first.
Args:
points_x (list[float]): x of four vertices.
points_y (list[float]): y of four vertices.
Returns:
sorted_points_x (list[float]): x of sorted four vertices.
sorted_points_y (list[float]): y of sorted four vertices.
"""
assert utils.is_type_list(points_x, (float, int))
assert utils.is_type_list(points_y, (float, int))
assert len(points_x) == 4
assert len(points_y) == 4
vertices = np.stack((points_x, points_y), axis=-1).astype(np.float32)
vertices = _sort_vertex(vertices)
sorted_points_x = list(vertices[:, 0])
sorted_points_y = list(vertices[:, 1])
return sorted_points_x, sorted_points_y
def _sort_vertex(vertices):
assert vertices.ndim == 2
assert vertices.shape[-1] == 2
N = vertices.shape[0]
if N == 0:
return vertices
center = np.mean(vertices, axis=0)
directions = vertices - center
angles = np.arctan2(directions[:, 1], directions[:, 0])
sort_idx = np.argsort(angles)
vertices = vertices[sort_idx]
left_top = np.min(vertices, axis=0)
dists = np.linalg.norm(left_top - vertices, axis=-1, ord=2)
lefttop_idx = np.argmin(dists)
indexes = (np.arange(N, dtype=np.int) + lefttop_idx) % N
return vertices[indexes]
def sort_vertex8(points):
"""Sort vertex with 8 points [x1 y1 x2 y2 x3 y3 x4 y4]"""
assert len(points) == 8
vertices = _sort_vertex(np.array(points, dtype=np.float32).reshape(-1, 2))
sorted_box = list(vertices.flatten())
return sorted_box
|