• 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
  • 相关阅读:
    PHP即刻送达同城派送小程序系统
    【华为机试真题 JAVA】高矮个子排队-100
    Git常用命令
    什么软件可以把真人照片卡通化、动漫化?
    “深入理解C++类默认成员函数:探索构造、析构与复制“
    Games101-Chapter13-Ray Tracing 1
    阿里平头哥发布RISC-V高能效处理器玄铁C908,打造端云一体生态
    Hadoop Streaming使用简介
    Trino 387 JVM 配置详解
    【校招VIP】前端计算机网络之HTTP和HTTPS
  • 原文地址:https://blog.csdn.net/level_code/article/details/127654653