将 Azure 自定义视觉模型与 Node.js 结合使用

Posted

技术标签:

【中文标题】将 Azure 自定义视觉模型与 Node.js 结合使用【英文标题】:Use Azure custom vision model with Node.js 【发布时间】:2020-06-01 09:04:36 【问题描述】:

我是 Tensorflow.js 的新手,所以我不太了解它。 我已经使用 Azure 自定义视觉 (customvision.ai) 训练了一个对象检测模型,并且如文档中所述,我导出了 Tensorflow.js 的模型,以便在我的 Node.js 项目中离线使用。

他们在 Github (https://github.com/microsoft/customvision-tfjs) 上有一个关于如何将模型与 Tensorflow.js 一起使用的非常简短的指南,我尝试按照步骤操作但无法运行。

如果有人有使用 Tensorflow.js 的经验,请帮助我,我在过去 3 天都坚持使用它。

这是我要执行的代码,我收到错误

'await 只能与异步函数一起使用'

即使 loadModelAsync() 函数是异步的。

const cvstfjs = require('@microsoft/customvision-tfjs');

let model = new cvstfjs.ObjectDetectionModel();
await model.loadModelAsync('model.json');
const image = document.getElementById('image');
const result = await model.executeAsync(image);

【问题讨论】:

那不是 node.js 代码,那是 html 中的 javascript 代码。你被 Node.js 困在哪里了? @AKX 感谢您的回复。在此处的指南中 (github.com/microsoft/customvision-tfjs)。他们提供了一个代码 sn-p 以在 Node.js 应用程序中使用该模型。但是当我尝试时,我得到了错误(导入语句不能在模块外部使用)。所以,我尝试使用网页 sn-p。你能帮我弄清楚如何在 Node js 中运行它吗 您需要改用require 语句 (const cvstfjs = require('@microsoft/customvision-tfjs');)。 @AKX 我试过了,但我得到了错误(await 只能与异步函数一起使用),尽管我自己在库中检查了函数 loadModelAsync() 实际上是异步的。 是的,使用await 调用异步函数的函数必须是async 【参考方案1】:

正如错误所说,您需要将任何 await 调用包装在 async 函数中:

const cvstfjs = require('@microsoft/customvision-tfjs');

async function doThings() 
  let model = new cvstfjs.ObjectDetectionModel();
  await model.loadModelAsync('model.json');
  const image = document.getElementById('image');
  const result = await model.executeAsync(image);
  return result;


doThings().then((result) => 
  console.log(result);
);

【讨论】:

此代码还给出错误:(节点:15392)UnhandledPromiseRejectionWarning:TypeError:getNodeRequestOptions 仅支持绝对 URL(C:\Users\Aakash Bhadana\Desktop\tensorflowjs\node_modules\node-fetch\lib \index.js:1284:9) 在 C:\Users\Aakash Bhadana\Desktop\tensorflowjs\node_modules\node-fetch\lib\index.js:1370:19 对,那是另一个问题。它无法从该路径加载您的模型。 (根据例外情况,完整的 HTTP URL 可能会起作用。) 是的,你是对的,我用 localhost URL 更改了文件名,现在错误是未定义“文档”。如何在 Node.js 应用程序中访问 HTML 图像元素? 代码 sn-p 在 Node.js 代码之间有 document.getElementById(),这对我来说没有意义??你能帮忙看看怎么做吗? 您需要从某个地方获取图像数据。取决于您的应用程序。【参考方案2】:

您是否看到使用 JavaScript 运行 ONNX 模型的 ONNX.js。 https://github.com/microsoft/onnxjs

【讨论】:

以上是关于将 Azure 自定义视觉模型与 Node.js 结合使用的主要内容,如果未能解决你的问题,请参考以下文章

Azure 自定义视觉:是不是可以在自定义视觉环境中存储图像元数据(不是标签)?

Azure 移动应用 Node.js 后端 - 推送通知错误状态代码 400

在 Azure 中创建 Node.js Web 应用

Node.js自定义对象事件监听与发射

从自定义视觉导出标签

如何在 Node.JS 中向 sequelize.js 添加自定义函数?