Capacitor(Vanilla JS)安卓端加载TensorFlow模型失败求助
Capacitor Android端加载TensorFlow模型失败问题
编辑内容
我使用Capacitor构建了一个基于Vanilla JS的跨平台应用,用于加载在Python中训练的简单分类器神经网络(TensorFlow模型),代码如下:
import * as tf from '@tensorflow/tfjs'; .... const model = await tf.loadLayersModel('./assets/models/model.json');
这段代码在浏览器中可以正常运行,我能使用模型进行预测,但部署到Android后无法加载模型。
在Android Studio的logcat中看到如下错误:
E Unable to open asset URL: http://localhost/assets/models/model.json
我已在AndroidManifest.xml中添加了以下权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
我确认这些权限的位置正确,因为同一位置的其他权限可以正常工作。
目前我已尝试以下方案:
- 使用
@capacitor/filesystem包,但不确定如何实现loadLayersModel的模型加载逻辑。 - 在路径前添加
file://、file:///、file:///andriod_asset、content://前缀。 - 使用
Capacitor.convertFileSrc('./assets/models/model.json') - 尝试不同的路径写法(如
src/assets/..) - 引入
import {fetch as fetchPolyfill} from 'whatwg-fetch';并设置window.fetch = fetchPolyfill;
但仍会出现上述“Unable to open asset URL”错误。使用fetchPolyfill和file:///andriod_asset/...时,会出现“Msg: Not allowed to load local resource: file:///android_asset”错误。
我检查了Capacitor Doctor,Android环境正常:
Capacitor Doctor Latest Dependencies: @capacitor/cli: 5.5.1 @capacitor/core: 5.5.1 @capacitor/android: 5.5.1 @capacitor/ios: 5.5.1 Installed Dependencies: @capacitor/cli: 5.4.0 @capacitor/ios: 5.4.0 @capacitor/core: 5.4.1 @capacitor/android: 5.4.0 [success] Android looking great! 👌 [error] Xcode is not installed
如何在Android端实现与浏览器中相同的模型加载功能?
更新内容
显然问题与Capacitor自动生成的vite.config.ts文件有关。
按照建议,我执行了以下操作:
- 在
src文件夹下添加一个public文件夹 - 在
vite.config.ts中添加publicDir: '../public'配置项 - 执行
npm run build和npx cap sync
遗憾的是问题仍未解决,我在Android文件夹中仍未看到模型文件,且报错信息相同。
import { defineConfig } from 'vite'; export default defineConfig({ root: './src', publicDir: '../public', build: { outDir: '../dist', minify: false, emptyOutDir: true, }, });
若我对建议理解有误,请告知。
内容的提问来源于stack exchange,提问作者Claudio Paladini
相关产品推荐
相关产品推荐

