cv2.imshow () не отвечает после отображения нескольких изображений в окне одно за другим, когда изображения поступают из внешнего интерфейса - PullRequest
0 голосов
/ 21 февраля 2019

Из внешнего интерфейса каждую секунду приходит запрос вместе с изображением строки.Я проверил, что массивный массив изображений создается путем вызова write_image () каждый раз, когда запрос поступает из внешнего интерфейса.Я могу показать каждое изображение для запроса отдельно, используя метод show () модуля подушки.Все хорошо до использования cv2.Когда я использую метод cv2.imshow () для показа изображения в окне, подобном видео, метод imshow может показывать только 6 изображений одно за другим тому окну, созданному cv2.namedWindow ('stream', cv2.WINDOW_NORMAL).

Я хочу показать каждое изображение в окне, как воспроизводится видео.

app.py

import base64
from io import BytesIO
import numpy as np
from flask import Flask, render_template, Response, request
import cv2
from PIL import Image


app = Flask(__name__)


def write_image(image):
    data = base64.b64decode(image)
    img = Image.open(BytesIO(data))
    np_array = np.array(img)
    cv2.namedWindow('stream', cv2.WINDOW_NORMAL)
    cv2.imshow('stream', np_array)
    cv2.waitKey(0)
    cv2.destroyAllWindows()


@app.route('/frame/upload/', methods=['GET', 'POST'])
def upload_image():
    if request.method == "POST":
        file = request.form['images']  # base64
        write_image(file)


if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True, threaded=True)

Каждое изображение должно отображаться в окне для каждого запроса, как видео воспроизводится

1 Ответ

0 голосов
/ 21 февраля 2019

Использование функции печати может вызвать проблемы с буфером, но не уверен, что идет не так.Взгляните на функцию ответа Flask.Пример Flask для потоковой передачи видео выглядит следующим образом:

from flask import Flask, render_template, Response
from camera import VideoCamera

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

def gen(camera):
    while True:
        frame = camera.get_frame() #r_server.get(get)
        yield (b'--frame\r\n'
               b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')

@app.route('/video_feed')
def video_feed():
    return Response(gen(VideoCamera()),
                    mimetype='multipart/x-mixed-replace; boundary=frame')

if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True)

Кредиты: http://blog.miguelgrinberg.com/post/video-streaming-with-flask

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