拓冰建站拓冰建站
首页 / 资讯中心 / 正文

PaddleOCR移动端部署完整指南:4步走通端侧OCR最短路径

PaddleOCR移动端部署完整指南4步走通端侧OCR最短路径【免费下载链接】PaddleOCR飞桨多语言OCR工具包实用超轻量OCR系统支持80种语言识别提供数据标注与合成工具支持服务器、移动端、嵌入式及IoT设备端的训练与部署 Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80 languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)项目地址: https://gitcode.com/paddlepaddle/PaddleOCRPaddleOCR移动端部署没有想象中那么深。整个流程拆开看就是四件事选对轻量模型、用paddle_lite_opt把它转成nb格式、通过adb推到手机上跑端侧OCR推理、再根据识别效果把几个参数调顺。这篇文章按实操路径带你走一遍代码只保留跑通所必需的部分跟着敲就行。跑通之后你手里有什么按下面的步骤做完你会得到三样东西两个能在手机上直接被Paddle-Lite加载的.nb模型文件检测识别方向分类器可选一个在真机上跑通完整OCR流水线的可执行程序一套可以留作参考的config.txt参数之后换图换模型都不用重学移动端的模型选型围绕PP-OCRv5_mobile系列展开整套模型体积只有3.5M识别速度是毫秒级的。对绝大多数拍照取字、单据扫描类场景这个体积加进App包用户基本无感。模型选择挑一个不会撑爆APK的先立一条原则服务器端训练出来的大模型不要往手机上搬。PaddleOCR本身备好了不同档位的超轻量模型整套体积直接决定你的安装包大小模型系列整体体积推荐场景PP-OCRv5_mobile3.5M默认之选体积与精度平衡最好推理快PP-OCRv3slim5.9M3.5M精度不够用、但还想控制包体PP-OCRv316.2M精度优先、能接受更大体积的场景取模型时顺便留意版本来源release/2.0-rc1-0分支目前不支持移动端部署别从这里拿模型文件。模型转换一条命令生成nb格式文件手机端的Paddle-Lite只认naive_buffer序列化的.nb文件而训练产出的标准推理模型不是这种格式中间需要一次模型转换。工具是paddle_lite_opt先装它——注意版本必须和你之后要用的Paddle-Lite预测库对齐两边错开会在真机上连出一串难看的报错pip install paddlelite2.10然后分别对检测、识别模型各跑一次转换# 检测模型转换 paddle_lite_opt --model_file./ch_PP-OCRv3_det_slim_infer/inference.pdmodel \ --param_file./ch_PP-OCRv3_det_slim_infer/inference.pdiparams \ --optimize_out./ch_PP-OCRv3_det_slim_opt \ --valid_targetsarm --optimize_out_typenaive_buffer # 识别模型转换 paddle_lite_opt --model_file./ch_PP-OCRv3_rec_slim_infer/inference.pdmodel \ --param_file./ch_PP-OCRv3_rec_slim_infer/inference.pdiparams \ --optimize_out./ch_PP-OCRv3_rec_slim_opt \ --valid_targetsarm --optimize_out_typenaive_buffer五个参数分工很清楚前两个分别指向推理模型的网络结构与权重文件--optimize_out是输出路径--valid_targetsarm声明目标设备是ARM--optimize_out_typenaive_buffer指定移动端必须用的轻量序列化格式。命令跑完输出目录里多出的.nb文件就是能带去手机的模型了。真机OCR推理adb推上去就能跑把两个.nb模型、方向分类器模型、测试图片、字典文件中文用ppocr_keys_v1.txt和config.txt放进同一个目录——仓库deploy/lite示例的debug目录已经按这个结构摆好。可执行程序在Paddle-Lite的交叉编译环境里make编译一次即可Docker、Linux、macOS任选其一。然后推送到手机adb devices # 确认手机已被识别 adb push debug /data/local/tmp/ # 整个目录推到手机 adb shell # 进入手机shell进手机shell后先设置动态库搜索路径再执行完整流水线cd /data/local/tmp/debug export LD_LIBRARY_PATH${PWD}:$LD_LIBRARY_PATH ./ocr_db_crnn system ch_PP-OCRv3_det_slim_opt.nb \ ch_PP-OCRv3_rec_slim_opt.nb ch_ppocr_mobile_v2.0_cls_slim_opt.nb \ arm8 INT8 10 1 ./test.jpg config.txt ppocr_keys_v1.txt True尾部参数是位置式的system代表检测识别分类全流程接下来依次是三个模型文件、设备架构、精度、线程数、批大小、测试图片、配置文件、字典文件和一个可视化开关。把开头的system换成det或rec就能单独跑检测或识别调试单模块时很方便。一切顺利的话终端会逐行打印识别出的文字。下面是示例图片在手机上的实际识别效果参数调优第一次跑出效果之后看这里config.txt里的默认值只是通用不是最优。漏检、切边、乱码这类问题基本都出在下面五个参数没贴合你的场景参数建议取值作用max_side_len960限制输入图最长边防止手机端内存溢出det_db_box_thresh0.3文本框漏检时从默认0.5往下调能多召回框det_db_unclip_ratio2.0框太紧切掉字符边缘时从默认1.6调大放宽文本框范围框太松则反向降到1.2~1.5use_direction_classify1启用方向分类器旋转文本不再识别颠倒rec_image_height48识别模型输入高度PP-OCRv3必须是48PP-OCRv2是32不匹配会出乱码调整节奏建议一次只动一个参数推一次真机看一眼再动下一个。移动端图片普遍偏小max_side_len用默认值即可真正花时间的大概率是检测阈值这一对参数。故障排查新手最常碰到的4个现象真机运行提示算子不支持模型加载时报io_copy算子的kernel不被支持通常不是模型坏了而是转换工具和端侧预测库版本错位。把paddlelite和预测库都统一到2.10重新转一遍模型问题一般当场消失。识别结果乱码先查rec_image_height有没有跟模型代际对上见上表。再查字典编码Windows上的C demo按ANSI读字典文件UTF-8的ppocr_keys_v1.txt直接喂进去就是乱码在Linux或WSL里转一次编码即可iconv -f UTF-8 -t GBK ppocr_keys_v1.txt ppocr_keys_v1_ansi.txt换用转换后的字典重新推理。检测框太紧或太松这是unclip_ratio的事。低于1.6时框会贴着文字走、边缘被切高于2.5又会和相邻行粘连。经验区间是太紧往2.0~2.5调、太松往1.2~1.5调每次动0.2两三轮就能落点。只有第一次预测慢首帧要做资源初始化、权重加载慢是正常的第二帧起就恢复。工程上的处理是App启动时先打一发预热预测不占交互时间用户就感觉不到这个毛刺。性能进阶把速度再抠出来的3个手法线程数对齐CPU核心数前文命令里的10只是个示例。真实取值应等于手机CPU核心数少了吃不满算力多了上下文切换反而亏。在adb shell里用cat /proc/cpuinfo数一下processor行数即可。打开内存优化内存吃紧的设备可以在预测代码里打开Paddle-Lite的内存优化开关config.enable_memory_optim()它让中间张量复用显存空间峰值占用降一截OOM风险小很多。编译期裁剪预测库Paddle-Lite库里装了很多算子的kernel你的模型只用其中一小撮。编译时加一个开关就能把用不上的裁掉./lite/tools/build_android.sh --archarmv8 --with_cvON --with_extraON --enable_trimtrue--enable_trimtrue会让编译产物只保留当前模型用到的kernel.so体积随之明显变小配合前面的模型瘦身包体能再降一个台阶。小结从选模型、转格式、上真机到调参数PaddleOCR移动端部署就是本文这四步跑通一遍之后换模型、换图片都只是替换文件的事。想进一步把它封装进App或接入其他加速方案可以接着看官方移动端部署指南和FAQ。【免费下载链接】PaddleOCR飞桨多语言OCR工具包实用超轻量OCR系统支持80种语言识别提供数据标注与合成工具支持服务器、移动端、嵌入式及IoT设备端的训练与部署 Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80 languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)项目地址: https://gitcode.com/paddlepaddle/PaddleOCR创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门