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

时间:2019-01-16 07:43:17

标签: python-3.x machine-learning deep-learning computer-vision ocr

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

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

enter image description here

检测代码为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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我很久以前就有这个问题。只需向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)