python - 如何在 Python 中使用 OpenCV 从 POST 请求加载视频?

标签 python opencv flask video video-capture

我在 Python Flask 服务器中有 REST API,它从 POST 请求中获取视频并使用 OpenCV 执行一些情感识别并返回包含情感数据的 JSON 响应。

但是 OpenCV 文档没有提供任何方法来从其字符串表示中读取视频。它需要网络摄像头或 url,但没有提及字符串表示中的视频。

我曾尝试将视频文件保存在我的本地服务器中,然后使用保存的文件来完成我的处理,但这看起来效率不高,因为我们需要为多个用户扩展该功能。

有什么方法可以直接利用视频的字符串表示并逐帧处理它,而不是将其保存到本地并使用它。

下面是我正在努力做到的。

@app.route('/processCapturedVideo', methods = ['POST'])
        def processCapturedVideo():
        # Read as the video file from post request form data
        fileStr = request.files['file'].read() 
        # Process the video in string format using OpenCV and get the result
        return {'data': result}, 200

如果不是 OpenCV,我愿意就替代方案提出建议,只是视频需要逐帧处理。

最佳答案

request.files['file'] 是一个 Werkzeug.datastructures.filestorage

可以在以下位置找到文档

https://werkzeug.palletsprojects.com/en/1.0.x/datastructures/#werkzeug.datastructures.FileStorage

我不熟悉 OpenCV,但您应该能够使用上述文档中的 FileStorage 流 API,即 request.files['file'].stream

如果这不起作用(我知道它对 ZipFile 不起作用,因为它需要一个可搜索的类文件对象),您可以通过其 ._file 属性直接访问文件对象,例如request.files['file']._file.

更新

在再次查看文档(https://docs.opencv.org/2.4/modules/highgui/doc/reading_and_writing_images_and_video.html)并在本地重建上面的应用程序后,我很遗憾地说,它看起来像 OpenCV 实际上只接受路径或设备输入.至少是 VideoCapture 类。

关于python - 如何在 Python 中使用 OpenCV 从 POST 请求加载视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62787179/

相关文章:

python 如何在导入后修改文件

python - Pandas 有选择地删除连续的重复项

python - 捕获 RTP 时间戳

c++ - 具有 k = 2 的 knnMatch 返回 0 最近邻,即使图像经过训练

python - 如何使用Flask框架在浏览器上实时显示python脚本逐条执行的进度?

python - 调用 Flask app.run 后,我可以让 Python 代码继续执行吗?

python - 不使用反斜杠时,cv2 imread不返回任何内容

python - 如何为 dlib 训练创建 `testing.xml` 文件?

opencv - 安装OpenCV:未在CMake中指定内核数

python - SQLAlchemy 中的连接池回收不会从 pg_stat_activity 回收空闲状态连接