我正在使用OpenCV处理Web服务中的一些视频数据。在调用OpenCV之前,视频已经被加载到一个
bytearray
缓冲区中,我希望将其传递给VideoCapture
对象:# The following raises cv2.error because it can't convert '_io.BytesIO' to 'str' for 'filename'
cap = cv2.VideoCapture(buffer)
很遗憾,VideoCapture()
期望一个字符串文件名,而不是缓冲区。目前,我将bytearray
保存到临时文件中,并将其名称传递给VideoCapture()
。
问题:
- 有没有一种方法可以在Python中创建具有命名的内存文件,以便我可以平息OpenCV?
- 或者,是否有另一个支持缓冲区的OpenCV API?
/dev/shm
是个好主意。我没有提出它,只是因为你(据我所知)不能说它有多大,这可能很重要。我宁愿自己创建一个tmpfs并且知道我不会破坏系统。但是,你的情况可能有所不同。 - 2e0byocat /proc/mounts | grep tmpfs
命令的输出表明/dev/shm
没有被挂载选项限制(但可能会被其他东西限制),而/tmp
被限制了,而/run/user/1000
更受限制:tmpfs /dev/shm tmpfs rw,nosuid,nodev,inode64 0 0 tmpfs /tmp tmpfs rw,nosuid,nodev,nr_inodes=409600,inode64 0 0 tmpfs /run/user/1000 tmpfs rw,nosuid,nodev,relatime,size=376112k,nr_inodes=94028,mode=700,uid=1000,gid=1000,inode64 0 0
。 - 2e0byocat /dev/urandom > /dev/shm/stuff
或类似的操作,内核本身就会因为没有内存而挂起。虽然很可能是特定于发行版/家族或者代码本身的限制,同时在 tmpfs 挂载时留下了“无限制”的区域。或者也许它从内核中的一个大内存池开始,为所有 tmpfs 实例分配一部分,例如/dev/shm
、/tmp
等等。 - Peter Badida