Search Posts

rust+Qt+PaddleOCR 实现的OCR桌面软件示例

功能效果

基于paddleOCR 的图片文字识别(OCR)桌面软件,使用Rust+QT开发。

带调试界面的运行效果:

src/ocr.rs 文件的来源:

安装 ruic 工具,https://github.com/jnbooth/ruic
然后

cd src/
ruic.exe -o uic.rs --all mainwindow.ui

就会得到src/uic.rs 。目前已包含 src/uic.rs 文件,所以无需执行上述 ruic 命令。

注意:

  1. ruic.exe 对 QT5 的Line 类 不支持。需要将uic.rs中重复的声明和 Line 相关的声明删掉。
  2. 编译环境要求:qt 5.14.0或低于该版本的qt。windows 10系统。rust qt在windows下的环境要求在有 msvc 编译器的环境,
    所以建议使用:打开【适用于 VS 2017 的 x64 本机工具命令提示】后cd到项目目录下进行cargo 操作。
  3. 在cargo build 之前,要确保按照 【PaddleOCR-json\说明.txt】 文件的要求放置好 PaddleOCR-json 的文件。
  4. main.rs 中 pub type OcrResult = Vec<Root>; 等代码参考了 https://gitee.com/toobo/PaddleOCRRust/blob/master/src/entity.rs ,在此向toobo( ZHao )表示感谢!感谢 PaddleOCR-json 项目

如何编译:

由于技术栈基于 Rust + Qt 5.14.0 + paddleOCR(C++),所以需要借助一些rust crate库实现。编译过程已通过build.rs 脚本进行了一键封装。

编译测试版

cargo build

编译生产版

cargo build --release

授权协议

Apache-2.0

rust+Qt 的其他项目:

  1. 使用 Rust + Qt 开发的仿有道词典的翻译 + 词典 工具.
  2. rust-qt的官方 examples

结论:

使用QT+Rust开发,主要是练手希望熟悉Rust,以及验证rust-qt的成熟度+OCR软件功能的MVP验证。

  1. 关于成熟度:QT C++能支持的功能,rust-qt也支持(目前rust-qt官方支持QT5.14.0 及以下版本的QT,提供了qt_core 、qt_gui、qt_widgets、 qt_ui_tools 等核心模块的crate库)。
  2. 关于开发效率: 对于熟悉Rust的人员,采用rust-qt的开发效率也可以很高,因为UI可以拖拽然后用 ruic 工具生成rust代码(参考 https://github.com/kerneltravel/rust_qt_gui_paddle_ocr_example 的uic.rs 代码示例)。Rust有很多crate库可用,业务逻辑层的Rust代码也可以很清晰。容易被QT内置的数据类型到Rust的数据类型之间如何转换而困扰,对于初学Rust的人员开发效率不高。这里推荐:C++qt的QString字符串转换到Rust的字符串,可简单使用&qs( )完成;其他转换可参考本示例项目。
  3. 能否替代C++作为主要开发语言: 采用rust-qt的方式,能替代QT C++的开发方式。
  4. OCR识别速度:基于paddleOCR-json 项目+exe进程调用,OCR识别速度较快。 而另外一种基于C++ PaddleOCR.dll调用的项目PaddleOCRRust理论上要比paddleOCR-json更快,但由于PaddleOCRRust需要windows的特定字符转换函数(很慢)导致 PaddleOCRRust 也很慢无法达到可用级别。所以rust_qt_gui_paddle_ocr_example 采用了paddleOCR-json 进行OCR识别。
  5. 关于跨平台支持:rust-qt有跨平台支持,但不是基于rust的交叉编译,因为QT库的安装是依赖于对应操作系统的,要先安装好QT环境(网上有文字介绍怎样安装QT版本)。然后使用cargo build 生成最终的可执行文件。Linux平台的编译要在linux系统下进行,Windows平台的编译要在Windows系统下进行。
  6. 关于支持的操作系统版本:windows系统支持win7及以上版本的64位系统。支持所有能安装QT5.x版本的linux 64位的系统。
加好友请备注:chinaoss
您可以在微信公众号联系我们
我们将24小时内回复。
取消