ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

RapidOCR 快速上手:6 个推理引擎加速实时 OCR 推理的完整 5 步路径

RapidOCR 快速上手:6 个推理引擎加速实时 OCR 推理的完整 5 步路径 RapidOCR 快速上手6 个推理引擎加速实时 OCR 推理的完整 5 步路径【免费下载链接】RapidOCR Awesome OCR multiple programing languages toolkits based on ONNX Runtime, OpenVINO, MNN, PaddlePaddle, TensorRT and PyTorch.项目地址: https://gitcode.com/GitHub_Trending/ra/RapidOCRRapidOCR 是一个封装了 PP-OCR 模型、可在 ONNX Runtime、OpenVINO、TensorRT 等 6 个推理引擎间切换的 OCR 工具包。一行RapidOCR(img)就能拿到检测框、文字和置信度引擎按硬件选业务代码不用动解决的就是实时场景下的识别延迟问题。跨境仓的快递单200ms 为什么是大问题把场景放具体一点跨境仓库规定包裹入库后 10 秒内必须完成面单识别和归档。工单员用 PDA 拍一张照片推到识别服务地址回写数据库。听起来一次调用而已实际跑起来处处卡。第一个卡点是人站在机器前。500ms 以内他能等1 秒以上他就开始拍屏幕了。10 秒的预算里拍照、传网、写库各占一部分留给 OCR 的其实只有 1~2 秒还包含一次检测、一次方向分类、一次识别三段模型调用。第二个卡点是排队。识别服务和订单分拣共用一台服务器OCR 是吃算力的活一次推理把线程占久了别的请求就在后面等。包裹越忙队列越长队列越长响应越慢早晚要塌。第三个卡点是面单不全是中文。这个仓接日线路的包裹一张图上混着日文、英文和数字模型和词典都得覆盖到。它凭什么快四个设计点一个标准插座统一引擎接口Radar 把六个引擎ONNX Runtime、OpenVINO、PyTorch、Paddle、TensorRT、MNN收在一个抽象基类InferSession后面。上层只管传图进去、拿结果出来换引擎相当于遥控器换电池扣掉一块装另一块按遥控器的手势不变。这个设计的价值在于你在 Intel 机器上实测 OpenVINO 快 20%换过去只改一行配置不用重构任何业务代码。放大镜看字混合注意力识别网络用的是 SVTR。传统 RNN 逐字走格子Transformer 全家桶则每个 token 都盯着整行看两头都不经济。SVTR 的做法是前 6 层用局部注意力像拿放大镜只看当前字和左右邻居后 6 层才切到全局注意力退后一步看整行依赖。注意力算的是平方级复杂度局部化之后计算量直接砍掉一大截而识别精度基本没掉。碎步并成大步图优化ONNX Runtime 引擎在构建会话时默认打开ORT_ENABLE_ALL等于跑图之前先把执行顺序重排一遍把卷积和偏置这类小算子融合成一个大算子碎步并成大步把常量表达式在加载时就预先算好常量折叠再顺手调整张量内存布局提高缓存命中。模型文件一个字节没改跑起来的开销却少了一截。砍掉小数位INT8 量化TensorRT 配置里可以直接开use_fp16/use_int8。量化相当于把参数里三位小数砍成一位参考数据里 FP32 模型约 45MB、推理约 21msINT8 之后约 11MB、约 10ms精度损失约 0.8%。内存和带宽吃紧时这笔交易很划算。⚡ 参考基准i7-10700K、1080p 图PyTorch CPU 约 68msONNX Runtime 约 21msOpenVINO 约 19ms。不同硬件上怎么挑推理引擎你的硬件选哪个引擎一句话理由Intel CPUOpenVINO参考基准里最快约 19ms支持 LATENCY/THROUGHPUT 两种提示跨平台 / 杂牌硬件ONNX Runtime默认引擎兼容性最广图优化默认全开NVIDIA GPUTensorRT默认开 FP16可再叠 INT8移动端选 MNN开发调试期用 PyTorch 方便看中间结果。拿不准就先 ONNX Runtime跑通后再按硬件换。5 步跑通首次识别装包pip install rapidocr要求 Python 3.8 以上。备模型首次运行会自动下载 PP-OCR 模型离线机器可以先跑rapidocr download_models把三个模型拉下来。第一次识别from rapidocr import RapidOCR engine RapidOCR() result engine(tests/test_files/ch_en_num.jpg) print(result.txts, result.scores) result.vis(vis_result.jpg)切引擎、调参数默认配置在 python/rapidocr/config.yaml三个任务段各有一行engine_typeDet: engine_type: openvino Cls: engine_type: openvino Rec: engine_type: openvino验证部署命令行rapidocr -img 你的图.jpg -vis出可视化结果rapidocr check可以体检安装是否完整。常见坑线程数怎么设不翻车配置里默认是-1交给引擎自己定单机跑就保持默认。只在同一台机器上同时跑好几个推理进程时才显式设置intra_op_num_threads否则会互相抢核。参考数据1 线程约 85ms8 线程降到约 21ms再加到 16 线程只省 2 左右——超过物理核数就是白忙。要不要上 INT8 量化默认别开。只有 TensorRT 默认开了 FP16INT8 留给显存/带宽不够、或者要压批量吞吐的场景。代价是约 0.8% 的精度损失如果你的业务对个别生僻字敏感先在测试集上回归一遍再决定。文字倒着、图片带 EXIF 方向标签怎么办相机拍的照片经常像素方向和对不上得靠 EXIF 标签纠正。RapidOCR 加载图片时会处理 EXIF 方向之后 cls 方向分类模型还会判断 180° 旋转的文本行并自动转正竖排、倒排文本不用你写预处理。识别结果偏少是漏检吗先别怀疑模型。默认text_score: 0.5会把低置信度的行整个滤掉检测侧还有box_thresh: 0.5和unclip_ratio在把关。像下面这种字符被切掉一角的图置信度天然偏低遇到少结果先把text_score和box_thresh一起降到 0.3~0.4 复测确认是阈值问题还是真的漏检。面单归档、收银台抓拍、监控截图这类对延迟敏感的实时 OCR 场景选它基本够用引擎参数明细看 python/rapidocr/config.yaml六套引擎的具体实现在 python/rapidocr/inference_engine/想动手调可以配合 python/tests/ 里的测试图直接验证。【免费下载链接】RapidOCR Awesome OCR multiple programing languages toolkits based on ONNX Runtime, OpenVINO, MNN, PaddlePaddle, TensorRT and PyTorch.项目地址: https://gitcode.com/GitHub_Trending/ra/RapidOCR创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进