【鸿蒙之路】在鸿蒙上使用onnx推理
摘要 本文记录了将ONNX Runtime移植到鸿蒙系统的完整过程。作者详细介绍了准备工作,包括下载鸿蒙辅助编译库和SDK,并重点讲解了如何修改编译配置文件HPKBUILD以适应不同架构和版本需求。文章提供了环境变量配置建议,并分享了编译命令及参数调整技巧。最后,作者说明了如何将编译生成的动态库集成到鸿蒙项目中,包括文件复制路径和CMakeLists.txt的修改要点。整个过程既是对鸿蒙AI开发的
前言
最近我一直在折腾鸿蒙(HarmonyOS)开发,总想着能不能让它也“AI”起来。ONNX(Open Neural Network Exchange)作为模型部署的“万金油”,我自然想把它搬到鸿蒙上试试。
然而,理想很丰满,现实……你懂的。一番搜索下来,发现并没有现成的库可以直接用。没办法,只能撸起袖子自己动手——编译源码。
这个过程嘛,坑不多也不少,刚好够我喝一壶的。
所以,我决定把这次“填坑”之旅详细记录下来。这篇博客,与其说是教程,不如说是我个人的探索笔记。我将主要聚焦在两个最关键的步骤:
环境准备: 唠唠如何搭建鸿蒙的开发环境,特别是那个让人又爱又恨的 NDK 环境配置。
编译实录: 分享我是如何使用鸿蒙的工具链,一步步把 ONNX Runtime 的源码编译成鸿蒙能用的动态库(.so 文件)。
写下这篇,一是给自己做个备忘,免得下次再踩同样的坑;二也是希望能抛砖引玉,和同样在鸿蒙AI道路上探索的朋友们交流一下。如果我的这点经验能帮到你,那这趟折腾就值了!
好了,让我们开始吧。
一、准备工作
在编译之前还有一些准备工作:
- 下载 鸿蒙辅助编译库
git clone https://gitee.com/zhong-luping/tpc_c_cplusplus.gitgit checkout -b fix_other origin/fix_other - 下载 鸿蒙SDK 文章中使用的是linux的SDK
二、使用鸿蒙交叉编译工具链编译
1.编译前的准备
- 修改tpc_c_cplusplus项目下的thirdparty/onnxruntime/HPKBUILD文件
- 将pkgver修改为需要的onnx版本 如v1.22.2
- 修改架构archs 如arm64-v8a
- source中的版本需要和pkgver保持一致
- 如果是手动下载的,需要把downloadpackage设置为false
- 设置命令行环境变量
- 配置SDK路径
export OHOS_SDK=鸿蒙SDK路径/sdk/default/openharmony - 配置cmake路径
export PATH=鸿蒙SDK路径/sdk/default/openharmony/native/build-tools/cmake/bin:$PATH
- 配置SDK路径
- 如果内存小于64G推荐把tpc_c_cplusplus项目下的lycium/build.sh中的export MAKE=“make -j32” 和 export Ninja=“ninja -j32” 修改为 -j8
2.编译
cd lycium
./build.sh onnxruntime
脚本后面的参数为对应的第三方库名
三、使用
编译完成后会在lycium目录下生成一个usr文件夹,这里是默认的安装路径,可以在这里找到include和lib文件夹,库就在lib文件夹下面。
- 复制动态库到 项目根目录/项目主目录/libs/arm64-v8a 文件夹下
- 在 项目根目录/项目主目录/src/main/cpp 文件夹下创建一个 onnxruntime 文件夹,把onnxruntime头文件复制到这里
- 修改 cpp 文件夹下的 CMakeLists.txt
target_include_directories(项目名 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/onnxruntime/include)target_link_libraries(项目名 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libonnxruntime.so.1)
参考文档
更多推荐



所有评论(0)