как я могу получить данные websocket от клиента на мой flask маршрут приложения? - PullRequest
0 голосов
/ 03 мая 2020

Я занимаюсь разработкой своего первого проекта по распознаванию лиц. Я использую mediaDevices.getUserMedia() для доступа к клиентской веб-камере и отправляю поток веб-камеры в приложение flask с веб-сокетом. я просто получаю поток веб-камеры с моего сокета-маршрута на моем сервере, но я не знаю, как получить эти данные на мой flask маршрут приложения. Я искал любой связанный ответ, но ни один из них не решил мою проблему.

как мне получить поток веб-камеры от websocket до моего flask маршрута приложения? Буду признателен за любой ответ, он мне действительно нужен. спасибо!

JavaScript

var socket = io('https://0.0.0.0:8000');

socket.on('connect', function(){
    console.log('connected !', socket.connected);
});


function capture() {
  canvas.width = 200;
  canvas.height = 200;
  canvas.getContext('2d').drawImage(video, 0, 0, 200,200);  
  var data = canvas.toDataURL('image/jpeg');

  return data;
};

var FPS = 22

setInterval(()=> {
    var imgData = capture();

    socket.emit('image', imgData);

}, 1000/FPS);

flask приложение

@socketio.on('image')
def image(data_image):
    encoded_image = data_image.split(",")[1]

    decoded = base64.b64decode(encoded_image)
    frame = cv2.imdecode(np.frombuffer(decoded, np.uint8), -1)#this is the thing that 
                                                             #i want to use in my below flask route



@app.route('/greet', methods = ['GET'])
def tes():
    return render_template('greetings.html')

1 Ответ

0 голосов
/ 03 мая 2020

Разве ваш socket.emit не должен быть вложен в функцию socket.on? Я бы посоветовал вам попытаться изменить свой код JavaScript следующим образом.

var socket = io('https://0.0.0.0:8000');

socket.on('connect', function () {
    console.log('connected !', socket.connected);

    function capture() {
        canvas.width = 200;
        canvas.height = 200;
        canvas.getContext('2d').drawImage(video, 0, 0, 200, 200);
        var data = canvas.toDataURL('image/jpeg');

        return data;
    };

    var FPS = 22

    setInterval(() => {
        var imgData = capture();

        socket.emit('image', imgData);

    }, 1000 / FPS);
});

В Flask вы можете сделать

@socketio.on('image')
def image(data_image):
    encoded_image = data_image.split(",")[1]

    decoded = base64.b64decode(encoded_image)
    frame = cv2.imdecode(np.frombuffer(decoded, np.uint8), -1)

return render_template ('#') #whatever you need to return after getting the socket data
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...