Paddle-Lite 端侧 C++ Demo 完全指南:基于 adb 的 Android 模型验证与部署流程
2026/9/17 20:35:09 网站建设 项目流程

Paddle-Lite 端侧 C++ Demo 完全指南:基于 adb 的 Android 模型验证与部署流程

【免费下载链接】Paddle-LitePaddlePaddle High Performance Deep Learning Inference Engine for Mobile and Edge (飞桨高性能深度学习端侧推理引擎)项目地址: https://gitcode.com/GitHub_Trending/pa/Paddle-Lite

本篇技术指南基于 Paddle-Lite 仓库 lite/demo/cxx/README.md 编写,完整讲解如何通过 shell 端(adb)在 Android 手机上编译、运行 Paddle-Lite 官方 C++ Demo,快速验证模型在端侧的正确性与性能。读完本文,你将掌握轻量级 API(Light API)与全量 API(Full API)两种预测方式的选型与调用、mobilenetv1 分类、SSD/YOLOv3 目标检测、人脸口罩检测、含 CV 预处理库单测共 6 类官方 Demo 的完整落地流程,并能结合仓库源码理解其底层实现原理,为后续在 Android App 中正式部署模型铺平道路。

1. 概述与前置准备

这些 C++ Demo 通过 shell 端(即电脑终端 + adb)在安卓手机上直接执行,核心目的是快速验证模型的正确性:在手机端跑通模型、确认输出符合预期之后,再在 Android App 中调用 Paddle-Lite 完成正式部署。这种"先命令行验证、后 App 集成"的方式可以极大缩短端侧调试周期,避免在 App 工程中反复折腾。

运行这些 Demo 需要准备两样东西:

  • 一台可以编译 Paddle-Lite 的电脑:具体环境配置可参考 docs/source_compile/compile_env.rst,推荐使用 Docker 环境,可避免本机依赖污染。
  • 一台 armv7 或 armv8 架构的安卓手机:安装好 adb,并确保电脑和手机可以通过 adb 正常连接(adb devices能看到设备)。

Paddle-Lite 预测库的获取有两种途径,任选其一:

  • 自行编译:参考 docs/source_compile/linux_x86_compile_android.rst 编译 Android 版本预测库;
  • 直接下载:从 Paddle-Lite release 界面下载已经编译好的 release 库文件包,并参考 docs/quick_start/release_lib.md 了解其目录结构与使用方式。

编译好的 release 包(如inference_lite_lib.android.armv8)内部包含demo/cxx目录,与仓库 lite/demo/cxx 下的结构一致,官方 Demo 源码、Makefile 均已内置,可直接进入对应目录编译。

下文涉及的 6 个 Demo 为:轻量 API 分类 Demo、全量 API 分类 Demo、物体分类 Demo、SSD 目标检测 Demo、YOLOv3 目标检测 Demo、人脸识别与口罩佩戴判断 Demo,以及含 CV 预处理库的模型单测 Demo。

2. 编译并运行轻量级 API(Light API)Demo

轻量级 API 是 Paddle-Lite 推荐的部署方式:先用 opt 工具把训练模型离线转换为 Paddle-Lite 专用格式(naive_buffer,.nb文件),再通过轻量 API 直接加载.nb文件进行预测。由于免去了运行时在线转换,加载与预测耗时均更优。

2.1 编译可执行文件

inference_lite_lib.android.armv8/demo/cxx/mobile_light目录下执行:

cd inference_lite_lib.android.armv8/demo/cxx/mobile_light make -j

编译产出可执行文件mobilenetv1_light_api。对应的源码位于 lite/demo/cxx/mobile_light/mobilenetv1_light_api.cc,其核心流程为:构造MobileConfigCreatePaddlePredictor<MobileConfig>(config)创建预测器 → 填充输入 →predictor->Run()→ 读取输出。测试代码中输入的是一张全 1 数据input_data[i] = 1.f),仅用于验证流程正确性,实际部署时请替换为真实预处理后的图像数据。

