Я создаю приложение 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, чтобы отобразить этот шаблон. У кого-нибудь есть подсказка?