十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PaddleOCR 安卓部署教程:5 步在手机上跑通本地文字识别

PaddleOCR 安卓部署教程:5 步在手机上跑通本地文字识别 PaddleOCR 安卓部署教程5 步在手机上跑通本地文字识别【免费下载链接】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把登机牌拍下来一秒钟拿到航班号、座位号和票号并且全程离线、数据不出手机——这就是本文要做的事。我们用 PaddleOCR 项目里自带的 Android Demo 走一遍完整的 PaddleOCR 安卓部署流程从环境配置、导入工程到第一次识别成功再到按设备性能调参。跑完之后你会得到一台能本地完成检测 方向分类 识别三段式 OCR 的手机。准备工作PaddleOCR Android 开发环境一次备齐这一节解决的问题是在敲第一行构建命令之前把机器上需要的东西一次性补齐后面就不会被各种版本报错打断。组件版本要求说明Android Studio稳定版即可用来导入工程、安装 NDK 与 CMakeNDKr21 以上最新版或对齐 Paddle Lite 的版本编译 demo 的 C 推理代码CMake3.10.2app/build.gradle 里固定了这个版本SDK Manager 中装好后确认一下一台安卓手机Android 6.0API 23以上工程 minSdkVersion 是 23开启 USB 调试Paddle Lite 库 / 模型 / 字典v2.10 / ch_PP-OCRv2 lite / 中文字典不用手动下载构建脚本会自动拉取见下文第 3 步代码用 git clone 获取git clone https://gitcode.com/GitHub_Trending/pa/PaddleOCRDemo 位于仓库的 deploy/android_demo/ 目录。核心流程从导入工程到第一次识别成功前一步是后一步的前提没有代码就导入不了工程工程没配置好就构建不出 APKAPK 没构建出来手机上也装不了。按顺序做即可。第 1 步导入 PaddleOCR 安卓 Demo 工程用 Android Studio 选 File → New → Import Project定位到deploy/android_demo目录。这个目录本身就是完整的 Gradle 工程有自己的 settings.gradle 和 gradlew导入后 Android Studio 会识别出 app 模块。第 2 步装好 NDK 与 CMake让 CMake 能找到推理库SDK Manager 里安装 NDKSide by side和 CMake。这一步之所以关键是因为 CMakeLists.txt 依赖两个约定目录app/PaddleLitePaddle Lite 的头文件和 .so和app/OpenCVOpenCV 原生库。只要这两个目录在第 3 步被正确解压出来CMake 的find_package(OpenCV)和 Paddle Lite 的 include 路径都能自动命中不需要你改任何一行配置。第 3 步让 Gradle 自动下载依赖、模型和字典这是整个 PaddleOCR 安卓部署里最省事的一步build.gradle 定义了downloadAndExtractArchives任务并挂在preBuild之前构建时自动下载并解压四个归档Paddle Lite v2.10 推理库 →app/PaddleLiteOpenCV 4.2.0 安卓 SDK →app/OpenCVch_PP-OCRv2 检测/分类/识别 lite 模型 →app/src/main/assets/models中文识别字典 →app/src/main/assets/labels首次构建会明显变慢因为要联网下载网络不通时也可以手动把归档解压到对应目录再构建。第 4 步连接手机安装并启动 App手机开启 USB 调试连上电脑后点运行按钮手机上允许安装即可。启动后主页有四个按钮、一个模式下拉框和一个菜单按钮运行模型按当前选中的模式对当前显示图像执行推理拍照识别 / 选取图片获取输入图像获取后仍需点运行模型清空绘图清掉上一次画在图上的文本框下拉框选择 6 种运行模式默认检测 分类 识别菜单进入设置页改模型路径、内置测试图、线程数等第 5 步确认第一次识别成功读懂输出格式点运行模型后看 STATUS 区域显示run model succeeded即成功。每行结果的格式是序号: Det: (x1,y1)(x2,y2)(x3,y3)(x4,y4) Rec: 识别文本, 识别置信度 Cls: 分类类别, 分类置信度如果只用裁剪好的单行文字图可以切到识别单独模式只想知道图片方向是否颠倒就用分类模式——少跑一个模型就少一份耗电和耗时。第 6 步按设备性能微调运行参数设置页有四组参数改动模型运行态参数后回到主页会自动重新加载模型CPU Thread Num线程数四核设备设 4 是 demo 默认值CPU Power ModeLITE_POWER_HIGH走大核优先速度det long size检测模型预处理的长边上限默认 960Score Threshold检测框过滤阈值默认 0.1关键细节深挖一张图到一行文字之间发生了什么 这一节只讲两件事识别链路里每个模型各自负责什么以及为什么第一次运行明显比后面慢。理解了这两点后面调参和排错基本不会再迷路。整条链路是一条流水线前一级输出是后一级输入上图这种被旋转的图cls 模型会给出 0/90/180/270 的朝向保证后续 rec 拿到的是正向文字——所以检测 分类 识别的完整模式对随手拍的图最稳。关于第一次慢demo 把模型打包在 APK 的 assets 里Predictor.java 初始化时如果模型路径不是绝对路径会先把 assets 下的模型目录整体拷贝到 App 的 cache 目录再加载切换模型或重载时同样会再拷一遍。这就是首次运行和每次切换模式耗时偏高的原因属于机制使然而非异常。另外det long size决定预处理分辨率调大能救回小字但推理时间近似线性上涨中端机型建议从 960 开始试。避坑实录PaddleOCR 安卓部署 4 个高频报错⚠️ 只列实际最常撞上的 4 个按现象 → 原因 → 处理对照即可。现象原因处理构建阶段报 CMake 或 NDK 找不到SDK 没装 NDK/CMake或 CMake 版本与工程固定的 3.10.2 不符SDK Manager 安装 NDK 和 CMakeSettings → Languages Frameworks → CMake 里确认选到对应版本启动即崩溃日志出现UnsatisfiedLinkError或 dlopen 失败Paddle Lite 的 .so 缺失或手机 ABIarm64-v8a / armeabi-v7a与PaddleLite/libs下没有对应目录核对app/PaddleLite/libs下是否包含目标 ABI 的libpaddle_light_api_shared.so补齐后重新构建检测框漏字或误框多det long size过小丢小字或 Score Threshold 不合适小字多就调大 det long size如 1280漏框把阈值降到 0.05误框多就升到 0.3首次识别明显慢于后续模型从 assets 拷贝到 cache 目录 首次 warmup正常现象追求启动速度可把 Model Path 直接指向 cache 目录的绝对路径跳过拷贝效果与适用场景跑通之后这套本地 OCR 能稳定处理两类典型输入。第一类是证件票据像开头那张登机牌航班号、登机口、座位号、票号这些高对比度字段基本一次识别到位拿到的文本可以直接进你的行程记录或通讯录全程不经过云端隐私敏感场景医疗单据、合同尤其合适。第二类是户外小字场景这种复杂背景加小字号的图靠检测 分类 识别完整模式和稍大的 det long size 就能读出来。再往后的扩展路径也很直接换模型和字典就能切语言换自训模型就能做领域定制这些 demo 的设置页都留了口子。下一步一句话总结PaddleOCR 的安卓部署 一个 Gradle 工程 三段式本地推理流水线环境配好之后 5 步就能出结果。接下来建议先通读 deploy/android_demo/README.md 里 6 种运行模式的对照说明再翻 deploy/README.md 看看 iOS、C、Hub-serving 等其余部署方向把这套流程迁移到你自己的 App 里。【免费下载链接】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),仅供参考
返回列表