Shortcuts

Source code for mmocr.datasets.pipelines.box_utils

# Copyright (c) OpenMMLab. All rights reserved.
import numpy as np

import mmocr.utils as utils


[docs]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]
[docs]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
Read the Docs v: v0.4.0
Versions
latest
stable
v0.4.0
v0.3.0
v0.2.1
v0.2.0
v0.1.0
Downloads
On Read the Docs
Project Home
Builds

Free document hosting provided by Read the Docs.