手机上使用onnxruntime推理踩坑记录

1. IOS

自己用源代码编译非常麻烦,在mocos很难编译成功。

使用pod方式安装。

 pod 'onnxruntime-c', '~> 1.14.0'#The ORT format model version [5] is not supported this build 1.11.0" 至少1.13.0

需要 

#define ORT_API_MANUAL_INIT

#include <onnxruntime_cxx_api.h>

#undef ORT_API_MANUAL_INIT

这样后需要主动调用一次

 Ort::InitApi();

不能直接

Ort::Env(OrtLoggingLevel::ORT_LOGGING_LEVEL_WARNING, "ONNX_DETECTION");

否则直接会crash或者memory问题。

2. 安卓方面

需要从onnx源代码的tools/android_custom_build开始编译

使用build_custom_android_package.py开始编译

需要在同目录的dockerfile修改第7行为

FROM --platform=linux/amd64 ubuntu:20.04

其实增加了--platform=linux/amd64。

然后把成功打包的aar文件命名为zip文件,解密有把.so文件放到你的JNI工程里,

在JNI工程里建立一个子目录增加一个Android.mk

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := onnxruntime
LOCAL_SRC_FILES := ./$(TARGET_ARCH_ABI)/libonnxruntime.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/headers
include $(PREBUILT_SHARED_LIBRARY)

这样编译好后,和自己的.so文件一起加入安卓工程。

System.loadLibrary("onnxruntime");
System.loadLibrary("yourlib");

另外一个问题,最近发现编译JNI的时候,在cpp文件里不加

#ifdef __cplusplus
extern "C" {
#endif

会导致方法在Java那边出现

Caused by: java.lang.UnsatisfiedLinkError: No implementation found for

所以尽可能的在cpp文件里也加上。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值