大家好,我是何三,独立开发者

之前我分享过一款 OCR-API 工具,用于检测图片的旋转角度,帮助大家快速将倾斜的图片"转正"。

最近,有位老哥反馈让优化下,正好过年有空,我对这个工具进行了重大升级——从 burn 框架迁移到 ONNX Runtime,并用 Rust 完全重写。升级后的版本性能提升显著,今天就来和大家分享一下这次升级的成果。

OCR-API 性能数据

为什么选择重写?

之前的版本基于 burn 框架,虽然功能正常,但在部署和性能方面存在一些痛点:

  1. 部署复杂:需要携带额外的模型文件,运行时路径配置容易出问题
  2. 内存占用较高:对于资源受限的环境不太友好
  3. 启动速度慢:模型加载需要一定时间

这次重写,我选择了 Rust + ONNX Runtime 的组合,主要考虑:

  • 性能:Rust 的零成本抽象和 ONNX Runtime 的高效推理
  • 部署:静态资源打包,一个 exe 文件搞定
  • 安全:Rust 的内存安全特性

技术栈升级对比

核心升级亮点

1. 静态资源嵌入

这次升级最大的改进之一,就是将 ONNX 模型直接嵌入到可执行文件中:

// 嵌入二进制文件
const MODEL_BYTES: &[u8] = include_bytes!("../rotate_model.onnx");

这意味着: - 部署时无需携带额外的模型文件 - 避免运行时文件路径问题 - 简化分发和部署流程

最终的可执行文件约 90 MB左右,包含了所有必需的资源。

2. 技术栈升级

组件 新版本
Web 框架 Axum 0.7.9
ONNX 推理 ort 2.0.0-rc.9
图像处理 image 0.25.5, ndarray 0.16
异步运行时 tokio 1.42.0

3. API 接口保持兼容

接口设计保持简单易用:

POST /yzm_api/xuanzhuan/{token}/b64

请求参数:img - Base64 编码的图像数据

响应示例:

{
  "code": 0,
  "msg": "success",
  "data": 90.0
}

性能测试数据

重写后的性能表现让我非常惊喜,下面是详细的测试数据。

内存占用

指标 数值
工作集内存 20.78 MB
私有内存 12.24 MB

对于包含 ONNX 模型的 OCR 服务来说,这个内存占用非常轻量!

处理速度

单次顺序测试(10次):

指标 数值
首次请求耗时 68 ms(包含模型初始化)
后续请求平均耗时 3-4 ms
最小响应时间 2 ms

并发压力测试(50次,每次5个并发):

指标 数值
成功率 100%
平均响应时间 471.88 ms
峰值内存 20.78 MB

关键发现

  1. 内存占用极低:实际工作集内存仅约 20-21 MB
  2. 首次加载有预热:第一次请求约 68ms,后续仅需 2-4ms
  3. 内存稳定性好:经过 60 次请求后,内存仅增长约 0.36MB,无内存泄漏
  4. 并发处理能力强:支持多并发请求,表现稳定

部署更简单

部署时只需要两个个文件:

deploy/
├── ocr_api.exe        # 主程序(已嵌入模型)
└── config.ini         # 配置文件

启动服务:

.\ocr_api.exe

服务默认监听 0.0.0.0:3000,启动后会显示:

________  ___________________             _____ __________.___ 
\_____  \ \_   ___ \______   \           /  _  \\______   \   |
 /   |   \/    \  \/|       _/  ______  /  /_\  \|     ___/   |
/    |    \     \___|    |   \ /_____/ /    |    \    |   |   |
\_______  /\______  /____|_  /         \____|__  /____|   |___|
        \/        \/       \/                  \/
欢迎使用ocr-api,本软件仅供学习、研究,请勿用于非法用途
启动完成

总结

这次升级带来的改进是全方位的:

  • 低内存占用:仅约 20MB 工作集内存
  • 高处理速度:预热后单次请求 2-4ms
  • 内存稳定:无内存泄漏
  • 并发支持:支持多并发请求
  • 部署简单:静态资源嵌入,无需额外文件

如果你也在做图像处理相关的项目,或者需要一个轻量级的图片角度检测服务,欢迎试试这个新版本。

软件下载:关注“何三笔记”,回复“ocr-api”进行获取软件

本软件仅供学习、研究,请勿用于非法用途