Как отобразить шаблон во Flask из функции app.response_class () в зависимости от условия? - PullRequest
0 голосов
/ 11 апреля 2019

Я создаю приложение Flask, в котором видео непрерывно передается на веб-страницу с помощью функции app.response_class. Мое приложение содержит три страницы, две из которых относятся здесь: index.html (это страница входа в систему, которая запускает тип игры) и game.html (которая показывает видео в реальном времени о игре, в которую играют, посредством open- CV2). Я хотел бы сделать шаблон index.html, обычно с

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

из функции response_class при выполнении определенного условия. Условием является либо оценка [0] == 10, либо оценка [1] == 10, поскольку это означает, что игра окончена.

Следующий (урезанный) код обрабатывает прямую трансляцию видео, а также обновление баллов (которые здесь произвольно обновляются для целей тестирования):

def video_stream():
    global score
    game_running = True

    while game_running:
        global game
        ok, frame = video_camera.read()

        # Mock scoring update
        score_black, score_white = np.random.choice([0, 1], 1, p=[0.95, 
        0.05]), np.random.choice([0, 1], 1, p=[0.95, 0.05])
        score[0] += score_black[0]
        score[1] += score_white[0]

        # Stop condition
        if score[0] == 5 or score[1] == 5:

            # Stop game and yield last frame
            game.stop()
            game_running = False
            yield (b'--frame\r\n'
                   b'Content-Type: image/jpeg\r\n\r\n' + global_frame + b'\r\n\r\n')

            score = None

            # RENDER TEMPLATE FOR INDEX.HTML HERE AND BREAK OUT OF APP_RESPONSE (HOW??)

        if ok:
             _, jpeg = cv2.imencode('.jpg', frame)
            global_frame = jpeg.tobytes()
            jpeg = jpeg.tobytes()
            yield (b'--frame\r\n'
                    b'Content-Type: image/jpeg\r\n\r\n' + jpeg + b'\r\n\r\n')

@app.route('/video_viewer')
    def video_viewer():
    return app.response_class(video_stream(),
                    mimetype='multipart/x-mixed-replace; boundary=frame')

Я попытался выдать render_template, а также вернуть его. Но, конечно, это возвращение передается обратно в response_class, что приводит к ошибке? Я понятия не имею, как выйти из функции response_class, чтобы отобразить этот шаблон. У кого-нибудь есть подсказка?

...