• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

(Python)从零开始,简单快速学机器仿人视觉Opencv—第八节:程序性能检测及优化

人工智能 Eragonl 2228次浏览 0个评论

事前准备:

  使用工具Python3.5 使用包cv2,numpy,time,profile  

涉及函数:

  cv2.getTickCount,cv2.getTickFrequency  

任务1 使用OpenCV检测程序效率

  cv2.getTickCount函数返回从参考点到这个函数被执行的时钟数。在一个函数执行前后都调用它,可以得到这个函数的执行时间。   cv2.getTickFrequency返回时钟频率,或者说每秒钟的时钟数   例,窗口大小不同(5,7,9)的核函数来做中值滤波,查看一个函数运行了多少秒  

import cv2
import numpy as np

img1 = cv2.imread('45.jpg')

e1 = cv2.getTickCount()
for i in range(5,49,2):
    img1 = cv2.medianBlur(img1,i)
e2 = cv2.getTickCount()
time = (e2-e1)/cv2.getTickFrequency()
print(time)

  注:python中time模块也可以实现,调用的函数是time.time()  

任务2 OpenCV中的默认优化

  cv2.useOptimized()来查看优化是否被开启,cv2.setUesOptimized()来开启优化。  

import cv2 
import numpy as np

# check if optimization is enabled 
In [5]: cv2.useOptimized()
Out[5]: True

In [6]: %timeit res = cv2.medianBlur(img,49) 
10 loops, best of 3: 34.9 ms per loop

# Disable it 

In [7]: cv2.setUseOptimized(False)

In [8]: cv2.useOptimized() 
Out[8]: False

In [9]: %timeit res = cv2.medianBlur(img,49)
10 loops, best of 3: 64.1 ms per loop

 

任务3 在IPython中检测程序效率

  有时你比两个相似操作的效率时,你可以使用 IPython 为你提供的法命令%time。他会代码好几次从而得到一个准确的时间它也可以用来测试代码的。   例如你知下同一个数学算用哪种式的代码会执行得更快吗?   x = 5; y = x∗∗2 x = 5; y = x∗x x = np.uint([5]); y = x∗x y = np.squre(x)   我们可以在 IPython 的 Shell 中使用法命令找到答案。  

import cv2
import numpy as np

In [10]: x =5

In [11]: %timeit y=x**2 
10000000 loops, best of 3: 73 ns per loop

In [12]: %timeit y=x*x 
10000000 loops, best of 3: 58.3 ns per loop

In [15]: z = np.uint8([5])

In [17]: %timeit y=z*z 
1000000 loops, best of 3: 1.25 us per loop

In [19]: %timeit y=np.square(z)
1000000 loops, best of 3: 1.16 us per loop

  竟然是第一种写法它居然比 Nump 快了 20 倍。如果考到数组构建的 能到 100 倍的差。   注意:Python 的标算比 Nump 的标算快。对于仅包含一两个 元素的操作 Python 标比 Numpy 的数组快。但是当数组稍微大一点时 Numpy 就会胜出了。  

任务4 效率优化技术

  有些技术和编程方法可以我们大的发挥 Python 和 Numpy 的威力。 我们仅仅提一下相关的你可以接查找更多细信息。我们 的的一点是先用简单的方式实现你的算法结果正确当结 果正确后再使用上的提到的方法找到程序的瓶来优化它。   1.尽免使用循环尤其双层三层循环它们天生就是常慢的。 2.算法中尽量使用向操作因为 Numpy 和 OpenCV 对向操作 了优化。 3.利用缓存一致性。 4.没有必的就不复制数组。使用图来代替复制。数组复制是常浪源的。就算了上优化如果你的程序是很慢或者大的不可免的 你你应尝使用其他的包比如 Cython来加你的程序。  

总结

  (本系列每周不定期更新,谢谢大家支持!)


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明(Python)从零开始,简单快速学机器仿人视觉Opencv—第八节:程序性能检测及优化
喜欢 (0)

您必须 登录 才能发表评论!

加载中……