PaddleOCR 太慢?我换成 RapidOCR 后,速度直接起飞

我的网站原文地址:www.javayong.cn/md/ocr/01-R...

我在学习使用 PaddleOCR 时,在本地 Mac M1 上进行了测试,发现 PaddleOCR 的性能表现并不理想------处理每张图片大约需要 5 秒。于是我开始寻找替代方案,意外发现社区中有大量开发者推荐 RapidOCR。

这不禁让我思考:为什么 RapidOCR 能够如此快速?

今天这篇文章,我们将深入探讨 RapidOCR 的核心优势,剖析其高性能背后的技术秘密------ONNX,最后还会介绍具体的使用方法。

RapidOCR 简介

RapidOCR 是一款完全开源免费、支持离线快速部署的多平台多语言 OCR 工具,以极致的速度与广泛的兼容性为核心优势。

鉴于 PaddleOCR 在工程化方面仍有优化空间,RapidOCR 致力于简化并加速 OCR 模型在各类终端设备上的推理部署。项目创新性地将 PaddleOCR 模型转换为高度兼容的 ONNX 格式,并基于 Python、C++、Java、C# 等多种编程语言实现了跨平台的无缝移植,让开发者能够轻松上手、高效集成。

看到这里,你可能会产生疑问:什么是 ONNX?

什么是 ONNX

ONNX(Open Neural Network Exchange,开放神经网络交换)是一种用于表示深度学习模型的开放格式。它定义了模型的数据结构和计算图,使得不同深度学习框架训练的模型可以互相转换和使用。

它的主要特点是:

  • 跨框架兼容:支持 PyTorch、TensorFlow、MXNet 等主流框架的模型导出
  • 跨平台部署:可在不同硬件平台和操作系统上无缝运行
  • 高性能推理:支持多种推理优化技术,显著提升模型运行效率
  • 可扩展架构:支持自定义算子,便于功能扩展

开发者可以使用任何支持的框架训练模型,然后导出为 ONNX 格式,再使用任何支持 ONNX 的推理引擎进行部署。

以机器视觉领域为例,C# 作为应用开发的主流语言,ONNX 格式因此备受青睐。开发者无需安装庞大的 PaddlePaddle 框架,也不必使用 Python 编写识别算法,直接使用 ONNX Runtime 库即可完成所有工作,极大提升了开发效率。

简而言之,ONNX 就像是深度学习模型的"通用语言",让模型能够在不同的环境和平台之间自由迁移。

快速开始

首先创建一个 Python 工程,在依赖文件中添加依赖:

ini 复制代码
# OCR  
rapidocr==3.9.0

接下来封装一个 RapidOCR 示例:

python 复制代码
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}")

    # 执行 OCR
    result = 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.boxes  
        txts = result.txts  
        scores = result.scores  
        return [[box.tolist(), (txt, float(score))]  
                for box, txt, score in zip(boxes, txts, scores)]  
    return result  # 已经是旧格式     
    

打印结果:

RapidOCR 的识别结果采用以下格式:

arduino 复制代码
[
    [box_points, text, score],
    [box_points, text, score],
    ...
]

字段说明:

  • box_points:文本框的四个顶点坐标
  • text:识别出的文本内容
  • score:置信度分数(0-1 之间,越接近 1 表示识别结果越可靠)

图片 OCR 样式示例:

总结

RapidOCR 通过采用 ONNX 格式和多种推理引擎优化,成功实现了高性能、高精度的 OCR 识别能力,其开源、跨平台的特性使其成为 OCR 领域的优秀选择。

如果你也遇到了 PaddleOCR 的性能瓶颈 (没有 GPU 资源),不妨尝试一下 RapidOCR,相信会给你带来惊喜。

相关推荐
lazy H24 分钟前
从入门到日常开发,一篇文章掌握 Git 核心操作
git·后端·学习·github
GetcharZp8 小时前
抛弃低效SSH!这套Ansible+Web可视化神器,让你天天准点下班!
后端
weixin_4462608512 小时前
HACO:面向动态部署环境的对冲式智能计算可靠多智能体调度框架
后端·python·flask
ttwuai13 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
用户83562907805113 小时前
Python 实现 Excel 页面布局与打印设置自动化
后端·python
用户99314415798413 小时前
微服务框架中获取用户信息
后端
xuanWb13 小时前
手写一个 LLM API 网关:Anthropic 与 OpenAI 协议转换的完整实现
后端
苍何14 小时前
给 Codex 换皮肤这门生意,被我开源了
后端
用户83562907805114 小时前
Python 实现 Excel 命名范围(Named Range)的创建与管理
后端·python