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 函数来声明自身具备返回位置信息的能力:
function supportBoundingBox() {
return true;
}声明后,Bob 会将该插件纳入原图翻译可用的 OCR 服务列表。如果未实现或返回 false,插件不会出现在原图翻译可用列表中,但普通 OCR 功能不受影响。
2. query 新增图片像素尺寸
ocr 函数的 query 参数新增了 pixelWidth 和 pixelHeight 属性,分别表示图片的像素宽度和高度。如果 OCR 服务返回的是像素坐标,插件可以利用这两个值将其归一化为 [0, 1]。如果 OCR 服务返回的坐标本身就是归一化的,则无需使用这两个值。
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 会自动判定顶点方向,插件无需严格按照左上→右上→左下→右下的顺序。
{
"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 三层结构:
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 }
]
}
}
]
}
]
}
]
}
});texts 和 regionInfos 二选一,取决于 OCR 服务本身是否具备分段能力:
- 如果 OCR 服务能够区分区域和段落的层级关系,建议使用
regionInfos,Bob 可以更好地利用布局信息进行智能分段和原图翻译 - 如果 OCR 服务能够区分段落但不区分区域,同样可以使用
regionInfos,将所有段落放在一个 region 下即可 - 如果 OCR 服务只返回扁平的文本行列表、不具备分段能力,使用
texts即可
兼容性
- 未实现
supportBoundingBox的旧插件不受影响,普通 OCR 功能正常使用 texts模式完全向后兼容,不携带boundingBox的旧格式仍然可用- 插件使用新 API 后,建议将
info.json的minBobVersion字段设置为1.20.0