2.2 下载模型并使用 opt 转换

下载原始 Paddle 模型(mobilenet_v1 分类模型):

wget http://paddle-inference-dist.bj.bcebos.com/mobilenet_v1.tar.gz tar zxf mobilenet_v1.tar.gz

使用 opt 工具进行模型转换(具体用法参考 docs/user_guides/model_optimize_tool.md)。推荐从 Paddle-Lite release 界面下载 opt 工具,注意 opt 工具版本必须与预测库版本保持一致。假定转换后的模型为mobilenet_v1.nb

opt 工具同时也提供命令行二进制形式,转换命令可参考:

./opt --model_dir=mobilenet_v1 --optimize_out_type=naive_buffer --optimize_out=mobilenet_v1 # 优化后模型为 mobilenet_v1.nb

更多 opt 用法可查看仓库文档 docs/user_guides/opt/opt_bin.md 与 docs/user_guides/opt/opt_python.md。

2.3 通过 adb 推送并在手机端执行

adb push mobilenetv1_light_api /data/local/tmp/ adb push mobilenet_v1.nb /data/local/tmp/ adb push ../../../cxx/lib/libpaddle_light_api_shared.so /data/local/tmp/ adb shell chmod +x /data/local/tmp/mobilenetv1_light_api adb shell "export LD_LIBRARY_PATH=/data/local/tmp/:$LD_LIBRARY_PATH && /data/local/tmp/mobilenetv1_light_api /data/local/tmp/mobilenet_v1.nb"

说明:

  • 需要将动态库libpaddle_light_api_shared.so与可执行文件、模型一并 push 到手机,并通过LD_LIBRARY_PATH指定动态库搜索路径;
  • chmod +x赋予执行权限;
  • 如果是在 Docker 中编译,而 Docker 无法直连手机,可将测试所需文件和库拷贝到 Docker 外部再执行上述命令。

运行成功后,控制台会输出预测结果前 10 个类别的预测概率。

2.4 从源码看 Light API 的可调参数

从 mobilenetv1_light_api.cc 的main函数可以看出,该可执行文件支持最多 8 个命令行参数,依次为:

参数说明默认值
naive_buffer_model_dir.nb模型路径必填
raw_input_shapes输入 shape,如1,3,224,224;多输入用:分隔1,3,224,224
repeats重复推理次数10
warmup预热次数10
power_mode0:大核高性能;1:小核;2:全部核;3:不绑定0
thread_num线程数1
accelerate_opencl仅当模型可在 OpenCL 后端运行时生效,1 开启 OpenCL kernel 缓存与调优1
print_output1 表示将输出张量逐元素打印到 stdout0

源码还展示了 OpenCL 后端相关的进阶配置:IsOpenCLBackendValid检查 GPU 后端是否可用,set_opencl_binary_path_name指定 kernel 二进制缓存路径,set_opencl_tune(CL_TUNE_NORMAL, ...)选择调优级别,set_opencl_precision(CL_PRECISION_FP16)指定 FP16 精度。若 OpenCL 不可用,程序会输出*** nb model will be running on cpu. ***提示并回退到 CPU 执行。完整 OpenCL 部署可参考 docs/demo_guides/opencl.md。

3. 编译并运行全量 API(Full API)Demo

全量 API(CxxConfig+CreatePaddlePredictor<CxxConfig>)支持在线对原始模型进行转换:直接加载 Paddle 原始模型(__model__/__params__或合并格式),在运行时完成优化后再预测。由于在线转换耗时较久,Paddle-Lite 推荐首选 opt 工具离线转换 + 轻量 API 部署的组合。全量 API 更多用于调试或需要动态改变模型结构的场景。

注:当编译模式为tiny_publish时,release 包中将不包含该 Demo,需使用full_publish编译模式才会产出。

3.1 编译与运行

