使用@tensorflow/tfjs-react-native加载模型报错:无法解析bin文件路径
问题与解决方案
问题
使用@tensorflow/tfjs-react-native加载模型时出现错误:
Unable to resolve "missing-asset-registry-path" from "assets/model/group1-shard2of2.bin"
相关代码及配置如下:
模型加载代码
import { bundleResourceIO } from "@tensorflow/tfjs-react-native"; // model path const modelJson = require("../../assets/model/model.json"); const modelWeights = [ await require("../../assets/model/group1-shard1of2.bin"), await require("../../assets/model/group1-shard2of2.bin"), ]; /** * loadModel for Android and IOS * loading model via bundleResourceIO and assets */ export const modelURI = bundleResourceIO(modelJson, modelWeights);
metro.config.js配置
const { getDefaultConfig } = require('metro-config'); module.exports = (async () => { const defaultConfig = await getDefaultConfig(); const { assetExts } = defaultConfig.resolver; return { resolver: { // Add bin to assetExts assetExts: [...assetExts, 'bin'], } }; })();
错误原因及修正
1. 错误核心
require是同步方法,不能用await修饰,这会破坏资源加载逻辑- 二进制权重文件通过
require导入后,返回的是资源引用对象,需要提取uri字段才能被bundleResourceIO正确处理
2. 修正后的模型加载代码
import { bundleResourceIO } from "@tensorflow/tfjs-react-native"; // 同步加载模型JSON和权重文件,提取uri字段 const modelJson = require("../../assets/model/model.json"); const modelWeights = [ require("../../assets/model/group1-shard1of2.bin").uri, require("../../assets/model/group1-shard2of2.bin").uri, ]; export const modelURI = bundleResourceIO(modelJson, modelWeights);
3. 确保配置生效
- 重启Metro服务,或运行
npx react-native start --reset-cache清理缓存,让Metro的assetExts配置生效 - 检查文件路径:确认
assets/model下的文件名(含大小写)与代码引用完全一致 - 平台额外检查:
- iOS:在Xcode中确认模型文件已添加到项目资源中
- Android:确保模型文件放在
android/app/src/main/assets/model目录下,同步Gradle
内容的提问来源于stack exchange,提问作者Balram Yadav
相关产品推荐
相关产品推荐

