首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:跨多个进程分发视频帧

Python:跨多个进程分发视频帧
EN

Stack Overflow用户
提问于 2015-07-21 22:11:54
回答 1查看 843关注 0票数 1

目标是对视频帧进行图像处理。视频可以划分为16个独立的区域,在这些区域上可以进行处理。因此,16个不同的进程用于并发处理(结果也按区域存储)。

代码语言:javascript
复制
import cv2
import multiprocessing

def process_region(n):
    cap = cv2.VideoCapture('/path/to/video.avi')

    ret, frame = cap.read()
    while ret:
        # crop frame to region n
        # process the region

        ret, frame = cap.read()

pool = multiprocessing.Pool()
pool.map(process_region, range(16))

这里有一个明显的缺陷,那就是所有进程都在单独加载视频。测试确实表明,阅读测试视频的性能在经过一定(10)个进程后确实会下降:

代码语言:javascript
复制
+------------+--------+
| #processes | T (s.) |
+------------+--------+
|      1     |  30.2  |
|      2     |  27.1  |
|      3     |  32.9  |
|      4     |  30.2  |
|      5     |  31.7  |
|      6     |  29.6  |
|      7     |  29.5  |
|      8     |  29.5  |
|      9     |  30.6  |
|     10     |  30.9  |
|     11     |  32.4  |
|     12     |  35.7  |
|     13     |  40.3  |
|     14     |  43.5  |
|     15     |  48.3  |
|     16     |  52.5  |
+------------+--------+

我尝试只使用一个进程来读取所有视频帧,并将其与multiprocessing.Pipe一起发送到16个启动的multiprocessing.Process进程。然而,这具有最差的性能(> 15分钟)。

我的问题是,是否有一种方法可以以比所有进程本身加载视频更好的性能分发视频帧。

请注意,这是在具有64 of内存的双8核计算机上运行的。

EN

回答 1

Stack Overflow用户

发布于 2015-08-08 00:49:30

您可能希望尝试numpy-sharedmem模块,使单个图像(cv2中的NumPy数组)可由多个进程读取。我在one of my projects中就是这么做的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31541548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档