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

Unity中正常的TensorFlow Lite模型导出APK后Android端预测失效求助

解决Unity导出APK后TensorFlow Lite模型失效的问题

一、先排查核心基础问题

  • 模型文件的打包与加载逻辑
    编辑器中模型可直接通过Resources加载,但Android打包时需确保文件未损坏或路径错误:

    • 将.tflite模型放在StreamingAssets文件夹,加载时用UnityWebRequest读取字节流(Android无法直接通过File.Open访问该目录):
      using (var webRequest = UnityWebRequest.Get(Path.Combine(Application.streamingAssetsPath, "your_model.tflite")))
      {
          webRequest.SendWebRequest();
          while (!webRequest.isDone) { }
          var modelBytes = webRequest.downloadHandler.data;
          interpreter = new Interpreter(modelBytes);
      }
      
    • 避免将模型放入Resources打包成AssetBundle,压缩可能导致模型文件损坏。
  • Android权限配置
    如果模型需要读取设备本地图片,需确保APK获取对应权限:

    • 在Unity Player Settings > Android > Publishing Settings > Permissions 勾选READ_EXTERNAL_STORAGE(Android 10及以下)或MANAGE_EXTERNAL_STORAGE(Android 11+);
    • 也可在代码中动态申请权限:
      if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageRead))
      {
          Permission.RequestUserPermission(Permission.ExternalStorageRead);
      }
      

二、TensorFlow Lite的Android适配调整

  • CPU架构匹配
    Unity打包Android时,需确保目标架构与TensorFlow Lite库兼容:

    • 切换脚本后端为IL2CPP(Player Settings > Android > Other Settings > Configuration > Scripting Backend);
    • 在Target Architectures中勾选ARM64和ARMv7,覆盖绝大多数Android设备架构,避免因缺失对应.so文件导致模型加载失败。
  • 推理线程优化
    Android主线程禁止执行耗时操作,模型推理需放在后台线程,完成后回到主线程更新UI:

    StartCoroutine(RunInferenceInBackground(inputTexture));
    
    IEnumerator RunInferenceInBackground(Texture2D input)
    {
        yield return null; // 切换至后台线程
        string predictionResult = ExecuteModelInference(input);
        // 回调主线程更新界面
        UnityMainThreadDispatcher.Instance.Enqueue(() => 
        {
            resultText.text = predictionResult;
        });
    }
    

    可自行实现UnityMainThreadDispatcher单例,用于后台线程向主线程发送UI更新指令。

三、关于前台服务与额外构建脚本的必要性

  • 前台服务:仅当模型推理耗时超过10秒(如大型目标检测模型)时才需要配置,普通图片分类模型推理耗时极短,放在后台线程即可,系统不会轻易终止进程。
  • 额外Android构建脚本:常规部署场景下不需要,除非你需要自定义AndroidManifest的特殊配置(如自定义权限、服务声明),默认打包配置+动态权限申请即可满足需求。

四、调试排查技巧

  • 用adb logcat过滤Unity和TensorFlow日志,定位具体错误:
    adb logcat Unity:V TensorFlow:V *:E
    
    重点关注Failed to load model、Permission denied、Inference error这类关键词,直接定位问题环节。
  • 在代码关键节点添加Debug.Log输出(如模型加载成功、推理开始/结束),通过adb日志确认哪一步出现异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 03:07:16