• onnxruntime android版build & 使用


    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
    
    • 1

    解释一下参数:
    –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"
    
    • 1

    那么你的CMakeLists.txt和设置里需要include两个文件夹:onnxruntime/includeonnxruntime/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
    
    • 1

    但是这时MinSizeRel文件夹下并没有libonnxruntime.a文件,这个文件需要自己生成

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    然后

    ar -M < ./merge.mri 
    
    • 1
  • 相关阅读:
    4.10 x64dbg 反汇编功能的封装
    Pytorch detach()方法
    Java 中使用 Elasticsearch 进行 Boot 操作和 DSL 查询文档详解
    『Material Design』CollapsingToolbarLayout可折叠标题栏
    OS实战笔记(5)-- Cache和内存
    Java面试八股文宝典:初识数据结构-数组的应用扩展之HashTable
    vue 模板、组件
    微服务框架 SpringCloud微服务架构 20 RestClient 操作索引库 20.1 导入demo
    千兆以太网传输层 UDP 协议原理与 FPGA 实现
    多线程常见锁的策略
  • 原文地址:https://blog.csdn.net/level_code/article/details/127654653