在 Mac M1 设备上尝试 PaddleOCR 时,发现其处理单张图片耗时约 5 秒,性能表现欠佳。因此开始探索更高效的 OCR 替代工具,意外发现社区中众多开发者强烈推荐 RapidOCR。
这引发了一个问题:RapidOCR 为何能实现如此高效的识别速度?
本文将深入解析 RapidOCR 的核心优势,揭秘其高性能背后的关键技术——ONNX,并详细介绍实际使用方法。
RapidOCR 简介:高效离线 OCR 工具
RapidOCR 是一款完全开源且免费的跨平台多语言 OCR 工具,支持离线快速部署,其核心优势在于极致的识别速度和广泛的兼容性。
考虑到 PaddleOCR 在工程化部署方面仍有提升空间,RapidOCR 专注于简化并加速 OCR 模型在各种终端设备上的推理过程。该项目创新地将 PaddleOCR 模型转换为高度兼容的 ONNX 格式,并基于 Python、C++、Java、C# 等多种编程语言实现跨平台无缝移植,使开发者能够快速上手并高效集成。
读到这里,你可能会好奇:ONNX 到底是什么?
ONNX 详解:开放神经网络交换格式
ONNX(Open Neural Network Exchange,开放神经网络交换)是一种开放的深度学习模型表示格式。它定义了统一的数据结构和计算图,从而使不同框架(如 PyTorch、TensorFlow)训练的模型能够相互转换和跨平台使用。
它的主要特点是:
- 跨框架兼容:支持 PyTorch、TensorFlow、MXNet 等主流框架的模型导出与导入
- 跨平台部署:能够在不同硬件平台和操作系统上无缝运行
- 高性能推理:集成多种推理优化技术,大幅提升模型运行效率
- 可扩展架构:支持自定义算子,方便功能扩展与定制
开发者可利用任意支持的框架训练模型,导出为 ONNX 格式后,即可通过任何兼容 ONNX 的推理引擎进行高效部署。
以机器视觉为例,C# 是应用开发的主流语言,ONNX 格式因此备受追捧。开发者无需安装臃肿的 PaddlePaddle 框架,也无需借助 Python 编写识别算法,仅需使用 ONNX Runtime 库即可完成全部任务,大幅提升开发效率。
简而言之,ONNX 如同深度学习模型的“通用语言”,使模型能够在不同环境和平台间自由迁移。
RapidOCR 快速上手教程
首先创建一个 Python 工程,在依赖文件中添加依赖:
# OCR 依赖rapidocr==3.9.0
接下来编写一个 RapidOCR 调用示例:
def example_3_chinese_english_mixed():# 创建 RapidOCR 实例(默认参数,自动检测多语言)ocr = RapidOCR()# 读取图片img = Image.open(TEST_IMAGE_1)img_array = np.array(img)print(f"图片信息: {img.size} {img.mode}")# 执行 OCRresult = ocr(img_array)# 转换结果格式(RapidOCR 3.8+ 版本返回 RapidOCROutput 对象)result = convert_result(result)# result 格式: [[[x1,y1],[x2,y1],[x2,y2],[x1,y2]], (文本, 置信度)]print(f"n检测到 {len(result)} 个文本框n")for i, (box, (text, score)) in enumerate(result, 1):print(f"{i}. 文本: {text}")print(f" 置信度: {score:.4f}")print(f" 坐标: {box}n")def convert_result(result):"""将 RapidOCR 3.8+ 版本的 RapidOCROutput 对象转换为旧版格式Args:result: RapidOCR 返回的结果(RapidOCROutput 对象或列表)Returns:旧版格式列表: [([[x1,y1],[x2,y1],[x2,y2],[x1,y2]], (text, confidence)), ...]"""if hasattr(result, 'boxes') and result.boxes is not None:# RapidOCROutput 对象boxes = result.boxestxts = result.txtsscores = result.scoresreturn [[box.tolist(), (txt, float(score))]for box, txt, score in zip(boxes, txts, scores)]return result# 已经是旧格式
打印结果:
RapidOCR 的识别结果采用以下格式:
[[box_points, text, score],[box_points, text, score],...]
字段说明:
box_points:文本框的四个顶点坐标数组text:识别出的文字内容score:置信度分数(取值范围 0~1,值越接近 1 表示识别结果越可靠)
图片 OCR 样式示例:
总结与展望
RapidOCR 通过采用 ONNX 格式并结合多种推理引擎优化,实现了高性能、高精度的 OCR 识别。其开源、跨平台的特质使其成为 OCR 领域的优秀解决方案。
如果你也遭遇了 PaddleOCR 的性能瓶颈(尤其在缺乏 GPU 资源时),不妨试试 RapidOCR,相信它会给你带来惊喜。
