目录
[为什么选择 OpenCV DNN](#为什么选择 OpenCV DNN)
说明
最近一直在整理 OCR 推理项目,这次做了一个更适合实际部署和客户集成的版本:
lw.OpenCVDNN.PPOCR.HttpServer
它是一个基于 C++ 开发的 PP-OCR HTTP 服务,底层使用 OpenCV 5 DNN 做 OCR 推理,默认集成 PP-OCRv6 tiny 模型。程序提供 HTTP 接口,客户端只需要把图片转成 base64 上传,就可以拿到识别文本、坐标、置信度和 OCR 耗时。
更重要的是,这次做成了绿色部署包:
解压即可运行,不需要安装复杂环境。
效果

它解决了什么问题
很多 OCR 项目在演示时很好用,但真正交付给客户时,经常会遇到这些问题:
-
环境依赖复杂
需要安装 Python、CUDA、ONNX Runtime、各种运行库,新手很容易卡在环境配置上。
-
调用语言受限
如果只提供 C++ DLL,C# 可以调,但 Java、Python、Web 系统接入还要再封装一层。
-
部署不够友好
客户希望拿到一个文件夹,双击或者注册服务就能跑,而不是重新编译源码。
-
不方便测试
接口服务启动后,如果没有测试页面,还要额外写 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
方式二