cd inference_lite_lib.android.armv8/demo/cxx/mobile_full wget http://paddle-inference-dist.bj.bcebos.com/mobilenet_v1.tar.gz tar zxvf mobilenet_v1.tar.gz make adb push mobilenet_v1 /data/local/tmp/ adb push mobilenetv1_full_api /data/local/tmp/ adb push ../../../cxx/lib/libpaddle_full_api_shared.so /data/local/tmp/ adb shell chmod +x /data/local/tmp/mobilenetv1_full_api adb shell "export LD_LIBRARY_PATH=/data/local/tmp/:$LD_LIBRARY_PATH && /data/local/tmp/mobilenetv1_full_api --model_dir=/data/local/tmp/mobilenet_v1 --optimized_model_dir=/data/local/tmp/mobilenet_v1.opt"

运行成功后在控制台输出预测结果前 10 个类别的预测概率。同样地,测试文件中输入数据为全 1,实际部署请替换为真实数据;Docker 编译无法连手机时,将所需文件和库拷贝到 Docker 外部再测试。

3.2 从源码看 Full API 的命令行参数

对应源码 lite/demo/cxx/mobile_full/mobilenetv1_full_api.cc 基于 gflags 解析参数:

参数类型说明
--model_dirstring未合并(uncombined)格式的模型目录路径
--model_file/--param_filestring合并(combined)格式的模型文件与参数文件
--optimized_model_dirstring优化后模型的输出目录
--prefer_int8_kernelbool是否优先使用 int8 kernel(默认 false)
--power_modeint320:POWER_HIGH;1:POWER_LOW;2:POWER_FULL;3:NO_BIND(默认 3)
--threadsint32线程数(默认 1)
--warmupint32预热次数(默认 10)
--repeatsint32重复次数(默认 100)
--use_gpubool是否使用 OpenCL 后端(默认 false)

源码中的关键点:

  • 通过config.set_valid_places(valid_places)声明候选执行后端列表,开启 GPU 时会依次放入多组 OpenCLPlace(含TARGET(kOpenCL)、FP16/FP32 精度、kImageDefault/kImageFolder/kNCHW数据布局),否则仅放入TARGET(kARM)
  • predictor->SaveOptimizedModel(FLAGS_optimized_model_dir, LiteModelType::kNaiveBuffer)在线把优化后的模型保存为.nb文件——这正是 Full API 相比 Light API 的差异点:它把 opt 的转换能力内置到了运行时。源码注释特别警告:SaveOptimizedModel必须在Run()之前调用,因为部分 kernel 的PrepareForRun可能修改参数值。

4. 编译并运行物体分类 Demo(mobile_classify)

与前两个 Demo 不同,物体分类 Demo 是面向真实图像的:它会用 OpenCV 读取图片、做完整预处理,并输出带类别名的 Top-K 结果,最贴近实际业务场景。

4.1 编译

cd inference_lite_lib.android.armv8/demo/cxx/mobile_classify make

编译产出mobile_classify可执行文件。

4.2 下载模型与测试数据

wget http://paddle-inference-dist.bj.bcebos.com/mobilenet_v1.tar.gz tar zxf mobilenet_v1.tar.gz wget https://paddle-inference-dist.cdn.bcebos.com/PaddleLite/cxx_demo/test_data.tgz tar zxf test_data.tgz

test_data.tgz内含测试图片test.jpg与类别标签文件label.txt

4.3 模型转换

./opt --model_dir=mobilenet_v1 --optimize_out_type=naive_buffer --optimize_out=mobilenet_v1 # 优化后模型为 mobilenet_v1.nb

--optimize_out_type=naive_buffer即产出轻量 API 所需的.nb格式。

4.4 推送并执行

