CoreOCROnnx:基于 ONNX / OpenVINO 的离线极速 OCR 与 YOLO 推理组件

CoreOCROnnx:基于 ONNX / OpenVINO 的离线极速 OCR 与 YOLO 推理组件 CoreOCROnnx离线极速 OCR YOLO ONNX / OpenVINO 双后端大家好最升级了一个更偏轻量、高速部署方向的 OCR 开源项目CoreOCROnnx。如果说 PaddleOCRApi 更偏完整 Paddle 推理库封装那么 CoreOCROnnx 的定位就是使用 ONNX / OpenVINO 运行时提供更轻量的离线 OCR 和 YOLO 推理能力。项目地址GitHubhttps://github.com/PaddleOCRCore/CoreOCROnnxReleasehttps://github.com/PaddleOCRCore/CoreOCROnnx/releases一、项目简介CoreOCROnnx 是一个免费离线 OCR 组件核心推理能力由PaddleOCROnnx.dll提供。它基于 C 动态库封装并提供 C# SDK、WebAPI 服务以及多语言调用示例方便在不同业务系统中快速集成。当前项目支持PP-OCRv5 mobile / server 模型向下兼容 PP-OCRv4 / PP-OCRv3 模型ONNX Runtime 后端OpenVINO 后端CPU / GPU 推理OCR 检测、方向分类、文字识别YOLO detect / pose / classification / segmentation / obbC# / C / Java / Python / Go 等多语言调用WebAPI 服务化部署WinForms Demo 调试体验项目采用 Apache-2.0 License欢迎大家使用、二次开发和贡献。二、为什么做 ONNX 版本很多 OCR 项目在实际落地时会遇到几个很现实的问题部署包太重推理环境复杂业务系统只需要 OCR 基础能力不一定需要完整推理框架希望用统一接口调用 OCR 和 YOLO希望在 Windows x64 环境中快速交付希望前端或其他业务系统通过 HTTP 直接调用CoreOCROnnx 主要解决的就是这些问题。它把 OCR 推理能力封装为PaddleOCROnnx.dllC# 端只需要通过 SDK 或 WebAPI 调用即可。对于业务系统来说调用方式更接近普通组件不需要关心底层 C 推理细节。三、v4.0.0 版本重点更新当前版本v4.0.0本次版本主要新增两个方向1. 增加 YOLO 支持CoreOCROnnx 不再只是 OCR 组件现在也支持 YOLO 推理。SDK 中已经提供了 YOLO 初始化与检测接口YoloInitJsonYoloDetectYoloDetectByteYoloDetectMatYoloDetectBase64YoloDetectTensorYoloDetectByteTensorYoloDetectMatTensorYoloDetectBase64TensorYoloFreeEngine适合用于通用目标检测姿态检测图像分类分割任务OBB 旋转框检测OCR 前置区域检测业务图片结构化分析2. 增加 OpenVINO 后端支持除了 ONNX Runtime 后端v4.0.0 也提供了 OpenVINO 后端运行时包。OpenVINO 后端支持PaddleOCR 检测、方向分类、文字识别YOLO detect / pose / classification / seg / obb现有 Tensor 接口对于 Intel CPU / Intel GPU 场景OpenVINO 后端会更有部署价值。需要注意OpenVINO 后端中的use_gputrue表示使用 OpenVINO 的 Intel GPU 设备不是 CUDA也不是 DirectML。四、运行时包说明v4.0.0 Release 提供两个运行时包可按需选择ONNX Runtime 后端OCRRuntimeOnnx_v4.0.0.zipOpenVINO 后端OCRRuntimeOpenVino_v4.0.0.zip下载地址https://github.com/PaddleOCRCore/CoreOCROnnx/releases部署时将运行时包中的PaddleOCROnnx.dll和同目录依赖文件复制到 C# 程序运行目录即可。当前发布包为 Windows x64因此 C# 项目建议使用 x64 运行。五、OpenVINO 后端部署注意事项OpenVINO 后端不要只复制PaddleOCROnnx.dll还需要一起复制 OpenVINO 依赖文件。CPU 版至少包含PaddleOCROnnx.dll openvino.dll openvino_c.dll openvino_intel_cpu_plugin.dll openvino_ir_frontend.dll openvino_onnx_frontend.dll plugins.xml如果发布包包含 GPU 插件还会包含openvino_intel_gpu_plugin.dll cache.jsonOpenVINO 后端支持两类模型路径ONNX 模型传入.onnx文件路径OpenVINO IR 模型传入.xml文件路径旁边必须有同名.bin例如 PaddleOCR 的 OpenVINO IR 模型配置det_infer models\PP-OCRv5_mobile_det_ov\inference.xml cls_infer models\PP-OCRv5_mobile_cls_ov\inference.xml rec_infer models\PP-OCRv5_mobile_rec_ov\inference.xml keys models\keys.txt注意不要把模型目录直接传给Init/Initjson。错误写法models\PP-OCRv5_mobile_det_ov正确写法models\PP-OCRv5_mobile_det_ov\inference.xml如果错误信息中出现model format: 通常就是传入了目录或者路径没有模型扩展名。六、WebAPI 服务能力CoreOCROnnx.WebApi 提供 HTTP 接口方便前端、Java、Python、Go 或其他系统直接调用 OCR 服务。当前 WebAPI 项目目标框架为net10.0WebAPI 服务启动后可访问http://localhost:5000 http://localhost:5000/scalar也可以通过项目中的启动脚本运行StartOCRApi.batStartOCRApi.sh主要接口包括接口功能输入/OCRService/Get检查服务状态GET/OCRService/GetIdCard身份证识别Base64/OCRService/GetOCRText通用 OCR 识别Base64/OCRService/GetOCRFile通用 OCR 识别图片文件/OCRService/GetOCRJsonFile通用 OCR 识别返回 JSON图片文件Base64 OCR 请求示例{Base64String:图片Base64字符串,ResultType:text}返回示例{status:200,data:识别出的文字内容,errorMessage:}如果ResultType设置为json则返回 OCR 结构化 JSON 结果。七、SDK 能力说明CoreOCROnnx.SDK 对底层 DLL 做了进一步封装主要能力包括OCR 初始化支持通过实体参数或 JSON 参数初始化 OCRInitInitDefaultOCREngine支持配置检测模型路径方向分类模型路径识别模型路径字典文件路径CPU 线程数CPU 内存限制GPU 开关图像 padding最大边长缩放文字框阈值方向检测可视化输出日志输出OCR 识别支持多种输入方式Detect(string imagefile)Detect(byte[] imagebyte)DetectMat(IntPtr ptr_cvmat)DetectBase64(string base64)YOLO 推理YOLO 同样支持多种输入方式图片文件图片字节OpenCV MatBase64 图片JSON 结果输出Tensor 原始结果输出这让 CoreOCROnnx 不只是 OCR 组件也可以作为一个轻量视觉推理组件来使用。八、配置示例WebAPI 的appsettings.json中可以配置 OCR 模型和推理参数{OCRConfig:{det_infer:ch_PP-OCRv5_mobile_det.onnx,rec_infer:ch_PP-OCRv5_rec_mobile_infer.onnx,cls_infer:ch_ppocr_mobile_v2.0_cls_infer.onnx,keyFile:ppocrv5_dict.txt,cpu_mem:-1,cpu_threads:30,use_gpu:false,gpu_id:0,gpu_mem:4000,padding:20,maxSideLen:1024,boxScoreThresh:0.5,boxThresh:0.3,unClipRatio:1.6,doAngle:true,mostAngle:true,visualize:false,enable_log:false,isOutputConsole:true}}说明PP-OCRv5 和 PP-OCRv4 的字典文件不通用需要按模型版本选择cpu_threads可根据服务器核心数调整maxSideLen可控制长边缩放影响速度和识别效果padding可改善文字框未完整覆盖文字的问题use_gpu在 OpenVINO 后端表示 Intel GPU九、适用场景CoreOCROnnx 适合以下场景内网 OCR 服务桌面软件 OCR 集成轻量 WebAPI OCR 服务图片文字提取身份证、票据、表单识别OCR YOLO 联合视觉分析自动化系统中的图像识别工业检测前置识别Intel CPU / Intel GPU 环境部署不希望引入完整 Paddle 推理库的轻量项目如果你的项目需要 OCR-VL、PP-Structure 等更完整的文档理解能力可以使用 PaddleOCRApi如果你的项目更关注轻量、速度、ONNX/OpenVINO 部署和 YOLO 推理那么 CoreOCROnnx 会更合适。十、项目结构PaddleOCROnnxWebApi/ ├─ CoreOCROnnx.SDK/ # C# SDK 封装 │ ├─ Services/ # OCR / YOLO 服务封装 │ ├─ Interface/ # IOCRService 接口 │ ├─ Models/ # OCR / YOLO 结果模型 │ └─ OCRRuntime/ # Demo 图片、模型说明等资源 │ ├─ CoreOCROnnx.WebApi/ # WebAPI 服务 │ ├─ Controllers/ # OCR 接口 │ ├─ Services/ # OCR 引擎服务 │ ├─ Views/ # 首页视图 │ ├─ wwwroot/ # 静态资源 │ └─ appsettings.json # OCR 配置 │ ├─ Demo/ # 多语言 Demo │ ├─ WinFormsOnnx/ │ ├─ WinFormsOV/ │ ├─ Python/ │ └─ GoDemo/ │ └─ CoreOCROnnx.sln # Visual Studio 解决方案十一、版本路线版本日期重点v4.0.02026-06-07增加 YOLO 支持增加 OpenVINO 支持v1.0.02026-01-18初版发行 CoreOCROnnx.WebApi十二、总结CoreOCROnnx 是一个面向实际部署的轻量 OCR / 视觉推理组件。它的核心优势是离线运行部署轻量支持 PP-OCRv5支持 ONNX Runtime / OpenVINO 后端支持 OCR 和 YOLO支持 WebAPI 服务化支持多语言调用C# 端调用方式简单如果你正在做 OCR 服务、桌面软件文字识别、图像自动化识别或者希望在 Intel 硬件上尝试 OpenVINO 部署可以关注这个项目。项目地址GitHubhttps://github.com/PaddleOCRCore/CoreOCROnnxReleasehttps://github.com/PaddleOCRCore/CoreOCROnnx/releases如果项目对你有帮助欢迎点一个免费的 Star。