Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中使用OpenCV从POST请求加载视频?_Python_Opencv_Flask_Video_Video Capture - Fatal编程技术网

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

如何在Python中使用OpenCV从POST请求加载视频?,python,opencv,flask,video,video-capture,Python,Opencv,Flask,Video,Video Capture,我在PythonFlask服务器中有RESTAPI,它从POST请求中获取一个视频,并使用OpenCV执行一些情绪识别,然后用情绪数据返回JSON响应 但是OpenCV文档没有提供任何从字符串表示中读取视频的方法。它要么需要网络摄像头,要么需要url,但没有提到视频的字符串表示 我曾尝试将视频文件保存在本地服务器中,然后使用保存的文件完成处理,但这看起来效率不高,因为我们需要为多个用户扩展该功能 有没有办法直接利用视频的字符串表示,逐帧处理视频,而不是将其保存到本地并使用它 下面是我如何努力做到

我在PythonFlask服务器中有RESTAPI,它从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

文件可在以下网址找到:

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

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

更新


在再次查看文档()并在本地重新构建上述应用程序之后,我很抱歉地说,看起来as
OpenCV
实际上只接受路径或设备输入。至少是
VideoCapture
类。

Hello@J.G.,我尝试过使用“byte string”、“stream”甚至“\u file”格式的文件,但OpenCV不支持这些格式。我需要一种方法将此文件转换为OpenCV接受的格式,或者我需要一个不同的库,从文件格式读取视频,并执行OpenCV能够执行的任何操作。如果有一种不同的方法将视频文件从我的react原生应用程序发送到ML模型,这样我就可以处理它并返回结果,那么我对这些方法也很满意。您好,Sai,我再次阅读了OpenCV文档,其中说您只能传入一个文件名(指目录中的现有文件,而不是文件上载的文件名)或者设备名称,例如连接的摄像头。这真的很奇怪,因为几乎所有API都会接受对象或缓冲区之类的文件。对于我提供的错误信息,我深表歉意。正如我所说,我不熟悉OpenCV,但看起来你必须先将上传的文件写入磁盘,然后将路径名传递给OpenCV.yeah@J非常感谢你的帮助。我正在查看一些其他的方法,我会用我的发现更新这个论坛。