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

React中ml5+p5瑜伽AI训练器路径参数导致模型加载失败

瑜伽AI训练器模型加载错误排查与解决

问题场景

我用React结合ml5、p5开发了瑜伽AI训练器,开发了一个可接收本地JSON文件中单个体式作为props的组件,组件需加载public文件夹中的模型,目标是通过摄像头识别指定瑜伽体式并动态返回识别出的体式名称。

测试了两个摄像头页面:

  • 页面1路径/practice,对应摄像头组件1,可正常运行
  • 页面2路径/practice/poseId,对应摄像头组件2,代码与组件1基本一致,仅多接收一个匹配对应ID的指定体式props

但在页面2(如/practice/1)中出现报错:

Error loading model: SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON

报错指向以下代码:

const modelInfo = {
  model: "model/model.json",
  metadata: "model/model_meta.json",
  weights: "model/model.weights.bin",
};

fetch(modelInfo.model)
  .then((response) => {
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    return response.json();
  })
  .then((data) => {
    console.log("Model JSON:", data);
    brain.load(modelInfo, brainLoaded);
  })
  .catch((error) => {
    console.error("Error loading model:", error);
  });

问题根源

错误出在模型文件的相对路径解析逻辑:

  • 在/practice页面时,相对路径model/model.json会被解析为网站根目录下的/model/model.json,这个路径对应public文件夹中的模型文件,请求正常。
  • 在/practice/1页面时,相对路径会被解析为/practice/model/model.json,这个路径不存在,服务器返回404页面的HTML代码。而代码尝试把HTML解析成JSON,自然会抛出"Unexpected token '<'"的错误——因为HTML的开头是<!DOCTYPE>,不属于合法JSON格式。

解决方案

有两种可靠的修复方式:

1. 使用根目录绝对路径

直接把模型路径改为以/开头的绝对路径,确保无论当前路由是什么,都从网站根目录请求模型文件:

const modelInfo = {
  model: "/model/model.json",
  metadata: "/model/model_meta.json",
  weights: "/model/model.weights.bin",
};

2. 使用React的PUBLIC_URL环境变量(推荐)

如果是用Create React App搭建的项目,默认支持PUBLIC_URL环境变量,用它拼接路径可以适配不同的部署环境(比如子目录部署):

const modelInfo = {
  model: `${process.env.PUBLIC_URL}/model/model.json`,
  metadata: `${process.env.PUBLIC_URL}/model/model_meta.json`,
  weights: `${process.env.PUBLIC_URL}/model/model.weights.bin`,
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 03:52:14