Проблема с запуском и пакетами OpenCV python. Debian
Установил основные библиотеки:
sudo apt-get install python3-opencv
pip3 install numpy opencv-python
Раньше всё работало, но с переустановкой ОС (Debian) начала вылазить ошибка:
qt.qpa.xcb: could not connect to display
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "/usr/local/lib/python3.9/dist-packages/cv2/qt/plugins" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
Код использовал тестовый (чтобы просто проверить работу):
import cv2
cap = cv2.VideoCapture(1)
while True:
ret, img = cap.read()
cv2.imshow("camera", img)
if cv2.waitKey(10) == 27:
break
cap.release()
cv2.destroyAllWindows()
Ответы (1 шт):
Давайте попробуем разобраться. Есть у меня мысль, что проблема возникает из-за того, что OpenCV не может использовать Qt. Поставьте зависимости для поддержки Qt и X11:
sudo apt-get update
sudo apt-get install libxcb-xinerama0
sudo apt-get install libqt5x11extras5
После установки попробуйте запустить свой код. Если проблема не ушла, едем дальше:
sudo apt-get install libxkbcommon-x11-0
sudo apt-get install libxcb-xinerama0-dev
Потом если что, попробуйте переустановить OpenCV:
pip3 uninstall opencv-python
pip3 install opencv-python
Если все решения не помогают, попробуйте поставить другую версию OpenCV:
pip3 install opencv-python==4.5.1.48
UPDATE
Проверьте переменную окружения DISPLAY с помощью команды
echo $DISPLAY
Обычно она должна иметь значение :0 или :1.
Если у вас переменная DISPLAY не установлена, выполните следующую команду для установки значения по умолчанию:
export DISPLAY=:0
UPDATE 2
Такая ошибка может возникнуть при подключении через SSH, если у системы отключен монитор или если сессия SSH не настроена на передачу графического интерфейса. Что можно сделать:
Ставим на локальном компьютере X сервер. Если у вас Windows, можно воспользоваться
VcXsrvилиXming. Если вы используете macOS, можно установитьXQuartz.Запускаете X сервер.
Подключитесь к серваку с помощью SSH с опцией
-Xили-Y, чтобы включить проброс X11:ssh -X username@remote_host
Опция -X включает проброс X11 с проверкой доступа, а опция -Y включает проброс с расширенными возможностями, не уверен, что оно вам надо, но всё же.
- Выше уже писал, после подключения через SSH с опцией
-Xили-Y, убедитесь, что переменная окруженияDISPLAYустановлена на удаленной машине. В этот раз, она может выдать что-то типа:localhost:1
Ну и теперь, когда вы подключены через SSH с включенным X11, ваш код должен работать без проблем, и графический интерфейс будет отображаться на вашем локальном компьютере.