Expo托管应用加载自定义TensorFlow模型时Bin文件导入报错求助
解决React Native/Expo中加载TensorFlow.js模型二进制文件的错误
错误原因
直接用require()导入.bin二进制文件会导致Metro将其当作JavaScript文件解析,而二进制文件包含非UTF-8字符,因此抛出语法错误。
解决步骤
1. 修正Metro配置
确保Metro将.bin和.json文件识别为资源而非JS模块,修改metro.config.js:
const { getDefaultConfig } = require('@expo/metro-config'); const config = getDefaultConfig(__dirname); // 添加支持的资源扩展名 config.resolver.assetExts.push('bin', 'json'); module.exports = config;
2. 使用tfjs-react-native的正确加载方式
无需手动导入.bin文件,利用bundleResourceIOAPI结合模型的JSON文件加载完整模型:
import * as tf from '@tensorflow/tfjs'; import { bundleResourceIO } from '@tensorflow/tfjs-react-native'; // 导入模型的JSON配置 import modelJson from './js-model/model.json'; async function loadClassifierModel() { // 初始化TensorFlow.js环境 await tf.ready(); // 加载模型,自动关联二进制分片文件 const model = await tf.loadLayersModel( bundleResourceIO(modelJson, require('./js-model/group1-shard1of1.bin')) ); console.log('模型加载完成'); // 后续可调用model.predict()等方法使用模型 }
3. 验证文件路径
确保model.json和group1-shard1of1.bin放在同一目录下,且代码中的路径引用正确,保证Expo/Metro能访问到这些文件。
补充说明
你的依赖中已包含@tensorflow/tfjs-react-native和expo-gl,满足模型加载的环境要求,无需额外安装依赖。
内容的提问来源于stack exchange,提问作者Joe Davis
相关产品推荐
相关产品推荐

