Tensorflow.js,函数预测未定义

时间:2019-06-16 13:59:56

标签: javascript json tensorflow google-chrome-extension tensorflow.js

我正在开发chrome扩展程序,在其中使用训练有素的keras模型,并通过库tensorflow.js下载。 从DevTools中可以看到,模型可以很好地加载,但是我不能使用它(不能使用函数predict())。

background.js

const start = async function() {
const model = await tf.loadLayersModel('https://raw.githubusercontent.com/myAcc/myRep/master/model.json');
return model;
}

const model = start();

chrome.extension.onRequest.addListener(function predict(data){
    console.log(data);
    console.log(model.predict(data));
    var prediction = model.predict(data);
    if (prediction[0] == 1){
        alert("Yes");
    }
    else {
        alert("No");
    }
}
                                  );

manifest.json

{
  "manifest_version": 2,
  "name": "my_project",
  "version": "0.1",

  "background": {
        "scripts": ["tf.min.js", "background.js"]
   },
   "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",

  "content_scripts": [
      {
        "matches": [
          "<all_urls>"
        ],
        "js": ["jquery-3.1.1.min.js","content.js"]
      }
   ],
   "permissions":  ["https://*/"]
}

我在background.js中遇到错误

事件处理程序中的错误:TypeError:model.predict不是函数

我该如何解决?

1 个答案:

答案 0 :(得分:0)

您的异步函数start不返回模型。它返回一个可分解为模型的Promise。

您必须等到此Promise解决方案才能使用该模型。例如,您可以通过在Promise上使用.then()并使用其调用的参数来实现。