我把 PP-OCRv6 做成了一个绿色版 C++ HTTP OCR 服务:解压即用,C#、Java、Python 都能调

目录

说明

效果

它解决了什么问题

项目特点

接口设计

绿色部署包

[为什么选择 OpenCV DNN](#为什么选择 OpenCV DNN)

适合哪些人

目前验证效果

总结

下载


说明

最近一直在整理 OCR 推理项目,这次做了一个更适合实际部署和客户集成的版本:

lw.OpenCVDNN.PPOCR.HttpServer

它是一个基于 C++ 开发的 PP-OCR HTTP 服务,底层使用 OpenCV 5 DNN 做 OCR 推理,默认集成 PP-OCRv6 tiny 模型。程序提供 HTTP 接口,客户端只需要把图片转成 base64 上传,就可以拿到识别文本、坐标、置信度和 OCR 耗时。

更重要的是,这次做成了绿色部署包:

解压即可运行,不需要安装复杂环境。

效果

它解决了什么问题

很多 OCR 项目在演示时很好用,但真正交付给客户时,经常会遇到这些问题:

  1. 环境依赖复杂

    需要安装 Python、CUDA、ONNX Runtime、各种运行库,新手很容易卡在环境配置上。

  2. 调用语言受限

    如果只提供 C++ DLL,C# 可以调,但 Java、Python、Web 系统接入还要再封装一层。

  3. 部署不够友好

    客户希望拿到一个文件夹,双击或者注册服务就能跑,而不是重新编译源码。

  4. 不方便测试

    接口服务启动后,如果没有测试页面,还要额外写 Postman、Python 脚本去验证。

所以这次我把 OCR 推理能力封装成了一个 HTTP 服务。

项目特点

lw.OpenCVDNN.PPOCR.HttpServer 主要包含这些能力:

  • C++ 原生 HTTP 服务

  • 使用 OpenCV 5 DNN 推理

  • 默认 PP-OCRv6 tiny 模型

  • CPU 推理,不依赖 GPU

  • base64 图片上传

  • 返回识别文本、坐标、置信度、耗时

  • 内置 HTML 测试页面

  • 支持 Windows 服务

  • 支持开机自启动

  • spdlog 日志记录

  • 绿色部署包,带 C++ 运行时

整个服务启动后,浏览器访问:

复制代码
http://127.0.0.1:8080/

就可以打开测试页面,选择图片,点击识别,页面会显示 OCR 结果,并自动绘制文本框。

接口设计

OCR 接口非常简单:

复制代码
POST /api/ocr
Content-Type: application/json

请求内容:

复制代码
{
  "imageBase64": "data:image/jpeg;base64,..."
}

返回内容:

复制代码
{
  "code": 0,
"msg": "ocr success",
"elapsed_ms": 228,
"image_width": 1280,
"image_height": 720,
"results": [
    {
      "text": "识别文本",
      "score": 0.99,
      "x1": 10,
      "y1": 20,
      "x2": 200,
      "y2": 20,
      "x3": 200,
      "y3": 50,
      "x4": 10,
      "y4": 50
    }
  ]
}

这样的接口形式,对接非常方便。

C# 可以调,Java 可以调,Python 可以调,前端也可以直接调。

绿色部署包

这次整理后的部署包结构大致如下:

复制代码
lw.OpenCVDNN.PPOCR.HttpServer
├─ lw.OpenCVDNN.PPOCR.HttpServer.exe
├─ lw.OpenCVDNN.PPOCRSharp.dll
├─ opencv_world500.dll
├─ C++运行时DLL
├─ inference
├─ www
├─ scripts
├─ README.md
├─ 使用说明.md
└─ 绿色部署包说明.md

其中 inference 目录放模型文件,www 目录放测试页面,scripts 目录放启动和服务安装脚本。

控制台运行:

复制代码
lw.OpenCVDNN.PPOCR.HttpServer.exe --port 8080

安装成 Windows 服务:

复制代码
scripts\install_service.bat

卸载服务:

复制代码
scripts\uninstall_service.bat

也可以指定端口:

复制代码
scripts\install_service.bat 18080

这种方式比较适合客户现场部署,也适合把 OCR 能力挂到业务系统旁边作为独立服务。

为什么选择 OpenCV DNN

这版主要目标不是追求极限性能,而是追求部署简单、依赖清晰、方便学习。

OpenCV DNN 的优点是:

  • 依赖少

  • Windows 部署方便

  • C++ 集成简单

  • 不需要额外推理框架运行环境

  • 适合 CPU 场景

  • 对新手更友好

对于很多普通 OCR 业务,比如票据、证件、表格截图、软件截图、拍照识别等,CPU 版本已经可以满足不少场景。

如果后续追求更高性能,还可以继续扩展 ONNX Runtime、OpenVINO、TensorRT 等版本。

适合哪些人

这个项目比较适合:

  • 想学习 PP-OCR C++ 部署的开发者

  • 想把 OCR 封装成 HTTP 服务的开发者

  • C#、Java、Python 项目需要快速接 OCR 的团队

  • 不想折腾 Python 环境的 Windows 用户

  • 需要绿色部署、客户现场交付的项目

  • 想研究 OpenCV 5 DNN 推理的朋友

目前验证效果

当前绿色包已经完成实际测试:

复制代码
/health 正常
/api/ocr 测试成功
PP-OCRv6 tiny 模型
返回 22 个识别结果
OCR 耗时约 200ms+

实际速度会受到图片大小、CPU 性能、模型选择、检测参数等影响。

默认使用的是 PP-OCRv6 tiny,如果需要更高精度,也可以切换到 small 模型。

总结

这次的 lw.OpenCVDNN.PPOCR.HttpServer 重点不是做一个"大而全"的 OCR 平台,而是做一个简单、清晰、可部署、方便集成的 OCR 服务。

它的定位很明确:

一个可以直接交付、可以快速测试、可以被各种语言调用的 C++ OCR HTTP 服务。

对于想学习 OCR 工程化部署的朋友,也可以从这个项目开始,看清楚一个 OCR 服务从模型、推理、接口、日志、网页测试到 Windows 服务部署的完整流程。

下载

方式一

通过网盘分享的文件:lw.OpenCVDNN.PPOCR.HttpServer 链接: https://pan.baidu.com/s/1n1p0xn_Ss_BRLwN0DN3oFg 提取码: 9ii4

方式二

服务下载