You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android Studio中添加ONNX模型作为资源文件并加载

解决Android中添加ONNX模型文件并加载的问题

一、能否添加ONNX这类二进制文件?

当然可以。Android支持将ONNX这类二进制/文本文件作为应用资源存放,推荐使用assets目录,它专门用于存放不需要系统自动生成资源ID的自定义文件(比如模型、配置文件等)。

二、详细操作步骤

步骤1:创建assets目录(如果没有)

  1. 打开Android Studio,在项目视图中找到src/main目录
  2. 右键点击main → 选择New → Folder → Assets Folder
  3. 在弹出窗口中确认Target Source Set为main,点击Finish完成创建,最终目录结构为src/main/assets

步骤2:复制ONNX模型到assets目录

将你下载的Mobilenet ONNX文件直接拖拽到assets文件夹中,等待Android Studio完成文件同步(右下角会有同步提示)。

注意:文件名要记清楚,后续代码中要完全匹配(大小写敏感),比如你的模型文件名为mobilenet.onnx,代码中就要用这个名字。

步骤3:修改代码加载模型

由于assets目录下的文件无法直接通过文件路径访问(打包在APK内),需要先将模型文件复制到应用的内部存储目录(无需额外权限),再加载。

3.1 添加文件复制方法

在你的Activity或工具类中添加以下方法,用于将assets中的模型复制到内部存储:

private String copyAssetToInternalStorage(Context context, String assetFileName) {
    // 内部存储的目标文件路径
    File targetFile = new File(context.getFilesDir(), assetFileName);
    
    // 如果文件已存在且大小正常,直接返回路径
    if (targetFile.exists() && targetFile.length() > 0) {
        return targetFile.getAbsolutePath();
    }

    // 复制文件
    try (InputStream inputStream = context.getAssets().open(assetFileName);
         OutputStream outputStream = new FileOutputStream(targetFile)) {
        
        byte[] buffer = new byte[1024];
        int bytesRead;
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, bytesRead);
        }
        return targetFile.getAbsolutePath();
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}

3.2 修改模型加载代码

替换原来的Net dnnNet = Dnn.readNetFromONNX(MODEL_PATH);代码,改为:

// 调用复制方法获取模型的本地路径
String modelLocalPath = copyAssetToInternalStorage(this, "mobilenet.onnx");
if (modelLocalPath != null) {
    // 加载模型
    Net dnnNet = Dnn.readNetFromONNX(modelLocalPath);
    // 后续的分类逻辑(比如图像预处理、推理等)
} else {
    // 处理文件复制失败的情况,比如提示用户
    Toast.makeText(this, "模型文件加载失败", Toast.LENGTH_SHORT).show();
}

三、常见问题排查

  • 如果文件复制失败:检查assets目录下的文件名是否和代码中的一致,或者尝试Build → Rebuild Project重新打包项目
  • 如果加载时仍崩溃:确保OpenCV的DNN模块已正确集成到Android项目中,检查依赖是否完整

内容的提问来源于stack exchange,提问作者Mich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 06:12:17