【问题标题】:How to add padding to detected OCR bounding boxes?如何为检测到的 OCR 边界框添加填充?
【发布时间】:2019-01-16 07:43:17
【问题描述】:

我正在关注: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):

如何为边界框添加内边距?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 如果我必须将坐标导出到文本文件,此技术将有效。但是,作为显示的正方形 GUI 的框的大小没有增加。我将像素添加到每个坐标,同时将其导出到文本文件,更准确地说,我将像素添加到 github.com/argman/EAST/blob/master/eval.py 的第 186 行。
    • 您应该在代码中以164 行开头的部分执行此操作。然后你就不必在其他任何地方做。它将更新以保存、读取和绘制图像(GUI,如您所指)。
    【解决方案2】:

    我很久以前就遇到过这个问题。只需在 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)
    

    【讨论】:

      猜你喜欢
      • 2013-11-18
      • 2018-06-25
      • 2021-10-13
      • 1970-01-01
      • 2019-06-07
      • 2022-08-05
      • 2013-07-29
      • 2021-03-27
      • 2023-03-12
      相关资源
      最近更新 更多