adb push ../../../cxx/lib/libpaddle_light_api_shared.so /data/local/tmp/ adb push mobile_classify /data/local/tmp/ adb shell chmod +x /data/local/tmp/mobile_classify adb push test_data /data/local/tmp/ adb push mobilenet_v1.nb /data/local/tmp/ adb shell "export LD_LIBRARY_PATH=/data/local/tmp/:$LD_LIBRARY_PATH && /data/local/tmp/mobile_classify /data/local/tmp/mobilenet_v1.nb /data/local/tmp/test_data/test.jpg /data/local/tmp/test_data/label.txt"

运行成功后输出预测结果前 5 个类别的概率。

4.5 可选参数:topk 与输入尺寸

  • 查看前 10 个类别:在命令末尾追加topk值即可:

    adb shell "export LD_LIBRARY_PATH=/data/local/tmp/:$LD_LIBRARY_PATH && /data/local/tmp/mobile_classify /data/local/tmp/mobilenet_v1.nb /data/local/tmp/test_data/test.jpg /data/local/tmp/test_data/label.txt 10"
  • 切换其他模型并指定输入尺寸:追加model_dir及其模型输入大小,格式为topk 宽 高

    adb shell "export LD_LIBRARY_PATH=/data/local/tmp/:$LD_LIBRARY_PATH && /data/local/tmp/mobile_classify /data/local/tmp/mobilenet_v1.nb /data/local/tmp/test_data/test.jpg /data/local/tmp/test_data/label.txt 10 224 224"

4.6 从源码看图像预处理链路

对应源码 lite/demo/cxx/mobile_classify/mobile_classify.cc 展示了完整的"图像 → 张量"预处理流程,这部分是端侧视觉类应用的通用范式:

  1. cv::cvtColor将 BGR 图转为 RGB;
  2. cv::resize缩放到模型输入尺寸;
  3. convertTo(CV_32FC3, 1/255.f)归一化到[0,1]
  4. 调用neon_mean_scale完成减均值、除方差,并通过 NEON 内联汇编(float32x4_tvld3q_f32vst1q_f32等)将 NHWC 布局转换为 NCHW 布局,同时做 4 路向量化加速。默认均值means = {0.485f, 0.456f, 0.406f}、方差scales = {0.229f, 0.224f, 0.225f}(ImageNet 统计值);
  5. print_topk使用std::partial_sort计算 Top-K,并配合label.txt输出类别名与置信度。

该 Demo 同时展示了MobileConfig的最小用法:set_model_from_file指定.nb模型 →CreatePaddlePredictor<MobileConfig>GetInput(0)/Resize/mutable_data<float>Run()GetOutput(0)

5. 编译并运行 SSD 目标检测 Demo

SSD Demo 将检测框、类别、置信度直接绘制到测试图片上并保存结果图,可直观验证检测模型的正确性。

cd inference_lite_lib.android.armv8/demo/cxx/ssd_detection make -j adb push ../../../cxx/lib/libpaddle_light_api_shared.so /data/local/tmp/ adb push ssd_detection /data/local/tmp/ adb shell chmod +x /data/local/tmp/ssd_detection wget https://paddle-inference-dist.bj.bcebos.com/mobilenetv1-ssd.tar.gz tar zxvf mobilenetv1-ssd.tar.gz adb push mobilenetv1-ssd /data/local/tmp adb push test.jpg /data/local/tmp/ # 请自己准备ssd模型的测试图片 adb shell "export LD_LIBRARY_PATH=/data/local/tmp/:$LD_LIBRARY_PATH && /data/local/tmp/ssd_detection /data/local/tmp/mobilenetv1-ssd /data/local/tmp/test.jpg" adb pull /data/local/tmp/test_ssd_detection_result.jpg ./

运行成功后,ssd_detection目录下会生成目标检测结果图像test_ssd_detection_result.jpg

从源码看检测输出后处理

