Tensorflow Node-js, TypeError: поддерживаются только протоколы HTTP(S)

Я пытаюсь загрузить локальную модель tensorflowjs на свой сервер Node, но получаю сообщение об ошибке:

UnhandledPromiseRejectionWarning: TypeError: Only HTTP(S) protocols are supported.

Вот как я импортирую пакеты Tensorflowjs:

const tf = require('@tensorflow/tfjs');
require('@tensorflow/tfjs-node');

global.fetch = require('node-fetch')

и загружаем модель так:

const ssd_model_path =
    'file://models/ssd_model/model.json'

this.model = await tf.loadLayersModel(ssd_model_path);

Мои зависимости следующие:

"dependencies": {
    "@tensorflow/tfjs": "^1.5.2",
    "@tensorflow/tfjs-core": "^1.2.11",
    "@tensorflow/tfjs-node": "^1.2.3",
    "electron-reload": "^1.5.0",
    "esm": "^3.2.25",
    "jimp": "^0.9.3",
    "node-fetch": "^2.6.0"
  }

2 ответа

Я думаю tfjs-node для NodeJS, а tfjsдля веб-браузера. Вы не должны использовать оба одновременно, потому чтоtfjs-node есть все как зависимости для NodeJS.

Если вы посмотрите на пример NodeJS, то увидите, что он не использует tfjs

https://github.com/tensorflow/tfjs-examples/tree/master/mnist-node

Не уверен, что это точно отвечает на ваш вопрос, но это может быть немного связано. Для нас проблема заключалась в том, что у нас была библиотека, скажем, LIB, которая вызывала файлы . Мы использовали LIB в БРАУЗЕРЕ (код браузера) и СЕРВЕРЕ (внутренний сервер). По сути, мы хотели использовать как tfjs, так и tfjs-node «одновременно», то есть мы хотели создать общую библиотеку для внешнего и внутреннего интерфейса, которая использовала бы tfjs.

Обратите внимание, что мы вызывали толькокод в LIB только через браузер.

Чтобы сделать LIB --- более конкретно tfjs --- совместимым с БРАУЗЕРОМ и СЕРВЕРОМ , мы решили эту проблему, добавив следующий условный импорт:

      // Only use tfjs-node env in node env
// Note, due to webpack? checks we
// put the string outside of the import
// to take advantage of lazy loading.
if (typeof window === 'undefined') {
    const tfjsNode = '@tensorflow/tfjs-node'
    await import(tfjsNode)
}

Это позволило нам иметь в LIB код загрузки слоев

      this.model = await tf.loadLayersModel('file://modelsPath/model.json');

А затем вызовите его на СЕРВЕРЕ для загрузки из файловой системы.

Другие вопросы по тегам