Skip to content
微信公众号二维码

Bob 官方公众号

Bob 1.20.0 独立 OCR & 原图翻译支持 OCR 插件

Bob 1.20.0 让独立 OCR 和原图翻译都支持了 OCR 插件,并升级了插件接口以支持智能分段与原图翻译。

背景

此前 Bob 的独立 OCR 不支持 OCR 插件,只能使用内置的 OCR 服务(如 Google、Microsoft、百度等)。同时,OCR 插件也无法返回位置和段落信息,不能用于智能分段和原图翻译。

1.20.0 版本升级了插件 OCR 接口,插件现在可以返回位置信息(boundingBox)和结构化布局(regionInfos):

  • 有 boundingBox 时,Bob 可以利用自研算法进行智能分段,也可以用于原图翻译
  • 有 regionInfos 时,Bob 可以直接使用 OCR 服务商提供的段落结构

新增能力

1. 声明支持位置信息

插件通过实现 supportBoundingBox 函数来声明自身具备返回位置信息的能力:

js
function supportBoundingBox() {
    return true;
}

声明后,Bob 会将该插件纳入原图翻译可用的 OCR 服务列表。如果未实现或返回 false,插件不会出现在原图翻译可用列表中,但普通 OCR 功能不受影响。

2. query 新增图片像素尺寸

ocr 函数的 query 参数新增了 pixelWidthpixelHeight 属性,分别表示图片的像素宽度和高度。如果 OCR 服务返回的是像素坐标,插件可以利用这两个值将其归一化为 [0, 1]。如果 OCR 服务返回的坐标本身就是归一化的,则无需使用这两个值。

js
function ocr(query, completion) {
    const w = query.pixelWidth;
    const h = query.pixelHeight;
    // OCR 服务返回像素坐标 (px, py) 后,归一化为:
    // x = px / w
    // y = py / h
}

3. 位置信息(boundingBox)

ocr text 新增了 boundingBox 属性,用于描述文本在图片中的位置。位置信息使用归一化坐标 [0, 1],四个顶点表示文本的矩形区域。坐标系以图片左上角为原点,x 轴向右、y 轴向下。Bob 会自动判定顶点方向,插件无需严格按照左上→右上→左下→右下的顺序。

js
{
    "text": "Hello World",
    "boundingBox": {
        "points": [
            { "x": 0.1, "y": 0.05 },
            { "x": 0.4, "y": 0.05 },
            { "x": 0.1, "y": 0.09 },
            { "x": 0.4, "y": 0.09 }
        ]
    }
}

4. 结构化布局(regionInfos)

除了原有的扁平 texts 数组,插件现在还可以通过 regionInfos 返回结构化的布局信息,使用 region → paragraph → text 三层结构:

js
completion({
    result: {
        from: "en",
        regionInfos: [
            {
                paragraphInfos: [
                    {
                        texts: [
                            {
                                text: "第一行文字",
                                boundingBox: {
                                    points: [
                                        { x: 0.1, y: 0.05 },
                                        { x: 0.5, y: 0.05 },
                                        { x: 0.1, y: 0.09 },
                                        { x: 0.5, y: 0.09 }
                                    ]
                                }
                            },
                            {
                                text: "第二行文字",
                                boundingBox: {
                                    points: [
                                        { x: 0.1, y: 0.10 },
                                        { x: 0.5, y: 0.10 },
                                        { x: 0.1, y: 0.14 },
                                        { x: 0.5, y: 0.14 }
                                    ]
                                }
                            }
                        ]
                    }
                ]
            }
        ]
    }
});

textsregionInfos 二选一,取决于 OCR 服务本身是否具备分段能力:

  • 如果 OCR 服务能够区分区域和段落的层级关系,建议使用 regionInfos,Bob 可以更好地利用布局信息进行智能分段和原图翻译
  • 如果 OCR 服务能够区分段落但不区分区域,同样可以使用 regionInfos,将所有段落放在一个 region 下即可
  • 如果 OCR 服务只返回扁平的文本行列表、不具备分段能力,使用 texts 即可

兼容性

  • 未实现 supportBoundingBox 的旧插件不受影响,普通 OCR 功能正常使用
  • texts 模式完全向后兼容,不携带 boundingBox 的旧格式仍然可用
  • 插件使用新 API 后,建议将 info.jsonminBobVersion 字段设置为 1.20.0

相关文档