ang*_*yip 5 python macos opencv
我正在使用 Python 2.7.1 通过 python 在 MAC OSX BigSur 11.0.1 ( i9 intel ) 上运行 opencv。在我的 mac 上运行的最后一个稳定实现是 opencv-python 4.1.2.30 。自从更新 BigSur 以来,我注意到以下 opencv 函数的性能显着降低:
cv2.waitKey(1)
Run Code Online (Sandbox Code Playgroud)
这是我播放视频的整个脚本。注意:视频是以 130FPS 拍摄的。
import cv2
import sys
import time
video = "myvideo.mp4"
view_name = "my_video"
cv2.namedWindow(view_name)
cv2.moveWindow(view_name,250,150)
cap = cv2.VideoCapture(video)
tots = cap.get(cv2.CAP_PROP_FRAME_COUNT)
i = 0
cv2.createTrackbar('S',view_name, 0,int(tots)-1, lambda x:x)
cv2.setTrackbarPos('S',view_name,0)
status = 'pause'
previous_status = 'pause'
while True:
try:
if i==tots-1:
i=0
cap.set(cv2.CAP_PROP_POS_FRAMES, i)
#start = time.time()
ret, im = cap.read()
cv2.imshow(view_name, im)
status = { ord(' '):'play_pause_click',
ord('a'):'prev_frame', ord('A'):'prev_frame',
ord('d'):'next_frame', ord('D'):'next_frame',
-1: status,
27: 'exit'}[cv2.waitKey(1)]
#checkpointTwo = time.time()
#print(checkpointTwo - start)
if (status == 'play_pause_click' and previous_status == 'play_pause_click'):
status = 'pause'
previous_status = 'pause'
if (status == 'play_pause_click'):
status = 'play'
previous_status = 'play_pause_click'
if status == 'play':
i+=1
cv2.setTrackbarPos('S',view_name,i)
continue
if status == 'pause':
i = cv2.getTrackbarPos('S',view_name)
if status == 'exit':
break
if status=='prev_frame':
i-=1
cv2.setTrackbarPos('S',view_name,i)
status='pause'
if status=='next_frame':
i+=1
cv2.setTrackbarPos('S',view_name,i)
status='pause'
except KeyError:
print("Invalid Key was pressed")
cv2.destroyWindow(view_name)
Run Code Online (Sandbox Code Playgroud)
我单击机器上的空格键以开始自动逐帧播放视频。我记下经过的时间,我可以看到这些结果:
在第 90 个百分位数处,代码块的执行时间接近 150 毫秒。为了比较,如果我测量 cap.read() 和 cv2.imshow() 函数,我的执行时间 < 1 ms。这是一个 cdf 图:
虽然我在使用以前的 MAC OSX 版本时没有基准测试,但我可以直观地看出它的速度要慢得多。
我查看了 opencv-python文档页面,其中有以下引用:
用于 Python 的非官方预构建的仅限 CPU 的 OpenCV 包。
我开始怀疑这可能是问题所在,我应该为我的机器从头开始重新构建 opencv 包。但是,我不确定这是否会解决问题或如何从头开始执行此操作。我也完全有可能错误地使用了 opencv 函数。
我能做些什么来修复大的 150ms?
| 归档时间: |
|
| 查看次数: |
493 次 |
| 最近记录: |