Flask приложение не работает после выполнения первого запроса - PullRequest
0 голосов
/ 17 февраля 2020

Я новичок в Flask. Я пытаюсь создать приложение flask, в котором пользователь может загрузить видео, и это видео будет обработано с использованием openCV следующими способами: -

  1. Сначала видео будет преобразовано в кадры .
  2. Затем для прогнозирования каждого кадра используется модель и помещает текст (результат) в каждый кадр.
  3. После этого кадр будет преобразован в видео и записан в видео.

После завершения вышеуказанного процесса видео будет загружено в систему пользователя.

Для этого я перехожу по этой ссылке . Вместо файла PDF я загружаю файл .mp4.

Это приложение работает нормально в первый раз после запуска кода. Но когда я пытаюсь загрузить новое видео и обработать его во второй раз, он не работает.

Следующий код написан в oneway.py

from PIL import Image
from os import listdir
import numpy as np
import pandas as pd
import cv2
import os
import matplotlib.pyplot as plt
import re
from pathlib import Path

# End to End Function

def test(filename):
    name = filename.split('/')[-1].split(".")[0]
    cap= cv2.VideoCapture(filename)
    i=0
    images = []
    while(cap.isOpened()):
        ret, frame = cap.read()
        if not ret: break
        font = cv2.FONT_HERSHEY_SIMPLEX
        org = (5,20)
        fontScale = 0.5
        color = (0, 0, 255)
        fontstroke = 2
        prediction = 'Success'
        image1 = cv2.putText(frame, str(prediction), org, font, fontScale, color, fontstroke)
        images.append(image1)
        i+=1
    height, width, channels = images[0].shape
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    out = cv2.VideoWriter('downloads/' + name + '.mp4', fourcc, 20, (width, height))
    for pic in images:
        out.write(pic)
        cv2.imshow('video',pic)
        if (cv2.waitKey(150) & 0xFF) == ord('q'): # Hit `q` to exit
            break
    out.release()
    cv2.destroyAllWindows()

Мой файл app.py

from flask import Flask, render_template, request,  flash, redirect, url_for, send_from_directory
from werkzeug.utils import secure_filename
from oneway import test (# test is the function for process the video and make a prediction)
import os

app = Flask(__name__)

UPLOAD_FOLDER = os.path.dirname(os.path.abspath(__file__)) + '/uploads/'
DOWNLOAD_FOLDER = os.path.dirname(os.path.abspath(__file__)) + '/downloads/'
DIR_PATH = os.path.dirname(os.path.realpath(__file__))
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.config['DOWNLOAD_FOLDER'] = DOWNLOAD_FOLDER
ALLOWED_EXTENSIONS = {'mp4'}
app.secret_key = 'random string'


def allowed_file(filename):
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

@app.route('/', methods=['POST', 'GET'])
def index():
    if request.method == 'POST':
        if 'file' not in request.files:
            print('No file attached in request')
            return redirect(request.url)
        file = request.files['file']
        if file.filename == '':
            print('No file selected')
            return redirect(request.url)
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            test(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            os.remove(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            return redirect(url_for('downloaded_file', filename=filename))
    return render_template('index.html')

@app.route('/downloaded/<filename>', methods=['POST', 'GET'])
def downloaded_file(filename):
    return send_from_directory(app.config['DOWNLOAD_FOLDER'], filename, as_attachment=True)

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

Следующий код в индексе. html

{% extends 'base.html' %}
{% block content %}

<head>
    <meta charset="UTF-8">
    <title>Message</title>
</head>
<body>
<div align="center">
    <h1>Message Print</h1>
    <h2>Upload Video</h2>
    <form method="post" enctype=multipart/form-data>
        <p><input type=file name=file>
            <input type=submit value=Upload></p>

    </form>
</div>
</body>

{% endblock %}

Пожалуйста, помогите мне, почему это не работает во второй раз и как заставить его работать?

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