zauważyłem coś bardzo dziwny próbując detektor ruchu dla Raspberry Pi:Dlaczego właśnie importowanie OpenCV powoduje ogromne wykorzystanie procesora?
Zdejmowanie rejestrowanie kamery ze skryptu, czyni go używać prawie 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()
Jednak odkomentowanie tylko jedną linię - import cv2 powoduje, że skrypt ten przechodzi do 300% użycia procesora !!
Co jest nie tak z OpenCV i dlaczego nie mogę nawet zacząć używać go do robienia zdjęć z kamer USB bez użycia pęczka procesora i wyczerpania baterii?
Zauważam dokładnie ten sam problem na moim Raspberry Pi3. Próbowałem zainstalować OpenCV3.2-dev, korzystając z dokładnych informacji wymienionych na blogu Pyimagesearch, ale po prostu zaimportowanie biblioteki sprawiło, że mam 75% CPU. Próba przechwycenia ramki z mojej kamery USB powoduje, że program się nie przejmuje. Korzystanie z najnowszych Raspbian (Pixel) i python 3.4. –
Czy możesz dołączyć do swojej aplikacji za pomocą 'gdb' (' gdb -p pid_of_it') i sprawdzić wszystkie stany wątków ('info threads',' thread 1', 'backtrace',' thread 2', 'backtrace' i tak dalej).Myślę, że może to być coś w rodzaju równoległych wątków, gotowych do pracy i odpytywania w trybie pracy (jak aktywny tryb OpenMP lub TBB). Proszę również opublikować wynik polecenia 'env' (tutaj mogą występować zmienne związane z OMP lub CV lub TBB). (Cross post przez Tyler: http://raspberrypi.stackexchange.com/questions/63021). Jaka jest twoja wersja opencv (i obrazu głównego), jak skompilowano bibliotekę cv i czym jest 'ldd .../libopencv.so'? – osgx