已编译OpenCV并启用OpenMP,但应用程序仍在上运行

2024-10-01 13:39:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我注意到我使用OpenCVPython脚本只使用并最大化了我的一个cpu核心。我想充分利用我的cpu的潜力,而不仅仅是它的四分之一。随着我的研究,我发现OpenCV默认情况下只使用1个内核,并且为了启用多线程,我只需在编译库时启用OpenMPWITH_OPENMP=ON)。所以这就是我所做的,但是当运行我的简单脚本时,我发现它仍然只使用一个内核,极大地限制了我的应用程序的性能。在

我还需要做些什么(也许修改我的代码)来启用我的Raspberry Pi的所有四个核心吗?在

如果没有,可能是安装过程出了问题?我第一次安装OpenCVOpenMP没有启用。然后在用OpenMP重新编译OpenCV之后,我所做的就是sudo make install和{}。我没有卸载以前的OpenCV,我猜想用OpenMP安装新的OpenCV会覆盖它。在

任何洞察力都值得赞赏!!在

干杯

编辑:

我的脚本的目标是从网络摄像头捕捉帧,同时将它们写入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()

Tags: import脚本核心timecpuoutcv2内核
1条回答
网友
1楼 · 发布于 2024-10-01 13:39:11

请注意,对于这两点我可能都错了,因为在我的问题的评论部分中,@Jason能够在所有四个核心上运行我的脚本(甚至没有使用TBB或OpenMP进行编译,这很奇怪)。在

因此,目前为止,我发现使用所有四个核心的唯一解决方案是手动执行代码线程化。如果我找到了一个自动解决方案(即在OpenCV内部实现的解决方案),我将更新这个答案。在

如果您对使用TBB构建OpenCV感兴趣,可以这样做:

$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_C_EXAMPLES=ON \
    -D BUILD_TBB=ON \
    -D WITH_TBB=ON \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
    -D BUILD_EXAMPLES=ON ..

我在为OpenCV3.0使用TBB编译时遇到一个错误,但是这个GitHub ticket中有一个很好的解决方案。享受吧!在

相关问题 更多 >