我在为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,并且耗尽电池?
答案 0 :(得分:10)
$ 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}
答案 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使用率通过屋顶。这是一种告诉您有资格使此修复工作的方式。