Как посылание изображений webcam с nodejs в backend python

@kikocorreoso большое спасибо в конце концов ему удайтесь заставить проходить код, как я обещал, что здесь я печатаю ссылку с кодом в моем github: https://github.com/sasuki-chan/nodejs-con-python

Файл README им должно казаться это первым, код файла server.js так как файл рукописного шрифта в python они очень довольно понятные благодаря комментариям, которые я поместил в код.

Я надеюсь, что этот код они - много помощи

Это была проблема, которая у него была:

у меня есть сервер в nodejs, что получает изображения webcam, которые взяты пользователем, в части, которую он бьет козырем, когда я пробую перемещать изображение, которое он получает nodejs в python для того, чтобы с книжным магазином opencv он обработал ее, у меня появляется эта ошибка:

 events.js:85
  throw er; // Unhandled 'error' event
        ^
 Error: IndexError: list index out of range
at PythonShell.parseError (/home/kira/node_modules/python-shell/index.js:183:17)
at terminateIfNeeded (/home/kira/node_modules/python-shell/index.js:98:28)
at ChildProcess. (/home/kira/node_modules/python-shell/index.js:88:9)
at ChildProcess.emit (events.js:110:17)
at Process.ChildProcess._handle.onexit (child_process.js:1074:12)
----- Python Traceback -----
File "mostrar_imagen.py", line 14, in 
  main()
File "mostrar_imagen.py", line 8, in main
  imagen_dir = sys.argv[1]

Если кто-то уже попробовал делать это раньше, мне хотелось бы, что он помог мне с примером как, делать это.

Использовал книжный магазин python-shell, чтобы присоединять nodejs с python и потрясающим книжным магазином, который получает файл

Это код, который у меня есть стороны сервера.

var express = require('express');
var app = express();
var server = require('http').createServer(app);
GLOBAL.io = require('socket.io').listen(server);
var bodyParser = require('body-parser');
var session = require('express-session');
var port = process.env.PORT ||8080;
server.listen(port);
var fs = require('fs');
var PythonShell = require('python-shell');
var pyshell = new PythonShell('mostrar_imagen.py');
var formidable = require('formidable');
var util = require('util');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:true}));

       ///////////////////////////////////////////////////////////////////////////////////////////
   app.get('/', function(req,res){
        app.use(express.static(__dirname + '/public'));
        res.sendfile(__dirname, + 'index.html');
   });
     ///////////////////////////////////////////////////////////////////////////////////////////

 app.post('/upload', upload);

function upload(req, res){
 if (req.method.toLowerCase() == 'post') {
   // parse a file upload
   var form = new formidable.IncomingForm();
   var files = []
  form.uploadDir = "upload";
  console.log("Se ha recibido el formulario");

form.parse(req, function(err, fields, files) {
  res.writeHead(200, {'content-type': 'text/plain'});
  res.write('Se ha recibido el formulario:\n\n');
  console.log(files)
  res.end(util.inspect({fields: fields, files: files}));
// aqui intento iniciar el script de python pasandole el argumento de la
// imagen
pyshell.send(files.upload);
});
return;
 }
}
  //////////////////////////////////////////////////////

 console.log('Servidor corriendo en https:localhost:8080')

сейчас мой код python: #!/usr/bin/env python

  import numpy
  import cv2
  import sys

  def main():
     #El argumento sys.argv[1] es el que me genera error cuando inicio 
     #el script por medio de nodejs le paso el argumento de la imagen de la
     # webcam, nodejs recibe la imagen del navegador en formato jpeg asi que
     #he investigado que es uno de los formatos correctos.
     imagen_enviada_por_nodejs = sys.argv[1]
     imagen= cv2.imread(imagen_enviada_por_nodejs)
     cv2.imshow("Ventana de imagen", imagen)
     cv2.waitKey(0)

     if __name__ == '__main__':
        main()

