为什么只导入OpenCV导致大量CPU使用?

时间:2016-11-06 04:27:21

标签: python opencv raspberry-pi3

我在为Raspberry Pi尝试运动检测器时发现了一些非常奇怪的事情:

从脚本中删除摄像机记录,使其几乎使用0 CPU:

#from gpiozero import MotionSensor
#import cv2
from datetime import datetime
from time import sleep
#camera = cv2.VideoCapture(0)
#pir = MotionSensor(4, queue_len=2, sample_rate=2, threshold=0.5)
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
PIR_PIN = 4
GPIO.setup(PIR_PIN, GPIO.IN)
while True:
    sleep(1)
    if GPIO.input(PIR_PIN):
        print( "detected!")
        filename = 'motionpics/' + datetime.now().strftime("%Y-%m-%d_%H.%M.%S.jpg")
        #ret, frame = camera.read()
        #cv2.imwrite(filename, frame)
        #camera.release()
        #pir.wait_for_no_motion()

但是,取消注释只需一行 - 导入cv2 ,会使此脚本达到300%CPU使用率!!

OpenCV出了什么问题,为什么我不能开始使用它来抓取usb相机图像而不使用一堆cpu,并且耗尽电池?

2 个答案:

答案 0 :(得分:10)

嗯,如果我没弄错,opencv需要numpy对吗?你可以尝试以下方法:

$ sudo apt-get install libatlas3-base
$ sudo update-alternatives --config libblas.so.3

选择libatlas选项

$ sudo update-alternatives --config liblapack.so.3

选择libatlas选项

$ sudo aptitude purge libopenblas-{base,dev}

Source

答案 1 :(得分:5)

我可以确认Giannis的回答是正确的。我刚刚执行了他的答案中列出的步骤,并且能够在没有高CPU使用率的情况下在python 3.4中导入cv2。所以至少有那个。我能够抓住一个框架并显示一个图像。这适用于我的用例。

但我确实注意到,在上述步骤中,卸载了libtiff5,wolfram和其他几个库。

如果您需要这些库和应用程序(我目前没有完整列表),我会建议暂时不执行

Sudo apt-get dist-upgrade

Sudo rpi-update

此时,仍留在raspbian jessie。这只是出于个人经验。

编辑:

另外我想补充一点,Giannis是对的,这似乎是一个numpy问题,并且很容易通过简单的测试:

继续使用Raspberry Pi3桌面 - >开始菜单 - >代码 - > Python 3;键入“import numpy”(不带引号)。

你应该看到你的cpu使用率通过屋顶。这是一种告诉您有资格使此修复工作的方式。