Я заметил кое-что очень странное, пробуя детектор движения для 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()
Однако, если раскомментировать только одну строку - import cv2, этот скрипт перейдет к использованию ЦП на 300% !!
Что не так с OpenCV и почему я не могу даже начать использовать его для захвата изображений с USB-камеры без использования связки процессора и разряда батареи?
gdb
(gdb -p pid_of_it
) и проверить все состояния потоков (info threads
,thread 1
,backtrace
,thread 2
,backtrace
и т. Д.). Я думаю, что это может быть из каких-то параллельных потоков, готовых к работе и опросу в очереди работ (например, в активном режиме OpenMP или TBB). Пожалуйста, также опубликуйте результат командыenv
(здесь могут быть переменные, связанные с OMP, CV или TBB). (Перекрестная запись Тайлера: raspberrypi.stackexchange.com/questions/63021). Какая у вас версия opencv (и корневой образ), как была скомпилирована cv lib и что такоеldd .../libopencv.so
? - person osgx   schedule 14.03.2017