首页 > 解决方案 > 如何使用 cv2.VideoCapture() 阅读上传到 Flask 应用程序的视频?

问题描述

是否可以创建一个网络应用程序来从我们的计算机发送视频并进行处理cv2.VideoCapture()

在 index.html 中,我通过

<form action="{{ url_for('predict')}}" method="POST"  enctype="multipart/form-data">

在 main.py

@app.route('/', methods=['POST'])
def predict():
    if request.method == 'POST':
        logging.debug('Before my_prediction')
        uploaded_file = request.files['filename']
        extent = uploaded_file.filename.split('.')[1]
        app.logger.info(extent)
        vidcap = cv2.VideoCapture(uploaded_file)

我试过这样做,但得到了这个错误:

TypeError: an integer is required (got type FileStorage)

标签: pythonhtmlflaskcv2

解决方案


使用将文件保存到服务器上的临时文件FileStorage.save(),然后将该临时文件的名称传递给cv2.VideoCapture

from pathlib import Path
import tempfile

@app.route('/', methods=['POST'])
def predict():
    if request.method == 'POST':
        uploaded_file = request.files['filename']
        with tempfile.TemporaryDirectory() as td:
            temp_filename = Path(td) / 'uploaded_video'
            uploaded_file.save(temp_filename)

            vidcap = cv2.VideoCapture(str(temp_filename))
            # do stuff with vidcap

Request.files是对象的字典(更准确地说是 a MultiDictFileStorage,而cv2.VideoCapture需要一个作为文件路径的字符串。


推荐阅读