对应源码 lite/demo/cxx/ssd_detection/ssd_detection.cc 展示了端侧目标检测的标准后处理:

  • SSD 模型的输出按每 6 个 float 为一组data += 6)组织,依次为:class_id(类别索引)、prob(置信度)、以及归一化后的x, y, w, hdata[2]..data[5],需乘以原图宽高还原为像素坐标);
  • 阈值0.6f用于过滤低置信度框,detect_object中还会用cv::Rect(0,0,cols,rows)对检测框做越界裁剪;
  • 内置 VOC 20 类 + background 共 21 个类别名(class_names[]);
  • 使用cv::rectanglecv::putText将结果绘制到图上,最终cv::imwrite保存为<图片名>_ssd_detection_result.jpg

预处理方面该 Demo 使用均值/方差{0.5f, 0.5f, 0.5f},输入尺寸固定为300×300,同样基于 NEON 完成 NHWC→NCHW 转换。

6. 编译并运行 YOLOv3 目标检测 Demo

YOLOv3 Demo 与 SSD Demo 流程一致,仅模型与后处理不同:

cd inference_lite_lib.android.armv8/demo/cxx/yolov3_detection make -j adb push ../../../cxx/lib/libpaddle_light_api_shared.so /data/local/tmp/ adb push yolov3_detection /data/local/tmp/ adb shell chmod +x /data/local/tmp/yolov3_detection wget https://paddle-inference-dist.bj.bcebos.com/mobilenetv1-yolov3.tar.gz tar zxvf mobilenetv1-yolov3.tar.gz adb push mobilenetv1-yolov3 /data/local/tmp adb push test.jpg /data/local/tmp/ # 请自己准备yolov3模型的测试图片 adb shell "export LD_LIBRARY_PATH=/data/local/tmp/:$LD_LIBRARY_PATH && /data/local/tmp/yolov3_detection /data/local/tmp/mobilenetv1-yolov3 /data/local/tmp/test.jpg" adb pull /data/local/tmp/test_yolov3_detection_result.jpg ./

运行成功后,yolov3_detection目录下会生成目标检测结果图像test_yolov3_detection_result.jpg

从源码 lite/demo/cxx/yolov3_detection/yolov3_detection.cc 可以看到,其内置了 COCO 80 类类别名(person、bicycle、car、dog…),后处理同样按固定步长解析输出并进行阈值过滤与坐标还原,最后将结果绘制并保存。

7. 人脸识别与佩戴口罩判断 Demo(mask_detection)

该 Demo 串联了人脸检测 + 口罩佩戴判断两个模型:先用pyramidbox_lite人脸检测模型定位人脸,再用人脸区域作为输入交给mask_detector口罩判断模型分类。官方已提供两种使用方式:直接下载编译好的 Demo 包,或从源码编译。

7.1 方式一:下载编译好的 Demo 包直接执行

下载压缩包mask_demo_v2.6.tgz(Paddle-Lite 2.6 版本,内含编译好的可执行文件、模型文件、测试图片、Paddle-Lite 2.6 版本动态库),解压到本地。官方声明该 Demo 已在 Paddle-Lite 2.6 和 2.8 版本上验证可准确执行。

电脑连接安卓手机后,在电脑 shell 端进入mask_demo目录,执行:

sh run.sh

脚本会自动完成:push 文件到手机端 → 执行口罩检测 → pull 结果图片。执行后在电脑端查看test_img_result.jpg即为口罩检测结果。

7.2 方式二:从源码编译 Demo 并执行

第一步:准备编译环境。参考 docs/source_compile/compile_env.rst。

第二步:拉取 Paddle-Lite 代码并切换到 2.6 版本分支

git clone https://github.com/PaddlePaddle/Paddle-Lite.git cd Paddle-Lite git fetch origin release/v2.6:release/v2.6 git checkout release/v2.6

第三步:编译预测库。进入 Paddle-Lite 根目录,执行(详细编译方法参考 docs/source_compile/linux_x86_compile_android.rst):

