ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

PaddleOCR Android 部署实战:跑通移动端文字识别并调好性能

PaddleOCR Android 部署实战:跑通移动端文字识别并调好性能 PaddleOCR Android 部署实战跑通移动端文字识别并调好性能【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100 languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCRPaddleOCR 提供了一套可以直接跑在 Android 设备上的移动端 OCR 方案模型本地加载相机或相册图片在设备端完成文字识别不需要依赖网络。本文以仓库内置的 Android Demo 为例带你完成环境搭建、跑通识别、看懂识别链路并按设备情况完成性能调优。什么设备和场景适合做端侧 OCR设备Android 8.0 及以上、4 核以上的中低端机即可运行端侧方案对 CPU 要求不高无需 NPU。适合拍照识别文档、票据、菜单等低频触发、单次图片输入的场景离线环境下也能完整工作。不适合需要连续视频流逐帧识别的高吞吐场景这类需求建议放在服务端处理。配置环境并编译运行 Android Demo前置条件依赖版本Android Studio2024.2 及以上JDK17NDK / CMake在 Android Studio 中按提示安装即可目标设备minSdk 26Android 8.0开启 USB 调试分步操作克隆仓库git clone https://gitcode.com/GitHub_Trending/pa/PaddleOCR下载 PP-OCRv6 的 small 或 tiny 版本 ONNX 模型检测 识别各一个压缩包解压后将inference.onnx放入deploy/ppocr-android/ppocr-sdk/src/main/assets/models/det/把识别模型的inference.onnx和inference.yml放入同级models/rec/目录。在 Android Studio 中打开deploy/ppocr-android或用命令行编译./gradlew :app:assembleDebug手机连接电脑后执行./gradlew :app:installDebug或直接在 Android Studio 点击运行。启动应用后等待模型加载完成从相册选一张图片即可看到识别文本、框坐标和检测/识别两段耗时。如果以后要把 OCR 能力并入自己的应用可以直接复用ppocr-sdk模块源码依赖或构建 AAR 两种方式说明见 deploy/ppocr-android/ 的 README无需整包引入 Demo。拆解 OCR 识别链路从图片到文字一次识别在 SDK 内部依次经过五步理解了链路后面调优和排错才知道该动哪里。图像预处理拿到相机或相册的 Bitmap 后先做 resize 与归一化。检测阶段的输入长边会被限制在配置值默认detLimitSideLen 64对应的缩放策略以内这一步直接决定后续耗时和精度。文本区域检测检测模型DB 系列输出文字所在的多边形框再经过 unclip 扩展和阈值过滤得到最终框列表。检测是全链路里最耗时的一段。方向矫正相机拍到的图经常是旋转的Android Demo 内置的方向分类器会判断文本行朝向并把裁剪图转正再送进识别模型。下面这张就是 Android Demo assets 里带方向旋转的测试图文字识别每个文本框裁剪后单独送入识别模型CTC 解码逐行输出文字和置信度。识别是按行处理的文字行越多这一段耗时越长。结果输出SDK 汇总每行的文本、置信度、框坐标以及检测、识别、总耗时等计时字段。下面是 PP-OCR 对电子设备屏显文字的识别效果示例可以看到时间、日期两行文本均被正确提取性能调优清单线程、内存、模型与分辨率按设备调整线程数通过EngineConfig(numThreads 4)配置推理线程四核设备设 4八核可设 8设为 1 适合对功耗敏感的场景。控制模型体积PP-OCRv6 提供 small 与 tiny 两档 ONNX 模型tiny 体积更小、速度更快精度略降打包进 APK 前先看模型占了多少包体积。管理内存识别完成后及时释放 BitmapSDK 不再使用时调用release()避免模型和 OpenCV 句柄泄漏。调整输入分辨率检测输入长边越大召回越好但耗时近似平方增长。文档、票证等小字场景可适当调大车牌、标牌类大字场景保持默认即可。过滤低质量框detBoxThresh、recScoreThresh两个阈值调高可减少无效框进入识别间接省时间。下面是仓库run_benchmark.sh在一台 Android 9 设备5 行文本上的示例输出检测推理是绝对大头阶段平均耗时ms说明检测预处理33resize 与归一化检测推理311全链路主要瓶颈识别推理61按文本行处理行数越多越高完整链路420含后处理与调度开销三个可以直接上手的场景文档与票证登机牌、合同、发票这类排版规整的图片检测 识别即可拿到带坐标的结构化文本。仓库 Demo 里的示例登机牌图餐厅菜单外文菜单配合对应语言的识别字典使用识别结果可直接接翻译注意低光照环境下先做亮度增强再识别。车牌与标牌字符集小、字符大用 tiny 模型 默认分辨率即可满足实时性是端侧部署性价比最高的场景。常见问题排查模型加载与识别效果启动时报模型加载失败可能原因assets 下models/det/、models/rec/缺少inference.onnx调用PaddleOCR.create()前没有先执行OpenCVUtils.init(context)。处理思路对照上文第 2 步检查目录结构确认 OpenCV 初始化顺序确认 NDK/CMake 已安装且 Gradle 同步成功。识别准确率低或漏检可能原因拍照模糊、光线不足检测输入分辨率过小detBoxThresh过高把真实框过滤掉了。处理思路先用 Demo 的耗时/阈值界面单独验证是检测漏还是识别错再逐步提高输入长边、降低阈值对比效果。长时间运行内存持续增长可能原因每轮识别后未释放 Bitmap或反复create()后未调用release()。处理思路复用一个 SDK 实例处理多次识别在页面销毁时统一释放资源并用 Android Studio Profiler 确认无 Bitmap 堆积。端侧 OCR 的核心就三件事选对模型档位small/tiny、把检测输入分辨率调到精度和耗时的平衡点、按设备核数配好线程数。仓库的 Android Demo 已经把检测、方向分类、识别的完整链路封装成 SDK建议先跑通 Demo再按上面的清单按设备逐项调参最后在真实业务图片上验证准确率。【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100 languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表