实战指南)
PaddleOCR 基于 Paddle-Lite 的 ARM 端 C 推理功能测试TIPC实战指南【免费下载链接】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 的 TIPCTest Infrastructure of Paddle Cloud测试体系中test_lite_arm_cpp.md所描述的是在 ARM 设备安卓手机上基于 Paddle-Lite 预测库对 OCR 模型进行 C 推理功能验证的完整流程。本指南以该文档为核心结合仓库内test_tipc/prepare_lite_cpp.sh、test_tipc/test_lite_arm_cpp.sh、test_tipc/common_func.sh等脚本与 deploy/lite 下的 C 预测源码完整讲解从测试矩阵、环境准备、预测库获取下载/编译两种方式、模型优化.nb格式转换、手机端联调到日志输出与结果判定成功/失败的每一步。读完本文你将能够在任意 ARM 安卓设备上独立复现 PaddleOCR 的 Lite C 推理功能测试并读懂每一行测试日志背后的含义。1. 功能测试概述Lite ARM C 预测功能测试的主程序为 test_tipc/test_lite_arm_cpp.sh其核心目标是在 ARM 设备上基于 Paddle-Lite 预测库验证 PaddleOCR 检测det、识别rec以及整条 system 流水线模型的 C 推理功能是否正常。整个测试由 PC 端完成数据/模型/预测库准备手机端完成实际推理执行最终将运行日志落盘到./output/目录供自动化校验。1.1 测试组合矩阵当前 Lite 端测试支持以下维度的组合字段说明模型类型包括正常模型FP32和量化模型INT8batch-size包括 1 和 4threads包括 1 和 4predictor 数量包括单 predictor 预测和多 predictor 预测预测库来源包括下载方式和编译方式测试硬件ARM_CPU / ARM_GPU_OPENCL模型类型batch-sizethreadspredictor 数量预测库来源测试硬件正常模型/量化模型11/4单/多下载方式/编译方式ARM_CPU/ARM_GPU_OPENCL从源码结构看test_lite_arm_cpp.sh中针对det、rec、system三种推理命令分别实现了func_test_det、func_test_rec、func_test_system三个测试函数det模式只加载一个检测 predictor单 predictorrec模式会同时加载识别与方向分类两个 predictor而system模式则同时加载检测、识别、方向分类三个 predictor多 predictor这正是表格中“单/多 predictor”维度在代码层面的体现。2. 测试流程运行环境配置请参考 TIPC 环境配置文档 完成 TIPC 的运行环境搭建。2.1 功能测试整个测试分为两个阶段PC 端准备阶段运行prepare_lite_cpp.sh脚本会在当前路径下生成test_lite.tar压缩包其中包含测试数据、测试模型和用于预测的可执行文件ocr_db_crnn手机端测试阶段将test_lite.tar上传到被测试的手机上在手机的终端解压该文件进入test_lite目录然后运行test_lite_arm_cpp.sh进行测试最终在test_lite/output目录下生成以lite_*.log为后缀的日志文件。2.1.1 基于 ARM_CPU 测试# 数据、模型、Paddle-Lite 预测库准备 # 预测库为下载方式 bash test_tipc/prepare_lite_cpp.sh ./test_tipc/configs/ch_PP-OCRv2_det/model_linux_gpu_normal_normal_lite_cpp_arm_cpu.txt download # 预测库为编译方式 bash test_tipc/prepare_lite_cpp.sh ./test_tipc/configs/ch_PP-OCRv2_det/model_linux_gpu_normal_normal_lite_cpp_arm_cpu.txt compile # 手机端测试: bash test_lite_arm_cpp.sh model_linux_gpu_normal_normal_lite_cpp_arm_cpu.txt2.1.2 基于 ARM_GPU_OPENCL 测试# 数据、模型、Paddle-Lite 预测库准备 # 预测库下载方式 bash test_tipc/prepare_lite_cpp.sh ./test_tipc/configs/ch_PP-OCRv2_det/model_linux_gpu_normal_normal_lite_cpp_arm_gpu_opencl.txt download # 预测库编译方式 bash test_tipc/prepare_lite_cpp.sh ./test_tipc/configs/ch_PP-OCRv2_det/model_linux_gpu_normal_normal_lite_cpp_arm_gpu_opencl.txt compile # 手机端测试: bash test_lite_arm_cpp.sh model_linux_gpu_normal_normal_lite_cpp_arm_gpu_opencl.txt注意由于运行该项目需要bash等命令传统的 adb 方式不能很好地安装。因此推荐通过在手机上开启虚拟终端的方式连接电脑连接方式可以参考 安卓手机 Termux 连接电脑教程。3. 准备阶段源码级拆解prepare_lite_cpp.shtest_tipc/prepare_lite_cpp.sh 是 PC 端准备脚本其执行逻辑可以划分为四个环节理解它有助于把握整条测试链路的数据流向。3.1 参数解析与设备分支脚本接收两个参数$1为测试配置文件路径$2为预测库来源download或compile。随后调用 test_tipc/common_func.sh 中的func_parser_value按行解析配置文件中的inference、DEVICE、det_lite_model_list、rec_lite_model_list、cls_lite_model_list等字段。设备分支决定后续下载/编译的目标与优化目标设备DEVICEvalid_targets预测库版本是否启用 OpenCLARM_CPUarminference_lite_lib.android.armv8.gcc.c_shared.with_extra.with_cvOFFARM_GPU_OPENCLopenclinference_lite_lib.armv8.clang.with_exception.with_extra.with_cv.openclON3.2 模型下载与 opt 优化脚本先pip install paddlelite2.10-rc安装模型优化工具然后按模型名从 PaddleOCR 模型仓库下载 inference 模型 tar 包例如ch_PP-OCRv2_det_infer、ch_PP-OCRv2_det_slim_quant_infer解压后使用paddle_lite_opt工具将inference.pdmodel/inference.pdiparams优化为.nb格式paddle_lite_opt --model_dir${model_dir} --model_file${model_file} --param_file${param_file} --valid_targets${valid_targets} --optimize_out${model_dir}_opt.nb是 Paddle-Lite 优化后的移动端模型格式包含了量化、子图融合、混合调度、Kernel 优选等优化策略。模型命名中带有slim的量化模型在测试脚本中会被判定为INT8精度否则判定为FP32。3.3 测试数据准备脚本从https://paddleocr.bj.bcebos.com/dygraph_v2.0/test/icdar2015_lite.tar下载 IC15 测试数据解压到./test_data目录其中文本检测图片位于icdar2015_lite/text_localization/ch4_test_images/与配置文件中的--image_dir字段对应。3.4 预测库获取与打包下载方式download直接wget对应设备分支的 Paddle-Lite 预编译预测库并解压编译方式compilegit clonePaddle-Lite 的release/v2.10分支执行./lite/tools/build_android.sh --archarmv8 --with_cvON --with_extraON --toolchainclang --with_opencl${compile_with_opencl}交叉编译预测库。随后脚本将.nb模型、test_data、字典 ppocr/utils/ppocr_keys_v1.txt、推理配置 deploy/lite/config.txt、Lite 端 C 源码deploy/lite 目录下的cls_process.cc、crnn_process.cc、db_post_process.cc、ocr_db_crnn.cc、Makefile等、动态库libpaddle_light_api_shared.so、测试脚本本身以及 AutoLog 日志组件统一组织到预测库的demo/cxx/ocr/目录下执行make -j编译出可执行文件ocr_db_crnn最终打包成test_lite.tar供上传手机。4. 测试配置文件解析ARM CPU 与 ARM GPU_OPENCL 两份测试配置分别位于test_tipc/configs/ch_PP-OCRv2_det/model_linux_gpu_normal_normal_lite_cpp_arm_cpu.txttest_tipc/configs/ch_PP-OCRv2_det/model_linux_gpu_normal_normal_lite_cpp_arm_gpu_opencl.txt两份配置仅runtime_device不同ARM_CPU/ARM_GPU_OPENCL其余字段一致格式如下lite_params inference:./ocr_db_crnn det runtime_device:ARM_CPU det_infer_model:ch_PP-OCRv2_det_infer|ch_PP-OCRv2_det_slim_quant_infer null:null null:null --cpu_threads:1|4 --det_batch_size:1 null:null --image_dir:./test_data/icdar2015_lite/text_localization/ch4_test_images/ --config_dir:./config.txt null:null --benchmark:True各字段含义与test_lite_arm_cpp.sh中的解析结果对应关系如下配置行解析变量行号含义inferenceinference_cmd第 1 行可执行文件及推理模式det/rec/system决定加载的 predictor 组合runtime_deviceruntime_device第 2 行运行硬件ARM_CPU或ARM_GPU_OPENCLdet_infer_modeldet_model_list第 3 行检测模型列表|分隔多个模型测试时依次取用并拼接_opt.nb--cpu_threadscpu_threads_list第 6 行线程数列表1|4表示分别以 1 线程和 4 线程各测一轮--det_batch_sizedet_batch_size_list第 7 行检测 batch-size此处固定为 1--image_dirinfer_img_dir_list第 9 行测试图片目录--config_dirconfig_dir第 10 行检测/识别超参配置文件即config.txt--benchmarkbenchmark_value第 12 行是否开启 benchmark 输出True 时打印 AutoLog 性能报告注意第 4、5、8、11 行为null:null分别对应rec/cls模型列表、rec_batch_size、rec_dict_dir在 det 模式下的占位。当配置的inference为rec或system时这些字段才会被实际使用。测试脚本中对精度的判定逻辑位于各func_test_*函数内当模型名包含slim时精度标记为INT8否则为FP32。日志文件名按lite_{模型}_runtime_device_{设备}_precision_{精度}_{det/rec}_batchsize_{batch}_threads_{线程}.log的规则拼接因此最终在./output/下会为“模型 × 线程数 × batch-size × 图片目录”的每种组合各生成一份日志。5. 手机端运行与结果判定将test_lite.tar上传并解压后在test_lite目录执行bash test_lite_arm_cpp.sh model_linux_gpu_normal_normal_lite_cpp_arm_cpu.txt脚本内部通过status_check定义在 test_tipc/common_func.sh根据每条推理命令的退出码$?判定运行成败并同步写入./output/results.log。5.1 运行结果各测试的运行情况会打印在./output/中运行成功时会输出Run successfully with command - ./ocr_db_crnn det ch_PP-OCRv2_det_infer_opt.nb ARM_CPU FP32 1 1 ./test_data/icdar2015_lite/text_localization/ch4_test_images/ ./config.txt True ./output/lite_ch_PP-OCRv2_det_infer_opt.nb_runtime_device_ARM_CPU_precision_FP32_batchsize_1_threads_1.log 21! Run successfully with command xxx ...运行失败时会输出Run failed with command - ./ocr_db_crnn det ch_PP-OCRv2_det_infer_opt.nb ARM_CPU FP32 1 1 ./test_data/icdar2015_lite/text_localization/ch4_test_images/ ./config.txt True ./output/lite_ch_PP-OCRv2_det_infer_opt.nb_runtime_device_ARM_CPU_precision_FP32_batchsize_1_threads_1.log 21! Run failed with command xxx ...在./output/文件夹下会存在如下日志每一个日志都是不同配置下的 log 结果在每一个 log 中都会调用 AutoLog 打印如下信息从命令行参数可以清晰看出可执行文件ocr_db_crnn的调用格式./ocr_db_crnn 模式 模型文件 运行硬件 精度 线程数 batchsize 图片目录 配置文件 [字典] 是否benchmark这与 deploy/lite/ocr_db_crnn.cc 中check_params、det、rec、system各函数对argv的解析完全对应。6. 手机端连接方式Termux由于测试需要在手机终端执行bash等命令传统 adb 方式受限文档推荐通过 Termux 建立 SSH 连接具体步骤详见 安卓手机 Termux 连接电脑教程。要点如下下载并adb installTermux APK安装proot并执行termux-chroot模拟标准 Linux 目录结构termux-setup-storage开放外部存储访问权限pkg i -y openssh安装并sshd启动 SSH 服务端默认端口 8022手机端ifconfig/whoami获取 IP 与用户名电脑端ssh 用户IP -p 8022连接通过scp -P 8022在电脑与手机之间传输test_lite.tar及结果文件。7. 推理超参与 C 执行链路7.1 config.txt 超参说明准备阶段打包进test_lite.tar的 deploy/lite/config.txt 是 C 端推理的关键配置由ocr_db_crnn.cc中的LoadConfigTxt逐行按“key value”格式读取split按空格切分后stod转数值配置项默认值含义max_side_len960输入图像长宽大于 960 时等比例缩放使最长边为 960det_db_thresh0.3DB 检测二值化阈值过滤低置信度像素det_db_box_thresh0.5检测框过滤阈值若存在漏框可酌情减小det_db_unclip_ratio1.6文本框紧致程度越小文本框越贴近文本det_db_use_dilate0是否对二值图做膨胀处理1 启用det_use_polygon_score1是否使用多边形面积评分use_direction_classify1是否启用方向分类器1 启用0 关闭rec_image_height48识别模型输入图像高度PP-OCRv3 为 48PP-OCRv2 需设为 327.2 C 推理调用链deploy/lite/ocr_db_crnn.cc 是整个测试可执行文件的主程序其执行链路为main→check_params校验模式与参数个数det 需 ≥9 个参数rec ≥9system ≥12并仅接受FP32/INT8两种精度loadModel使用MobileConfig设置模型文件与线程数CreatePaddlePredictorMobileConfig创建 predictorRunDetModel完成图像缩放DetResizeImg保证尺寸为 32 的倍数、NEON 均值方差归一化NeonMeanScale利用float32x4_t向量化加速、推理、DB 后处理BoxesFromBitmap、FilterTagDetRes并统计预处理/推理/后处理三段耗时RunRecModel对每个检测框做旋转裁剪GetRotateCropImage、可选的方向分类RunClsModel、CRNN 推理与 CTC 解码得到文本与置信度当命令行末位为True时构造AutoLogger输出含各阶段耗时与吞吐的性能报告这就是日志中 AutoLog 信息的来源。8. 更多教程本文档为功能测试用更详细的 Lite 端预测使用教程含预测库目录结构、模型优化参数说明、adb 联调、常见 FAQ请参考 Lite 端部署文档 与对应的英文文档 deploy/lite/readme.md。若需在 Android 上体验封装好的 OCR 应用可参考 deploy/android_demo若需在 iOS 端部署可参考 deploy/ios_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),仅供参考