./lite/tools/build.sh \ --arm_os=android \ --arm_abi=armv8 \ --arm_lang=gcc \ --android_stl=c++_static \ --build_extra=ON \ --with_log=ON \ full_publish

第四步:编译 Demo 可执行文件。进入 Demo 编译目录执行脚本,脚本会编译可执行文件,并将可执行文件、预测库、模型、图片统一收集到mask_demo目录:

cd build.lite.android.armv8.gcc/inference_lite_lib.android.armv8/demo/cxx/mask_detection sh prepare.sh

仓库中对应脚本为 lite/demo/cxx/mask_detection/prepare.sh,其工作内容一目了然:设置NDK_ROOT环境变量 →make -j编译 → 创建mask_demo目录并拷贝run.shmask_detection可执行文件、libpaddle_light_api_shared.so→ 自动下载mask_models_img.tar.gz及两个模型的.nb文件(pyramidbox_lite_fp32_for_cpu_v2_10_rc.tar.gzmask_detector_fp32_128_128_for_cpu_v2_10_rc.tar.gz)并重命名。

第五步:运行。手机连接电脑后进入mask_demo目录执行sh run.sh,查看生成的test_img_result.jpg。lite/demo/cxx/mask_detection/run.sh 的核心命令为:

adb push ../mask_demo /data/local/tmp/ adb shell "cd /data/local/tmp/mask_demo && export LD_LIBRARY_PATH=...:${LD_LIBRARY_PATH} && \ ./mask_detection pyramidbox_lite_v2_10_rc_opt2.nb mask_detector_v2_10_rc_opt2.nb mask_models_img/test_img.jpg" adb pull /data/local/tmp/mask_demo/test_img_result.jpg .

7.3 使用 PaddleHub 模型替换

除了官方模型,也可以通过 PaddleHub 下载人脸检测与口罩佩戴判断模型,再经 opt 转换后替换mask_demo目录下的模型文件:

import paddlehub as hub pyramidbox_lite_mobile_mask = hub.Module(name="pyramidbox_lite_mobile_mask") pyramidbox_lite_mobile_mask.processor.save_inference_model(dirname="test_program")

上述代码会将模型保存在test_program目录:人脸检测与口罩佩戴判断模型分别存储在pyramidbox_litemask_detector子目录中,其中的__model__是模型结构文件、__param__是权重文件。从 PaddleHub 下载的是预测模型,需使用 Paddle-Lite 的 opt 工具转换为.nb格式后再替换。

7.4 关键超参数:shrink 与 detect_threshold

源码 lite/demo/cxx/mask_detection/mask_detection.cc 中暴露了两个可自由配置的常量,位于人脸检测与口罩判断的推理循环里:

  • 缩放因子shrink(默认 0.4):用于把输入图片按比例缩小后再送入人脸检测模型(s_width = width * shrink)。缩放因子越大,模型运行速度越慢,检测准确率越高;反之速度更快但可能漏检小脸。
  • 检测阈值detect_threshold(默认 0.7):人脸框置信度阈值(if (outptr[1] >= detect_threshold))。阈值越高,人脸筛选越严格,检测出的人脸框可能越少;调低可召回更多人脸,但可能引入误检。

实际调优时应根据目标设备算力与场景(如人流密度、口罩合规率)在精度与速度之间权衡。

8. 编译含 CV 预处理库的模型单测 Demo(test_cv)

test_cvDemo 用于验证Paddle-Lite CV 图像预处理库(图像缩放、颜色转换、旋转等)与模型的联合推理,其独立说明见 lite/demo/cxx/test_cv/README.md。

cd ../test_cv wget http://paddle-inference-dist.bj.bcebos.com/mobilenet_v1.tar.gz tar zxvf mobilenet_v1.tar.gz ./model_optimize_tool optimize model make adb push test_model_cv /data/local/tmp/ adb push test.jpg /data/local/tmp/ adb push labels.txt /data/local/tmp/ adb push ../../../cxx/lib/libpaddle_full_api_shared.so /data/local/tmp/ adb shell chmod +x /data/local/tmp/test_model_cv adb shell "export LD_LIBRARY_PATH=/data/local/tmp/:$LD_LIBRARY_PATH && /data/local/tmp/test_model_cv /data/local/tmp/mobilenetv1opt2 /data/local/tmp/test.jpg /data/local/tmp/labels.txt"

