PaddleOCR系列-训练模型并部署android手机
PaddleOCR系列-训练模型并部署android手机
1. 训练paddleocr模型
略
,参考另一篇博客:PaddleOCR系列-基础知识
2. ocr模型部署安卓手机
总体说明
- 封装为独立的Library,可以编译为aar,作为模块来调用;
- Native层以C++编写;
- Demo App以Kotlin-JVM编写;
- Android版与其它版本不同,包含了几个应用场景,包括相册识别、摄像头识别、手机IMEI号识别、摄像头身份证识别这几个功能页面;
- opencv 3.4.15,使用了opencv-mobile的代码,编译脚本在script文件夹里;
- onnxruntime动态库 1.6.0(因为当前模型不支持高版本)
2.1 AndroidStudio 2021.2.1或以上;
2.2. NDK下载,在SDK Tools中下载,版本选最新版;
2.3. cmake 3.4.1或以上,最好是3.18.1,在SDK Tools中下载;
2.4. 使用模型
下载预训练模型:模型下载
使用自己的模型:略
- det模型用于分割文字块,有两种模型(server和mobile),其中server体积大且较慢但效果好,mobile体积小且较快但效果差点。
- cls模型用于检测文字方向,只有一种模型
- rec模型用于文字识别,有两种模型(server和mobile),其中server体积大且较慢但效果好,mobile体积小且较快但效果差点。
ocr_success/OcrLibrary/src/main/assets
├── ch_ppocr_mobile_v2.0_cls_infer.onnx
├── ch_PP-OCRv2_det_infer.onnx det二选一,推荐
├── ch_ppocr_server_v2.0_det_infer.onnx det二选一
├── ch_ppocr_mobile_v2.0_rec_infer.onnx rec二选一,推荐
├── ch_ppocr_server_v2.0_rec_infer.onnx rec二选一
└── ppocr_keys_v1.txt
- 代码中配置使用哪个模型
ocr/OcrLibrary/src/main/java/com/benjaminwan/ocrlibrary/OcrEngine.kt,在init方法中配置:
val ret = init(
context.assets, numThread,
"ch_PP-OCRv2_det_infer.onnx",
"ch_ppocr_mobile_v2.0_cls_infer.onnx",
"ch_ppocr_mobile_v2.0_rec_infer.onnx",
"ppocr_keys_v1.txt"
)
2.5. 下载opencv-mobile-3.4.15-android.7z
下载地址 解压后目录结构为
ocr_success/OcrLibrary/src/sdk
└── native
├── jni
└── staticlibs
2.6. 下载onnxruntime-1.6.0-android.7z
- 解压后目录结构为
ocr_success/OcrLibrary/src/main/onnx
├── ONNXConfig.cmake
├── arm64-v8a
│ └── libonnxruntime.so
├── armeabi-v7a
│ └── libonnxruntime.so
├── include
├── x86
│ └── libonnxruntime.so
└── x86_64
└── libonnxruntime.so
2.7. 编译
- 编译Release包
- mac/linux使用命令编译./gradlew assembleRelease
- win使用命令编译gradlew.bat assembleRelease
- 输出apk文件在app/build/outputs/apk
2.8. 重新编译
删除项目根目录下的如下缓存文件夹
.idea
build
app/build
OcrLibrary/.cxx
OcrLibrary/build
2.9. demo界面效果
下面为测试效果
3. 源码下载
3.1. 项目源代码结构
ocr
├── app # demo app
├── capture # 截图
├── common-aar # app引用的aar库
├── keystore # app签名密钥文件
├── OcrLibrary # Ocr引擎库,包含Jni和C++代码
└── scripts # 编译脚本
源码下载
源码下载