做 OCR 项目,除了识别效果,大家往往还关心几个问题:
部署麻不麻烦?能不能离线运行?C# 如何调用?有没有现成的界面和 HTTP 服务?
这次,给大家介绍一个我持续开发的开源项目:lw.PPOCR.Vulkan。
它使用 C++ 和 Vulkan Compute 实现 PP-OCR GPU 推理,提供完整 OCR、C# WinForms Demo,以及 HTTP/Web 服务。模型、字典和示例随部署包提供,方便先体验,再接入自己的项目。
项目地址:lw.PPOCR.Vulkan(github.com/lxw112190/l…
一、这个项目有什么特点?
lw.PPOCR.Vulkan 不依赖 OpenCV DNN、ONNX Runtime 或 CUDA 运行时。
它在原生 C++ 中读取项目支持的 ONNX 模型,组织计算任务,再通过 Vulkan Compute 执行网络推理。
目前支持固定的 PP-OCRv6 Tiny、Small、Medium 三套模型,默认采用 FP32 网络计算。
对于使用预编译包的用户,不需要安装 Python、Visual Studio、CUDA 或 Vulkan SDK。但目标电脑仍需安装兼容的显卡驱动,GPU 也必须满足项目的能力要求。
这里需要说明:不依赖 CUDA,不等于所有显卡都能运行。 当前已在 Windows 10 的 AMD 集显和 NVIDIA RTX 4060 Laptop GPU 上完成实体测试,其他设备需要结合驱动和实际能力验证。
二、完整 OCR 和框选识别,都能用
项目提供两种识别方式。
完整 OCR 适合直接输入整张图片,依次完成文字检测、可选方向分类和文字识别,输出文字、四点坐标、置信度及分阶段耗时。
仅识别 适合已经裁剪好的文字区域,只执行文字识别,不重复运行检测网络。
如果你的程序已经知道文字在哪里,例如固定区域截图、相机采集区域,或者用户手动框选,就可以使用仅识别接口,避免不必要的检测开销。
项目定位是核心 OCR 能力,不包含 PDF、表格结构或版面解析,也不是可以加载任意模型的通用 ONNX 引擎。
三、C# 开发者可以先用 WinForms Demo 体验
Windows 部署包包含现成的 C# WinForms 测试程序。
完整解压后,运行 Demo,即可选择 GPU 和模型,初始化后进行整图识别。界面可以显示检测框、识别文字、JSON 结果和耗时,也支持鼠标框选区域后仅识别。
项目同时提供 C# 示例源码和稳定 C ABI,方便把 OCR 能力接入现有应用。
对于 C# 开发者,可以先通过 Demo 验证自己的图片和目标显卡,再参考调用示例完成集成,不必一开始就搭建完整开发环境。
四、不想直接调用 DLL?可以使用 HTTP 服务
除了原生接口,项目还提供 HTTP 服务和浏览器测试页面。
启动服务后,打开网页即可上传图片,查看文字、检测框和耗时。其他程序也可以通过 HTTP 接口调用,无需直接处理原生 DLL。
服务支持二进制图片、JSON/Base64 图片、仅识别批量请求,并提供 API Key、有界请求队列、等待超时,以及运行和访问日志。
默认只监听本机。需要开放给其他电脑访问时,应同时配置认证和网络访问限制,不建议把未认证的服务直接暴露到公网。
五、实际速度怎么样?
我们对最新本机代码进行了一轮完整 OCR 测试。
测试环境为 Windows 10、RTX 4060 Laptop GPU;使用 100 张带标注的生成图片,共 614 行、20,125 个字符。方向分类开启,检测长边上限为 960,网络采用默认 FP32。
全数据预热后,每个模型测量三轮,结果如下:
| 模型 | 平均完整 OCR 耗时 | 字符准确率 |
|---|---|---|
| Tiny | 23.24 ms/张 | 95.12% |
| Small | 36.65 ms/张 | 97.72% |
| Medium | 74.69 ms/张 | 98.80% |
耗时包含原生完整 OCR 调用及结果 JSON 取回、解析,不包含图片文件解码、模型初始化、HTTP 或界面开销。
字符准确率采用 1−字符错误率(CER),计入错字、漏字和多字,不代表每张图片都能完全识别正确。
这些数据来自生成图片和单台设备,不是所有真实场景的性能承诺。 首次调用、新尺寸图片、显卡空闲降频和不同驱动,都可能影响耗时。建议用自己的图片测试后,再决定选择哪套模型。
六、优化的不只是网络计算
OCR 的总耗时,还包括缩放、归一化、裁剪、数据搬运和结果处理。
在设备能力满足时,项目会自动启用 GPU 图像前处理和透视裁剪,共享原图,减少重复搬运。能力不足时,图像处理保留在 CPU,网络仍通过 Vulkan 推理。
最近的优化还包括执行计划缓存、工作区复用及部分计算路径优化。当前版本号为 v1.0.1,这一轮维护重点改善大小图交替识别时的 REC 执行计划复用。
默认路径保持 FP32,不通过降低精度来宣传提速。缓存也有内存成本,因此项目会同时记录速度、资源占用和正确性,而不只展示一个最快的数字。
七、如何下载体验?
源码和文档:GitHub 项目主页(github.com/lxw112190/l…
部署包入口:GitHub Releases(github.com/lxw112190/l…
Windows 用户完整解压部署包后,可以直接运行 WinForms Demo,或按包内说明启动 HTTP 服务。
项目提供 Windows x64 和 Linux x64 构建与部署支持。Windows 已有上述实体 GPU 测试;Linux 软件 Vulkan CI 验证不等于 Linux 实体显卡已经全部验证。
C# Demo 另需兼容的 .NET Framework 4.0 或更高版本。没有兼容 Vulkan 设备时,程序会明确报错,不会自动切换到 CPU OCR。
项目采用 Apache-2.0 开源,使用及分发时请遵守项目和第三方组件的许可证要求。
联系与支持
欢迎用自己的图片和显卡测试,也欢迎提交问题、建议和改进代码。
- QQ 群:天天代码码天天,群号 264292622
- 项目地址:lw.PPOCR.Vulkan(github.com/lxw112190/l…
如果项目对你有帮助,欢迎 Star、转发,或支持项目维护。
让本地 GPU OCR 更容易体验,也更容易接入实际项目。