Почему простой импорт OpenCV вызывает массовую загрузку ЦП?

Я заметил кое-что очень странное, пробуя детектор движения для 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-камеры без использования связки процессора и разряда батареи?


person NoBugs    schedule 06.11.2016    source источник
comment
Я заметил точно такую ​​же проблему на моем Raspberry Pi3. Я попытался установить OpenCV3.2-dev, используя точные данные, перечисленные в блоге Pyimagesearch, но простой импорт библиотеки загружает мой процессор на 75%. Попытка захватить кадр с моей USB-камеры приводит к тому, что программа не работает. Использование последних версий Raspbian (Pixel) и Python 3.4.   -  person    schedule 13.03.2017
comment
Можете ли вы присоединиться к своему приложению с помощью 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


Ответы (2)


Хммм, если я не ошибаюсь, 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}

Источник

person Giannis Spiliopoulos    schedule 18.03.2017
comment
Я даже не могу понять отношения между вопросом и этим ответом. Но я знаю, что это правильный ответ. Я так восхищен тобой! Пожалуйста, дайте несколько пояснений, чтобы сделать этот ответ более общим, спасибо! - person ToughMind; 12.09.2019

Могу подтвердить, что ответ Янниса правильный. Я только что выполнил шаги, перечисленные в его ответе, и могу импортировать cv2 в python 3.4 без высокой загрузки процессора. По крайней мере, так оно и есть. Я могу захватить рамку и отобразить изображение. Это работает для моего варианта использования.

Однако я заметил, что во время вышеупомянутых шагов были удалены libtiff5, wolfram и несколько других библиотек.

Если вам нужны эти библиотеки и приложения (на данный момент у меня нет полного списка), я бы рекомендовал временно НЕ выполнять

Sudo apt-get dist-upgrade

А также

Судо рпи-обновление

На этот раз и остаюсь на распбиане Джесси. Это просто из моего личного опыта.

РЕДАКТИРОВАТЬ:

Также я хотел бы добавить, что Яннис был прав, это, по-видимому, непростая проблема, и ее можно легко проверить, просто:

переход на рабочий стол Raspberry Pi3-> Меню Пуск-> Код-> Python 3; введите "import numpy" (без кавычек).

Вы должны увидеть, что использование вашего процессора зашкаливает. Это способ сказать, что вы имеете право на исправление.

person Community    schedule 19.03.2017
comment
Также я хотел бы добавить, что Яннис был прав, это, казалось бы, непростая проблема, и ее можно легко протестировать, просто: зайдя на рабочий стол Raspberry Pi3- ›Меню Пуск-› Код- ›Python 3; введите import numpy (без кавычек). Вы должны увидеть, что использование вашего процессора зашкаливает. Это способ сказать, что вы имеете право на исправление. - person ; 19.03.2017
comment
Вы можете отредактировать свой ответ, включив в него релевантную информацию из вашего комментария. - person Regular Jo; 19.03.2017
comment
Ой. Хорошая точка зрения. У меня больше не было представителя, поэтому он не позволял мне делать такие вещи, как редактирование / комментирование в нескольких местах. Сделано. - person ; 19.03.2017