如何向检测到的 OCR 边界框添加填充?

How to add padding to detected OCR bounding boxes?

我正在关注:EAST 文本检测器 (https://github.com/argman/EAST#installation) 教程的 tensorflow 实现。

当我执行上面链接的 GitHub 代码时,在图像上我得到以下输出:

检测代码为eval.py

在输出中,我想向生成的边界框添加填充,以便我可以正确捕获第一个 "K" 和最后一个“0”。

我在代码的第 69 行更改了框阈值。我尝试了 0.1、0.05 等不同的值,但框的大小没有改变。

def detect(score_map, geo_map, timer, score_map_thresh=0.8, box_thresh=0.1, nms_thres=0.2):

如何向边界框添加填充?

您必须进入函数,找到提取框的行。每个框将用 2 个坐标(左上角和右下角)或一个坐标和偏移量(左上角点以及框的高度和宽度)表示。在这两种情况下,您都必须从边界框的左上角减去一些像素,并在右下角 coordinate/height 和宽度上添加一些像素。 例如,假设格式为 2 个坐标,您得到 ((456, 234), (789, 453))。然后当你做数学运算时(从左上角减去并添加到右下角),你会得到类似 ((470, 250), (800, 470)) 我希望这已经足够清楚了。

我很久以前就遇到过这个问题。简单地给 bbox 添加边距,然后验证它没有离开图像。 如果您有边界框:

def expand(bbox, margin=5):
    # supose bbox is x1, y1, x2, y2
    return [
        bbox[0, 0] - margin,
        bbox[1] - margin,
        bbox[2] + margin,
        bbox[2] + margin]

bbox_expanded = expand(bbox)
img_crop = img[max(0, bbox[1]):min(img.shape[0], bbox[3]), max(bbox[0], 0):min(img.shape[1], bbox[2]), :]

如果你有4分:

def expand(points, margin):
    # supose points is 1, p2, p3, p4
    return [
        [points[0, 0] - margin, points[0, 1] - margin],
        [points[1, 0] + margin, points[1, 1] - margin],
        [points[2, 0] + margin, points[2, 1] + margin],
        [points[3, 0] - margin, points[3, 1] + margin]]

points_expanded = expand(points)