Как использовать тензор потока js на сервере nodejs? - PullRequest
1 голос
/ 16 февраля 2020

Я хотел бы использовать плагин tenorflow js с cocossd и mobil enet на стороне сервера с nodejs. Я уже сделал сценарий на стороне клиента, который работает, когда пользователь отправляет форму, я запускаю tf js:

const img = new Image(100, 100);
img.src = //base64 encoded image

// Load the model.
mobilenet.load().then(async model => {
    const post_predictions = []; 
    model.classify(img).then(classify_predictions => {
        classify_predictions.forEach(function(element){
            const each_class = element["className"].split(", ")
            each_class.forEach(function(this_element){
                post_predictions.push([this_element, (element.probability*100)]);
            })
        })
        cocoSsd.load().then(model => {
            // detect objects in the image.
            model.detect(img).then(predictions => {
                predictions.forEach(function(this_element){
                    post_predictions.unshift([this_element.class, (this_element.score*100)]);
                });
                post_predictions.sort(function(a, b) {
                    return b[1]-a[1];
                });

                console.log(post_predictions)
            });
        })
    });
});

Я хотел бы сделать то же самое на стороне сервера, но у меня есть идея узла, что требуется модулям или как загрузить изображение из его базы 64.

Я попытался загрузить cocossd и mobil enet на свой сервер с помощью:

npm i @ tenorflow-models / mobil enet

npm i @ensorflow-models / coco-ssd

А затем я попытался установить tenorflow js для узла с:

npm i @ensorflow / tf js -узел

Но когда я это сделаю:

npm i tenorflow

Я получаю эту ошибку:

npm ERR! код EBADPLATFORM

npm ОШИБКА! notsup Неподдерживаемая платформа для tensorflow@0.7.0: wanted {"os": "linux, darwin", "arch": "any"} (текущий: {"os": "win32", "arch": "x64"} )

npm ОШИБКА! notsup Действительная ОС: linux, Дарвин

npm ОШИБКА! Действительная арка notsup: любая

npm ОШИБКА! notsup Фактическая ОС: win32

npm ERR! notsup Actual Arch: x64

npm ОШИБКА! Полный журнал этого прогона можно найти в:

npm ERR! C: \ Users \ johan \ AppData \ Roaming \ npm -cache_logs \ 2020-02-16T05_27_15_276Z-debug.log

Просьба помочь мне help Спасибо

1 Ответ

0 голосов
/ 01 апреля 2020

Я также сталкиваюсь с другой проблемой, когда я делаю "npm i @ tenorflow-models / mobil enet".
Вот скриншот.
Кажется, проблема с пакетом. enter image description here

Вы можете попробовать сделать это в качестве альтернативы.

Поэтому я в конечном итоге использую CDN для TensorFlow mobil enet
Обратитесь к приведенным ниже строкам кода

<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.7.1/dist/tf.min.js"> </script> //
<!-- Load the MobileNet model. -->
<script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/mobilenet@2.0.4/dist/mobilenet.min.js"> </script>

Вот шаги:
1. Создайте простой проект узла, используя npm init. Это создаст пакет. json файл. Это где пакеты находятся или перечислены.
2. Обратите внимание, что вам нужно нажать «npm install express --save» в командной строке, чтобы пакет express был добавлен в пакеты. json
3. Создайте index. html файл со следующим кодом. На стороне пользовательского интерфейса вам будет предложено загрузить изображение, которое будет оцениваться на консоли или будет отображаться в виде сообщения с предупреждением.

<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.7.1/dist/tf.min.js"> </script> //
<!-- Load the MobileNet model. -->
<script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/mobilenet@2.0.4/dist/mobilenet.min.js"> </script>
<input type='file' />
<br><img id="myImg" src="#" alt="your image will be displayed here" >

<script>
  window.addEventListener('load', function() {
  document.querySelector('input[type="file"]').addEventListener('change', function() {
      if (this.files && this.files[0]) {
          var img = document.querySelector('img');  // $('img')[0]
          img.src = URL.createObjectURL(this.files[0]); // set src to blob url
          img.onload = imageIsLoaded;
      }
  });
});



async function run() {
    const img = document.getElementById('myImg');
    print(img)
    const version = 2;
    const alpha = 0.5;
    // Load the model.
    const model = await mobilenet.load({version, alpha});

    // Classify the image.
    const predictions = await model.classify(img);
    console.log('Predictions');
    console.log(predictions);

    // Get the logits.
    const logits = model.infer(img);
    console.log('Logits');
    logits.print(true);

    // Get the embedding.
    const embedding = model.infer(img, true);
    console.log('Embedding');
    embedding.print(true);
  }

function imageIsLoaded() { 
  run();
}

</script>

Шаг 3: Создать сервер. js. Этот файл будет использоваться для визуализации индексного файла на вашем локальном сервере с использованием пакета express npm. Ниже приведен код:

const express = require('express');
app = express();

app.get('/',function(req,res) {
    res.sendFile('/demo/index.html', { root: __dirname });
});
const port = 3000
app.listen(port, function(){
    console.log(`Listening at port ${port}`);
})

Шаг 4: Go в браузер и нажмите localhost: 3000
Ниже приведен рабочий скриншот проекта. enter image description here

ОБНОВЛЕНИЕ: ЗАГРУЗКА NODEJS
Похоже, проблема в последовательности установки
Шаг 1: Установите следующие пакеты

npm install @tensorflow/tfjs @tensorflow/tfjs-node --save
// or...
npm install @tensorflow/tfjs @tensorflow/tfjs-node-gpu --save

Шаг 2: Теперь вы можете установить @ tenorflow-models / mobil enet -save

npm install @tensorflow-models/mobilenet -save

Шаг 3: Сервер. js Пример использования

const tf = require('@tensorflow/tfjs')
// Load the binding (CPU computation)
const mobilenet = require('@tensorflow-models/mobilenet');

// for getting the data images
var image = require('get-image-data')

image('./cup.jpg', async function (err, image) {

    const numChannels = 3;
    const numPixels = image.width * image.height;
    const values = new Int32Array(numPixels * numChannels);
    pixels = image.data
    for (let i = 0; i < numPixels; i++) {
        for (let channel = 0; channel < numChannels; ++channel) {
            values[i * numChannels + channel] = pixels[i * 4 + channel];
        }
    }
    const outShape = [image.height, image.width, numChannels];
    const input = tf.tensor3d(values, outShape, 'int32');
    await load(input)
});

async function load(img){
    // Load the model.
    const model = await mobilenet.load();

    // Classify the image.
    const predictions = await model.classify(img);

    console.log('Predictions: ');
    console.log(predictions);
}

Скриншот прогноза enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...