在 windows 下用 Python 和 opencv 做了一个视频分析程序,如何加速? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
zzcchh
V2EX    Python

在 windows 下用 Python 和 opencv 做了一个视频分析程序,如何加速?

  •  
  •   zzcchh 2017-05-22 11:24:23 +08:00 6358 次点击
    这是一个创建于 3125 天前的主题,其中的信息可能已经有所发展或是发生改变。
    从视频中提取数据,开启视频窗口的话每秒处理 5-6 帧,一小时视频要 5-6 小时处理完,我想慢点也没关系,但是 cpu 占用率只有 2%。这就不让我淡定了,明显是偷懒了,安排了多线程,好像也是不能提升速度,请问 windows 就是不会给 python 太多资源么?我开了几路脚本一起做,cpu 仍然占用率也很低。这是怎么回事?
    32 条回复    2017-05-24 12:52:00 +08:00
    comesx4
        1
    comesx4  
       2017-05-22 11:29:06 +08:00
    用的是 GPU?
    misaka19000
        2
    misaka19000  
       2017-05-22 11:30:33 +08:00
    放代码
    zzcchh
        3
    zzcchh  
    OP
       2017-05-22 11:40:31 +08:00 via Android
    @misaka19000 不敢放,太丑了,流程比较简单,识别轮廓,拟和椭圆和质点,记录 csv,甚至没有定义函数。
    zzcchh
        4
    zzcchh  
    OP
       2017-05-22 11:41:04 +08:00 via Android
    @comesx4 没有就是 cpu。
    cnnblike
        5
    cnnblike  
       2017-05-22 11:41:49 +08:00 via iPhone
    用的是机械硬盘?或者内存比较小?
    laodao
        6
    laodao  
       2017-05-22 11:43:59 +08:00
    上异步,分分钟跑满你的 cpu。
    Finest
        7
    Finest  
       2017-05-22 11:44:33 +08:00
    多线程改为多进程
    XYxe
        8
    XYxe  
       2017-05-22 11:45:23 +08:00 via Android
    计算密集的任务试试多进程
    scream7
        9
    scream7  
    PRO
       2017-05-22 11:48:43 +08:00
    是不是时间消耗在 IO 操作上了
    baicheng
        10
    baicheng  
       2017-05-22 11:56:47 +08:00 via iPhone
    试着多将几帧一次性读入内存看看行不行?运行的时候看下资源占用率是不是硬盘开销比较大,如果你 CPU 相当牛叉有十几个核可以试试用 MATLAB 并行。
    adodo1
        11
    adodo1  
       2017-05-22 12:14:12 +08:00   1
    5/6 帧一秒,视频好歹也 25 帧一秒最少
    zzcchh
        12
    zzcchh  
    OP
       2017-05-22 12:16:09 +08:00 via Android
    @adodo1 我说的是处理速度,不是播放速度,一小时视频 5 个小时处理完没毛病
    itfanr
        13
    itfanr  
       2017-05-22 16:14:35 +08:00 via Android
    建议用 go 或者 rust
    zhidian
        14
    zhidian  
       2017-05-22 16:17:56 +08:00
    1. 可以只处理部分帧(关键帧?); 2. 每帧太大的话,降采样变小点;
    itfanr
        15
    itfanr  
       2017-05-22 16:27:18 +08:00 via Android
    @adodo1 是处理速度
    zhidian
        16
    zhidian  
       2017-05-22 16:27:32 +08:00
    如果只是线、椭圆检测啥的,OpenCV 好像提供跟踪,应该快点吧。
    ytmsdy
        17
    ytmsdy  
       2017-05-22 16:40:40 +08:00 via iPhone
    应该是 io 没跟上,导致 cpu 工作不饱和
    uucloud
        18
    uucloud  
       2017-05-22 16:51:53 +08:00
    换 c++
    zhidian
        19
    zhidian  
       2017-05-22 16:56:50 +08:00
    @uucloud OpenCV 的 Python 绑定,调的也是 C++。
    zzcchh
        20
    zzcchh  
    OP
       2017-05-22 22:32:47 +08:00 via Android
    @ytmsdy 我觉得可能是,其实硬盘没有跟忙。
    zzcchh
        21
    zzcchh  
    OP
       2017-05-22 22:37:41 +08:00 via Android
    @itfanr 初级菜鸟,还不会那些语言。我也不会多进程,就是在系统下一次运行了 9 个脚本分别处理 9 个视频。发现内存占用多了一些,cpu 仍然是 2-10%。关闭 imshow 函数会快一点,大概是 3 个小时能处理一个小时视频。 @zhidian 采样量已经非常小了 288:100。我觉得可能是 io 的问题
    zzcchh
        22
    zzcchh  
    OP
       2017-05-22 22:39:10 +08:00 via Android
    @zhidian 请问具体是哪个函数呢?
    bookit
        23
    bookit  
       2017-05-22 23:01:40 +08:00
    把事情分解开来做

    比如一段视频,2000 帧,提取出 100 帧出来,把这个时间算一下,花了多长时间
    然后分析其中 1 帧,看多长时间,

    这样来找出瓶颈在哪里,

    如果 cpu 利用率不高,可以开 50 个进程,同时分析 50 帧嘛
    Hzzone
        24
    Hzzone  
       2017-05-22 23:26:19 +08:00
    给自己一个入 1080 的理由
    ironstars
        25
    ironstars  
       2017-05-22 23:58:07 +08:00
    首先,和 GPU 没关系,上 1080 也没用,不单独写针对 GPU 的特定版本是在 CPU 上跑的;
    其次,换 GO 和 RUST,也要 OpenCV 支持,现在只支持 python、Java、C 和 C++;
    最后没有代码的话,猜测是 IO 跟不上或者后面一直在等前面处理完?
    建议一次读入比如 10 张图像,开 10 个线程并行处理。语言换 C++也行,速度会快一点。
    zzcchh
        26
    zzcchh  
    OP
       2017-05-23 07:18:43 +08:00 via Android
    @ironstars 谢谢,我试下
    Michaelssss
        27
    Michaelssss  
       2017-05-23 07:49:53 +08:00
    CPU 不高肯定是非 CPU 瓶颈,你得先找出瓶颈再分析。。。
    zhuangzhuang1988
        28
    zhuangzhuang1988  
       2017-05-23 09:32:07 +08:00
    上 tbb 直接让你的 cpu 100%
    Justkkk
        29
    Justkkk  
       2017-05-23 10:53:17 +08:00
    放代码出来看看。。如果处理是可并行的,可以考虑多线程,or 用 gpu 来加速,但做这些可能都还是用 C++来做方便些
    zhidian
        30
    zhidian  
       2017-05-23 12:33:59 +08:00
    There are at least 5 types of tracker algorithms that can be used:

    - MIL
    - BOOSTING
    - MEDIANFLOW
    - TLD
    - KCF

    [OpenCV: Introduction to OpenCV Tracker]( http://docs.opencv.org/3.1.0/d2/d0a/tutorial_introduction_to_tracker.html )
    Trim21
        31
    Trim21  
       2017-05-24 08:01:17 +08:00 via Android
    多线程换多进程。。
    itfanr
        32
    itfanr  
       2017-05-24 12:52:00 +08:00 via Android
    @zzcchh 加时延统计 慢慢分析
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2707 人在线   最高记录 6679     nbsp; Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 182ms UTC 15:00 PVG 23:00 LAX 07:00 JFK 10:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86