无法加载face-api.js的模型

问题描述 投票:0回答:6

我不明白如何加载“模型”,以便我的 React Web 应用程序的客户端可以开始分析图像。我什至不太明白什么是“模型”。

我从做

npm i face-api.js
开始。

然后,我通过在顶部输入

import * as faceapi from 'face-api.js'
将其导入到我的 SignUp 组件中。

在我的

componentDidMount()
函数中,我输入了以下代码:

faceapi.nets.ssdMobilenetv1.loadFromUri('/models').then(result => {
  console.log(result);
}).catch(error => {
  console.log(error)
})

这给了我以下错误: 语法错误:“JSON.parse:JSON 数据第 1 行第 1 列出现意外字符”

所以我尝试在face-api.js目录中寻找“models”目录,但找不到任何东西。然后我回到Github,发现了一个“weights”文件夹(我读到与模型相关)。我下载了它,并将其内容放在我的注册组件附近的“模型”文件夹中(参见附图)。还是同样的错误。

最终,我只想知道用户是否上传了包含人脸的图片。任何面孔。除此之外我不需要任何东西。我做错了什么?

Text

javascript reactjs face-detection face-recognition face-api
6个回答
3
投票

当您运行此命令时:

faceapi.nets.ssdMobilenetv1.loadFromUri('/models')

它在 public/models 目录中查找模型,但只会加载 json 文件。(通过检查浏览器中的“网络”选项卡来验证这一点)。它可能在您的本地计算机上运行,但在部署时会失败。

在我们的例子中,它在生产中失败,因为它需要 *_shard1 文件中的数据,但我们的服务器无法获取没有任何扩展名的这些文件。 为了解决这个问题,我们为所有这些文件添加了“.shard”扩展名,并更改了相应 json 文件中的路径: 来自:

...,"paths": ["file_name_shard1"]}]

致:

...,"paths": ["file_name_shard1.shard"] 

在这里找到了这个解决方案:https://github.com/justadudewhohacks/face-api.js/issues/131


1
投票

对于我使用 VueJs 的示例,我在 public / dist 目录中添加了模型,并遵循 github 示例的说明。

Promise.all([
faceapi.nets.faceRecognitionNet.loadFromUri('/models'), 
faceapi.nets.ssdMobilenetv1.loadFromUri('/models'), faceapi.nets.faceLandmark68Net.loadFromUri('/models'),
])
.then(async () => {//some code goes here})

我使用的样品


1
投票

Smarann Educations 的上述回复非常有用,除了我做了以下更改以使我的在生产服务器上工作:

  • 按照 Smarann Educations 的建议,我在分片文件中输入了“.bin”扩展名,而不是“.shard”扩展名。同样,在相应的 json 文件中,我按照 Smarann Educations 的建议将路径更新为“.bin”而不是“.shard”。这个“.bin”建议位于 Smarann Educations 在其回复中提供的链接的评论之一中

  • 我将所有 loadFromUri('/models') 语句修改为 loadFromUri('./models') - 因此,将 '/models' 替换为 './models' (注意斜杠之前的点)


0
投票

我在反应中遇到了同样的问题,但在开发和生产服务器中。因此,要在本地(在本地主机上)修复它,只需将模型文件夹放入公共文件夹中即可。

要在服务器上修复,您应该将模型文件夹放入

build/static
。 所以我在
package.json
脚本中添加了:

"replace_models": 
  "node -e \"const fs = require('fs-extra'); 
   fs.copy('./build/models', './build/static/models').then(
     () => {fs.removeSync('./build/models'); 
     return console.log('success!')}
    ).catch(err => console.error(err))\"
  " 

然后:

"build": "react-scripts build && npm run replace_models"

0
投票

他们将如何在 c# mvc 中执行此操作,执行时不会出现 models、dist 等文件夹?


-1
投票

您可以使用

loadFromDisk
代替
loadFromUri

您可以将模型的文件扩展名更改为

.dir
而不是
.json

© www.soinside.com 2019 - 2024. All rights reserved.