onnx模型用在android平台上时,需要build onnxruntime for android
onnxruntime github
官方build for android文档
参考项目中有build好的libonnxruntime.so,
但是你可能需要自己编译,因为build的平台环境是不一样的。
你可以编译成静态库libonnxruntime.a 或者 动态库libonnxruntime.so
静态库可能有一个缺点就是里面会有method和其他库的method冲突,在项目build的时候就会check,然后报错。
然而动态库不会出现这种情况。
1.动态库编译:
./build.sh --android --android_sdk_path /home/user/Android/Sdk --android_ndk_path /home/user/Android/Sdk/ndk/21.4.XXXX --android_abi arm64-v8a --android_api 28 --use_nnapi --parallel --build_shared_lib --config MinSizeRel
解释一下参数:
–android表示build android版
android_sdk_path: 你的Sdk文件夹
android_ndk_path:Sdk下面的ndk文件夹(到版本文件夹下),但是具体要看你的项目用的是哪个版本
android_api:看你的项目是哪个版本,具体在哪里可以查看参考官方build for android文档
parallel: 并行编译
build_shared_lib: 使用就是编译动态库,不使用就是静态库
config: 有4种选项[“Debug”, “MinSizeRel”, “Release”, “RelWithDebInfo”],参考
build出来的.so文件会在onnxruntime/build/Android/MinSizeRel
里,
把它copy到项目放动态库的文件夹里,
修改相关设置,CMakeLists.txt.
同时把onnxruntime/include
整个文件夹放进项目里,
比如说需要用到
#include "onnxruntime/core/session/experimental_onnxruntime_cxx_api.h"
那么你的CMakeLists.txt和设置里需要include两个文件夹:onnxruntime/include
和 onnxruntime/include/onnxruntime/core/session
2. 静态库编译:
和动态库类似,只是不需要--build_shared_lib
./build.sh --android --android_sdk_path /home/user/Android/Sdk --android_ndk_path /home/user/Android/Sdk/ndk/21.4.XXXX --android_abi arm64-v8a --android_api 28 --use_nnapi --parallel --config MinSizeRel
但是这时MinSizeRel文件夹下并没有libonnxruntime.a文件,这个文件需要自己生成文章来源:https://www.toymoban.com/news/detail-451080.html
vi merge.mri
#以下是内容
#需要修改路径
create libonnxruntime.a
addlib /home/onnxruntime/build/Android/MinSizeRel/libonnxruntime_common.a
addlib /home/onnxruntime/build/Android/MinSizeRel/libonnxruntime_framework.a
addlib /home/onnxruntime/build/Android/MinSizeRel/libonnxruntime_graph.a
addlib /home/onnxruntime/build/Android/MinSizeRel/libonnxruntime_mlas.a
addlib /home/onnxruntime/build/Android/MinSizeRel/libonnxruntime_optimizer.a
addlib /home/onnxruntime/build/Android/MinSizeRel/libonnxruntime_providers.a
addlib /home/onnxruntime/build/Android/MinSizeRel/libonnxruntime_session.a
addlib /home/onnxruntime/build/Android/MinSizeRel/libonnxruntime_util.a
addlib /home/onnxruntime/build/Android/MinSizeRel/external/onnx/libonnx.a
addlib /home/onnxruntime/build/Android/MinSizeRel/lib/libgmock.a
addlib /home/onnxruntime/build/Android/MinSizeRel/external/onnx/libonnx_proto.a
addlib /home/onnxruntime/build/Android/MinSizeRel/lib/libgtest.a
addlib /home/onnxruntime/build/Android/MinSizeRel/external/nsync/libnsync_cpp.a
addlib /home/onnxruntime/build/Android/MinSizeRel/external/re2/libre2.a
addlib /home/onnxruntime/build/Android/MinSizeRel/external/protobuf/cmake/libprotobuf-lite.a
save
end
然后文章来源地址https://www.toymoban.com/news/detail-451080.html
ar -M < ./merge.mri
到了这里,关于onnxruntime android版build & 使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!