注意此处使用libpaddle_full_api_shared.so全量库,且模型需经本地工具转换为mobilenetv1opt2目录格式。运行成功后在控制台输出预测结果前 10 个类别的预测概率。该目录下的源码 lite/demo/cxx/test_cv/test_model_cv.cc 与 lite/demo/cxx/test_cv/test_img_prepross.cc 演示了 CV 库预处理与 Full API 推理的组合调用方式,可作为"带图像预处理的完整推理流水线"参考模板。

9. 通用编译机制:Makefile 体系说明

上述所有 Android Demo 共用的编译基础设施在 lite/demo/cxx/Makefile.def 与 lite/demo/cxx/makefiles 目录中:

  • 每个 Demo 均提供Makefile.android.armv7Makefile.android.armv8两份 Makefile(如 makefiles/mobile_light/Makefile.android.armv8),通过ARM_ABI = arm8arm7切换目标架构;
  • Makefile.def会根据NDK_ROOT环境变量自动探测 NDK 版本(grep -Eo "android-ndk-r[0-9]{2}"),并据此选择编译器:NDK r18 及以下使用aarch64-linux-android-g++/arm-linux-androideabi-g++(gcc 工具链),r19+ 使用 clang(aarch64-linux-android21-clang++/armv7a-linux-androideabi16-clang++);
  • 链接选项默认使用共享库-lpaddle_light_api_shared,Makefile 注释中同时说明了如何切换到静态库libpaddle_api_light_bundled.a(需在源码中放开paddle_use_ops.h/paddle_use_kernels.h的 include,以避免unsupport ops or kernels链接错误);
  • armv7 编译默认开启-mfpu=neon -mfloat-abi=softfp,所有目标默认-fopenmp多线程、-fPIE(Android 要求 PIE 可执行文件)。

10. 小结:从 Demo 验证到 App 部署

结合 lite/demo/cxx/README.md 与上述源码分析,可以总结出一条清晰的端侧部署路径:

  1. 准备环境:搭建可编译 Paddle-Lite 的环境(推荐 Docker),准备 armv7/armv8 安卓手机并通过 adb 连接;
  2. 获取预测库:自行编译(docs/source_compile/linux_x86_compile_android.rst)或直接下载 release 包;
  3. 转换模型:使用与预测库同版本的 opt 工具,将原始 Paddle 模型转换为.nb格式(docs/user_guides/model_optimize_tool.md);
  4. 验证正确性:编译并运行上述任一 C++ Demo,在 shell 端确认预测结果(Top-K 概率、检测框、口罩结果等)符合预期;
  5. App 集成:验证通过后,将 Light API 调用逻辑迁移到 Android App 中,正式部署。

对于有更复杂交互诉求(如图像实时采集、OpenGL 渲染)的移动端场景,可进一步参考仓库的 docs/demo_guides/android_app_demo.md 与 docs/demo_guides/arm_cpu.md,这些文档展示了 Android App 级别的集成方案,与本文的 shell 端验证 Demo 形成互补。总体而言,lite/demo/cxx 目录下的这 6 类 Demo 覆盖了分类、检测、人脸/口罩识别等最常见端侧任务,是学习 Paddle-Lite 双 API 用法、验证模型正确性、快速原型验证的"第一手教材"。

【免费下载链接】Paddle-LitePaddlePaddle High Performance Deep Learning Inference Engine for Mobile and Edge (飞桨高性能深度学习端侧推理引擎)项目地址: https://gitcode.com/GitHub_Trending/pa/Paddle-Lite

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询