nodejs, когда он получает изображение посредством console.log этой, это информация, которая дает мне:

  { webcam: 
     { domain: null,
        _events: {},
       _maxListeners: undefined,
         size: 2727,
        path: 'upload/upload_00ee34b93cbde97df319d493bb3dcefb',
        name: 'webcam.jpg',
        type: 'image/jpeg',
        hash: null,
        lastModifiedDate: Fri Jun 10 2016 20:14:00 GMT-0600 (CST),
        _writeStream: 
            { _writableState: [Object],
               writable: true,
               domain: null,
               _events: {},
                _maxListeners: undefined,
                path: 'upload/upload_00ee34b93cbde97df319d493bb3dcefb',
                fd: null,
                flags: 'w',
                 mode: 438,
                 start: undefined,
                 pos: undefined,
                 bytesWritten: 2727,
                 closed: true } } }

вкратце я протестировал изображение, которое сохраняет меня в папке upload выполняя рукописный шрифт с конечной остановки ubuntu и изображение читает верно ошибку эта, в которой не, как перемещение изображения, которое он получает nodejs в рукописный шрифт python.

большое спасибо из-за Ваших ответов каждый раз я ближе добивания этого, когда он это решит, буду иметь код в github подожду, что есть, кто-то больше подал его.

3
задан 09.03.2017, 16:43
2 ответа

Ok, оказались немного лучше пример, я создал маленький подходящий для воспроизведения пример. В части node я сделал следующее:

var PythonShell = require('python-shell');
var options = {
    // el python path lo puedes sacar usando 
    // > which python 
    // en la línea de comandos
    pythonPath: '/ruta/completa/al/ejecutable/python',
    // Esta será la ruta absoluta a la carpeta donde está tu script python
    scriptPath: '/ruta/al/fichero/python',
    // Esta es la ruta absoluta a tu imagen obtenida mediante node
    args: ['/ruta/absoluta/a/python.jpeg']
};
PythonShell.run('tu_fichero.py', options, function (err, results) {
  if (err) throw err;
  // results is an array consisting of messages collected during execution 
  console.log('results: %j', results);
});

То, что идет внутри PythonShell.run(...) он сходный с, если в командной строке ты делаешь:

python /ruta/al/fichero/mi_fichero.py /ruta/absoluta/a/python.jpeg

когда ты подбираешь параметры, которые ты перемещаешь выполнимый python используя sys.argv параметр 0 - имя рукописного шрифта и параметр 1 - маршрут в изображение, в этом случае.

Часть Пайтон был бы:

import sys

import numpy as np
import cv2

path = sys.argv[1]
print(path)
imagen = cv2.imread(path)
cv2.imshow("Ventana de imagen", imagen)
cv2.waitKey(0)

Если все пошло правильно, у тебя было бы должно выходить окно с logo Пайтона.

2
ответ дан 24.11.2019, 14:11
  • 1
    я это протестирую сейчас, чтобы видеть, в конце концов решаю ли я это – Uchicha Sasuke 12.06.2016, 22:34
  • 2
    большое спасибо @kikocorreoso в конце концов я этого добился xD, вскоре я напечатаю, что код, уже функционировавший верно в github я надеюсь, что в кого-то больше он подает его, большое спасибо fuistes большой помощи:) – Uchicha Sasuke 12.06.2016, 23:09

@kikocorreoso большое спасибо в конце концов ему удайтесь заставить проходить код, как я обещал, что здесь я печатаю ссылку с кодом в моем github: https://github.com/sasuki-chan/nodejs-con-python

Файл README должно казаться это первым, код файла server.js так как файл рукописного шрифта в python они очень довольно понятные благодаря комментариям, которые я поместил в код.

Надеялся, что этот код они - много помощи

0
ответ дан 24.11.2019, 14:11
  • 1
    Est и # 225; хорошо, что ты напечатал soluci и # 243; n, но quiz и # 225; s вместо того, чтобы заставлять это как ответ на твой лучший вопрос быть должным и # 237; схвати издавать сам вопрос в и # 241; adiendo secci и # 243; n стиля: " Soluci и # 243; n final" – abulafia 16.06.2016, 10:34
  • 2
    @JLDiaz не . Они не должны себе размещать такие вещи как soluci и # 243; n конец или ближних в вопросах. –  20.06.2016, 17:02

Теги

Похожие вопросы