Я новичок в Flask. Я пытаюсь создать приложение flask, в котором пользователь может загрузить видео, и это видео будет обработано с использованием openCV следующими способами: -
- Сначала видео будет преобразовано в кадры .
- Затем для прогнозирования каждого кадра используется модель и помещает текст (результат) в каждый кадр.
- После этого кадр будет преобразован в видео и записан в видео.
После завершения вышеуказанного процесса видео будет загружено в систему пользователя.
Для этого я перехожу по этой ссылке . Вместо файла 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 %}
Пожалуйста, помогите мне, почему это не работает во второй раз и как заставить его работать?