我注意到我使用OpenCV的Python脚本只使用并最大化了我的一个cpu核心。我想充分利用我的cpu的潜力,而不仅仅是它的四分之一。随着我的研究,我发现OpenCV默认情况下只使用1个内核,并且为了启用多线程,我只需在编译库时启用OpenMP(WITH_OPENMP=ON
)。所以这就是我所做的,但是当运行我的简单脚本时,我发现它仍然只使用一个内核,极大地限制了我的应用程序的性能。在
我还需要做些什么(也许修改我的代码)来启用我的Raspberry Pi的所有四个核心吗?在
如果没有,可能是安装过程出了问题?我第一次安装OpenCV,OpenMP没有启用。然后在用OpenMP重新编译OpenCV之后,我所做的就是sudo make install
和{
任何洞察力都值得赞赏!!在
干杯
编辑:
我的脚本的目标是从网络摄像头捕捉帧,同时将它们写入SD卡。在
import numpy as np
import cv2
import time
CV_CAP_PROP_FPS = 5 #https://github.com/Itseez/opencv/blob/e3ae36dcb3c1d523802f8642e5c3984db43637c4/modules/python/src2/defs
startTime = time.time()
cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
out = cv2.VideoWriter('output.div', fourcc, cap.get(CV_CAP_PROP_FPS), (640, 480))
nbOfFrames = 1
try:
while(cap.isOpened()):
ret, frame = cap.read()
if ret == True:
out.write(frame)
print(time.time() - startTime)
print(nbOfFrames)
nbOfFrames += 1
except keyboardInterrupt:
cap.release()
out.release()
请注意,对于这两点我可能都错了,因为在我的问题的评论部分中,@Jason能够在所有四个核心上运行我的脚本(甚至没有使用TBB或OpenMP进行编译,这很奇怪)。在
因此,目前为止,我发现使用所有四个核心的唯一解决方案是手动执行代码线程化。如果我找到了一个自动解决方案(即在OpenCV内部实现的解决方案),我将更新这个答案。在
如果您对使用TBB构建OpenCV感兴趣,可以这样做:
我在为OpenCV3.0使用TBB编译时遇到一个错误,但是这个GitHub ticket中有一个很好的解决方案。享受吧!在
相关问题 更多 >
编程相关推荐