Простой веб-сервис с нейронной сетью

от автора

В своих проектах активно использую сверточные сети на базе фреймворка Caffe. Но они все работают либо в изолированных средах, а обмен данными идет через СУБД, либо через достаточно сложные http-сервисы.

Поэтому, пару недель назад тренируясь с питоном и caffe задумался как можно попроще запускать нейросеть на caffe для веб-сервиса на node.js

Кому интересно — внутри коротко как это реализовал и ссылка на пример.

Для наглядности взял колоризатор черно-белых фото. Данная система написана на питоне и имеет входной тестовый скрипт colorize.py.

Задача сводится к тому, чтобы по запросу запустить процесс с питоном, colorize.py и аргументами, затем вернуть результаты. Для таких задач в node.js есть модуль child_process. В документации написано, что метод spawn() асинхронно запускает процесс с заданной командой, а это как раз то, что надо .

В нашем случае команда:

python ./colorize.py -img_in PATH_TO_MY_BW.PNG -img_out PATH_TO_MY_COLOR.PNG

Код для child_process получается такой:

const spawn = require('child_process').spawn; const arg = ['colorize.py', '-img_in', 'PATH_TO_MY_BW.PNG', '-img_out', 'PATH_TO_MY_BW.PNG']; const py = spawn('python', arg);  py.stdout.on('data', (data) => {   console.log(`stdout: ${data}`); });  py.stderr.on('data', (data) => {   console.log(`stderr: ${data}`); });  py.on('close', (code) => {   console.log(`child process exited with code ${code}`); });

Для обработки запросов использовал Express. Фронтенд — Angular. Весь исходный код можно посмотреть здесь. Конкретно сам обработчик находится здесь

Может быть, я сам такой "зеленый", но данная задача была не совсем тривиальной для меня. Надеюсь кому-то данный пост сэкономит хоть какое-то время.

ссылка на оригинал статьи https://habrahabr.ru/post/326864/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *