社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

dotNET跨平台 • 2 月前 • 164 次点击  

说明

最近一直在整理 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


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/198177