Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does just importing OpenCV cause massive CPU usage?

I noticed something very odd in trying a motion detector for Raspberry Pi:

Removing the camera logging from the script, makes it use almost 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()

However, uncommenting just one line - the import cv2, makes this script go to 300% CPU Usage!!

What is wrong with OpenCV and why can't I even start to use it to grab usb camera images without it using a bunch of cpu, and wearing down the battery?

like image 518
NoBugs Avatar asked Nov 06 '16 04:11

NoBugs


1 Answers

Hmmmm, if I am not mistaken opencv needs numpy right? Could you try the following:

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

choose the libatlas option

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

choose the libatlas option

$ sudo aptitude purge libopenblas-{base,dev}

Source

like image 196
Giannis Spiliopoulos Avatar answered Nov 07 '22 11:11

Giannis Spiliopoulos