使用 Ultralytics YOLO26 进行场景文本 OCR
什么是场景文本 OCR?#
光学字符识别 (OCR) 可检测并读取图像中的文本。OCR 解决方案 将 Ultralytics YOLO26 文本检测器与文本识别后端结合使用。它支持水平检测框、 旋转框 (OBB) 和分割多边形,然后按阅读顺序返回识别出的文本。
检测和识别是独立组件,因此你可以将场景文本检测器与 PaddleOCR 或你自己的 识别模型搭配使用。
为什么使用场景文本 OCR?#
- 灵活的文本几何形状:使用检测、OBB 或分割模型处理水平、旋转或不规则文本。
- 识别器可互换:无需编写额外的集成代码即可运行 PaddleOCR,也可以传入其他模型的可调用对象。
- 结构化输出:通过一个结果对象获取识别文本、识别和检测置信度、源几何信息,以及带标注的 图像。
使用 YOLO26 运行场景文本 OCR#
PaddleOCR 是可选依赖;使用 recognizer="paddleocr" 创建 OCR 时会加载 PaddleOCR,并在缺少相关依赖时安装 PaddleOCR 3.x 和 CPU 版 PaddlePaddle。若要使用 GPU 识别,请先安装匹配的 paddlepaddle-gpu 版本;Ultralytics 的基础依赖中 不会添加 OCR 软件包。
向 OCR 解决方案传入图像和文本检测器。结果包含带标注的图像和识别出的文本:
yolo solutions ocr model="scene-text-obb.pt" source="path/to/video.mp4" recognizer="paddleocr"YOLO26-Text 检查点#
公开的 YOLO26-Text 系列提供 n、s、m、l 和 x OBB 检查点。将 ULTRALYTICS_API_KEY 设置为你自己的 Ultralytics Platform API 密钥,然后通过 Platform URI 加载检查点:
export ULTRALYTICS_API_KEY="your-api-key"ocr = solutions.OCR(model="ul://ultralytics-yolo/yolo26-text/yolo26n-text", recognizer="paddleocr")
result = ocr(im0)将 yolo26n-text 替换为 yolo26s-text、yolo26m-text、yolo26l-text 或 yolo26x-text,即可使用更大的模型。
OCR 参数#
下面是 OCR 参数表:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
model | str | None | Ultralytics YOLO 模型文件的路径。 |
recognizer | str 或 Callable | 'paddleocr' | 文本识别后端或可调用对象,接收 BGR 裁剪图并返回 (text, confidence)。 |
line_width | int | 2 | 解决方案绘制的框、关键点和计数的线条粗细。 |
verbose | bool | True | 启用逐帧日志,记录输入形状、类别计数和处理速度。跟踪调用本身始终不会输出日志。 |
此外,还支持以下可视化设置:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
show | bool | False | 如果 True,则在窗口中显示带标注的图像或视频。适用于在开发或测试期间即时查看结果。 |
show_conf | bool | True | 在每个检测结果的标签旁显示置信度分数,帮助了解模型对该检测结果的确信程度。 |
show_labels | bool | True | 在可视化输出中显示每个检测结果的标签,便于立即了解检测到的对象。 |
场景文本 OCR 的工作原理#
- 检测文本:YOLO26 会生成水平检测框、旋转框或分割多边形。
- 生成识别裁剪图:检测框会裁剪至图像范围内。OBB 会沿水平跨度最大的边进行仿射校正, 使接近正方形的检测框保持正向,并让倾斜的文本行沿阅读 方向水平排列。对于分割多边形,会校正最小面积旋转矩形,同时保留原始多边形。高至少为宽 1.5 倍的裁剪图会逆时针旋转 90°,与 PaddleOCR 的处理方式一致。
- 识别文本:PaddleOCR 会以每批 16 个裁剪图的方式进行处理。自定义识别器每次接收一个裁剪图。
- 排列并渲染结果:文本会按水平文本行分组,并按从上到下、从左到右的顺序排列。可视化使用支持中文等非 ASCII 文本的 Unicode 字体。
坐标始终对应原始图像,而不是检测器输入或识别裁剪图。
使用自定义识别器#
传入一个可调用对象,即可集成其他识别模型,而无需更改检测、几何处理或排序流程。 对于每个非空的 BGR numpy.ndarray 裁剪图,该可调用对象都会运行一次。每次调用返回一个 (text, confidence) 元组,而不是 批量结果列表:
| 元组项 | 接受的类型 | 说明 |
|---|---|---|
text | str | 此裁剪图解码后的文本。未识别出文本时,返回 ""。 |
confidence | float、int 或 numpy.floating | 数值型识别置信度,由解决方案转换为 float。 |
def recognize(crop):
# 在此处对 BGR 裁剪图运行你的识别模型并解码其输出。
return "example", 0.95
ocr = solutions.OCR(model="custom-text.pt", recognizer=recognize)
result = ocr(im0)不支持的后端名称会引发 ValueError。如果未检测到文本,result.texts 将为空,并且不会调用识别器。
OCR 结果#
每次调用都会返回一个 SolutionResults 对象。使用 result.plot_im 获取带标注的图像,使用 result.texts 获取按确定性阅读顺序排列的记录:
| 键 | 类型 | 说明 |
|---|---|---|
text | str | 识别出的文本。 |
confidence | float | 识别置信度,与检测置信度分开保存。 |
detection_confidence | float | YOLO 检测器置信度。 |
detection_index | int | 按阅读顺序排序前的源检测索引。 |
polygon | list[list[float]] | 原始图像中的多边形:检测框和 OBB 检测结果对应四个角点,分割检测结果对应掩码轮廓。 |
依赖项和许可证#
| 组件 | 必填 | 角色 | 许可证 |
|---|---|---|---|
| Ultralytics | 是 | YOLO 检测、裁剪图几何处理和结果编排 | AGPL-3.0 |
| PaddlePaddle | 仅用于 recognizer="paddleocr" | 识别运行时 | Apache-2.0 |
| PaddleOCR 3.x | 仅用于 recognizer="paddleocr" | 文本行识别模型和推理适配器 | Apache-2.0 |
| 自定义可调用对象 | 否 | 用户自有的识别集成 | 由后端定义 |
PaddleOCR 可能会在首次使用时下载识别权重。将这些文件打包或部署前,请查看所选模型的模型卡和再分发 条款。自定义检查点的许可证另行规定。
常见问题#
评论
提出问题、分享结果,或帮助其他人。