该项目通过MNN(Alibaba)/Ncnn(Tencent)/OnnxRuntime(Microsoft)等推理引擎,通过DbNet/AngleNet/CrnnNet,通过引擎携带转换器转换paddle(百度飞浆)模型来识别OCR文字
项目目前只是利用各引擎的CPU部分来识别,降低学习门坎,通过简单注册工厂模式,将引擎打包到动态、静态库,方便调用
/include/RapidOcr //源码.h目录
/include/RapidOcr/Core //核心.h目录
/include/RapidOcr/Provider //引擎.h目录
/src //源码.cpp目录
/src/Core //核心.cpp目录
/src/Provider //引擎.cpp文件目录
/cmake //cmake脚本目录
/cmake/RapidOcrConfig.cmake.in //项目发布cmake配置模板
/cmake/RapicOcr.pc.in //项目发布pkgconfig配置模板
/cmake/RapidOcrSourceConfig.cmake //源码配置脚本
/cmake/FindDepsPath.cmake //封装按cmake目录规则,查找依赖目录
/cmake/FindDepend.cmake //依赖查找脚本
/cmake/RapidOcrBuild.cmake //编译脚本
/cmake/RapidOcrInstall.cmake //安装脚本
/deps //依赖库目录
/deps/Ncnn //依赖库Ncnn目录
/deps/MNN //依赖库MNN目录
/deps/OnnxRuntime //依赖库OnnxRuntime目录
/models //模型目录
/models/Ncnn //Ncnn模型目录
/models/MNN //MNN模型目录
/models/OnnxRuntime //OnnxRuntime模型目录
/CMakeLists.txt //cmake主文件
/test //单文件测试目录
- 下载源码
git clone https://gitee.com/A_knife/RapidOcrCpp
- 编译依赖
在deps目录下各依赖有ReadMe.md文件,根据提示编译即可,不同平台可自行填加编译参数
在window下如果使用官方依赖.dll,请自行按cmake标准目录存放,制件依赖xxxxConfig.cmake
├── deps/ # ===== 第三方依赖 =====
│ ├── onnxruntime/
│ │ ├── Linux/
│ │ ├── macOs/
│ │ └── Windows/
│ │ ├── include/
│ │ │ └── onnxruntime/
│ │ ├── lib/cmake/onnxruntime/onnxruntimeConfig.cmake
│ │ └── bin/
│ │
│ ├── ncnn/
│ │ ├── Linux/
│ │ ├── macOs/
│ │ └── Windows/
│ │ ├── include/
│ │ │ └── ncnn/
│ │ ├── lib/cmake/ncnn/ncnnConfig.cmake
│ │ └── bin/
│ │
│ ├── MNN/
│ │ ├── Linux/
│ │ ├── macOs/
│ │ └── Windows/
│ │ ├── include/
│ │ │ └── MNN/
│ │ ├── lib/cmake/MNN/MNNConfig.cmake
│ │ └── bin/
│ │
注:项目中cmake/FindDepsPath中列出了常见目录结构,在Cmake构建时会给出[DEBUG]提示
- 选择项目引擎
在项目根目录下CMakeLists.txt中有
BUILD_WITH_ONNXRUNTIME=ON(启用OnnxRuntime引擎)
BUILD_WITH_NCNN=ON(启用Ncnn引擎)
BUILD_WITH_MNN(启用MNN引擎),
注,引擎可编译时选择一个、二个,三个打包
- 其它编译参数说明 -DDEPS_PATH=指定存放依赖的目录,默认/deps -DCMAKE_BUILD_TYPE=Release | Debug 暂不持其它方式 -DBUILD_SHARED_LIBS=ON | OFF 默认ON,输出libRapidOcr.so/RapidOcr.dll -DBUILD_WITH_JNI=ON | OFF 默认OFF,ON输出libRapidOcr_jni.so/RapidOcr_jni.dll -DBUILD_OUTPUT_BIN=ON | OFF 默认ON,输出带调试信息的二进制可执行控制台代码 -DBUILD_OUTPUT_TEST=ON | OFF 默认OFF,编译/test目录下的c/cxx调用RapidOCR的测试代码 -DCMAKE_INSTALL_PREFIX=指定安装目录 将生成的库和二进制代码+头文件,安装到指定目录,实现下游调用
- 项目代码编译可生成静态库、动态库和二进制测试可执行
- 安装后的RapidOcr遵循cmake标准目录结构,供下游find_package使用,也可以支持pkg调用
- 以RapidOcr为中间件的,参考/test目录下的使用方式
- RapidOcr不做中间件的,/src/Core/Main.cpp可以直接输出二进制
本项目使用了以下优秀的推理框架来实现模型部署:
-
OpenCV
- 用途:图像读写、色彩空间转换、仿射变换、结果绘制
- 官网:https://opencv.org
- 仓库:https://github.com/opencv/opencv
- 协议:Apache-2.0 License
-
ONNX Runtime
- 用途:跨平台高性能推理。
- 官网:https://onnxruntime.ai
- 仓库:https://github.com/microsoft/onnxruntime
- 协议:MIT License
-
ncnn
- 用途:移动端/嵌入式端高性能计算。
- 官网:https://github.com/Tencent/ncnn
- 协议:BSD-3-Clause License
-
MNN (Mobile Neural Network)
- 用途:轻量级端侧推理。
- 官网:https://www.mnn.zone
- 仓库:https://github.com/alibaba/MNN
- 协议:Apache-2.0 License
-
OpenVINO™ Toolkit
- 用途:Intel 硬件平台加速。
- 官网:https://software.intel.com/openvino
- 仓库:https://github.com/openvinotoolkit/openvino
- 协议:Apache-2.0 License
本项目 Fork 并定制 了
- RapidAI/RapidOcrOnnx
- RapidAI/RapidOcrNcnn
修改内容:
- 去除原项目中GPU部分
- 合并两个项目共有部分,相近部分代码做了调整
- 重构目录结构和重新制作CMAKE编译,暂不对 FOR Windows 编译/MT方式支持
(C++ OCR 推理引擎,基于 ONNX Runtime,底层模型为 PP-OCRv3 系列 ONNX 格式):
- Fork 本仓库
- 新建 Feat_xxx 分支
- 提交代码
- 新建 Pull Request