Вопрос или проблема
У меня есть ПК для разработки на Windows 10 (WinPC), подключенный напрямую к Raspberry Pi 4 B (RPi) через Ethernet LAN. У WinPC есть доступ в Интернет через WLAN USB-адаптер, в то время как у RPi его нет. К RPi подключена камера Logitech.
Аппаратная конфигурация:
Используя Visual Studio Code, я успешно подключаюсь к RPi по SSH и запускаю простые скрипты на Python, такие как программа "Hello World"
.
Однако я сталкиваюсь с проблемой при запуске скрипта на Python (cameraTest.py
), который использует пакет cv2
для открытия живого изображения с камеры. Скрипт выглядит следующим образом:
import cv2
cam = cv2.VideoCapture(0)
cv2.namedWindow("test")
while True:
ret, frame = cam.read()
cv2.imshow("test", frame)
k = cv2.waitKey(1)
if k%256 == 27:
print("Escape hit, closing...")
break
cam.release()
cv2.destroyAllWindows()
Поведение:
Когда я запускаю скрипт на RPi удаленно через MobaXterm с моего WinPC, окно живого изображения камеры открывается без каких-либо проблем.
Когда я пытаюсь запустить тот же скрипт с помощью Visual Studio Code через Remote-SSH, окно живого изображения не открывается, и я получаю следующее сообщение об ошибке:
qt.qpa.xcb: не удалось подключиться к дисплею
qt.qpa.plugin: Не удалось загрузить плагин платформы Qt "xcb" в "/home/master/Desktop/ObjectDetection/.venv/lib/python3.11/site-packages/cv2/qt/plugins", хотя он был найден.
Это приложение не удалось запустить, так как ни один плагин платформы Qt не может быть инициализирован. Переустановка приложения может исправить эту проблему.
Доступные плагины платформы: xcb.
Вопрос:
Что может быть причиной этой проблемы при использовании функции Remote-SSH в Visual Studio Code, и как я могу решить ее, чтобы успешно отобразить живое изображение с камеры?
Редактирование (теперь работает в Visual Studio Code!):
- запустите MobaXterm и SSH (с включенным X11-Forwarding) на RPi
- выполните команду
export DISPLAY=:10
- затем выполните
python cameraTest.py
Ответ или решение
Описание проблемы
Вы сталкиваетесь с проблемой запуска окна живого просмотра камеры с использованием OpenCV на Raspberry Pi (RPi) через Remote-SSH в Visual Studio Code (VS Code). Вы успешно выполните свою программу Python с использованием MobaXterm, но при запуске из VS Code возникает ошибка, связанная с платформенным плагином Qt.
Причины проблемы
Ошибка, с которой вы столкнулись, указывает на то, что ваше приложение пытается использовать графический интерфейс, но не может подключиться к дисплею. Это связано с тем, что VS Code по умолчанию не устанавливает переменную окружения DISPLAY
, необходимую для работы графических приложений через X11.
Анализ сообщения об ошибке
- qt.qpa.xcb: could not connect to display – Это означает, что приложение не может подключиться к вашему X-серверу, который обеспечивает графический вывод.
- Could not load the Qt platform plugin "xcb" – Хотя плагин
xcb
был найден в системе, он не может инициализироваться, что подтверждает отсутствие доступа к дисплею.
Решение проблемы
Чтобы исправить ошибку и получить доступ к живому просмотру камеры с использованием OpenCV в VS Code, вы можете следовать следующему процессу:
-
Откройте MobaXterm и выполните SSH-подключение к Raspberry Pi с включенной переадресацией X11. Это важно, так как MobaXterm уже будет обрабатывать X-сервер.
-
Задайте переменную окружения
DISPLAY
. Это необходимо для того, чтобы приложения знали, на какой дисплей выводить графику. Введите в терминале:export DISPLAY=:10
Значение
:10
может меняться в зависимости от вашего сеанса, так что убедитесь, что используете правильное значение. МобаXterm автоматически назначает дисплей для вашего X-сервера. -
Запустите скрипт с вашей программой:
python cameraTest.py
Если всё сделано правильно, окно живого просмотра должно открыться без ошибок.
Дополнительные советы
- Проверьте версии: Убедитесь, что используете совместимые версии Python и OpenCV. Если необходимо, обновите пакеты до последних стабильных версий.
- Кэш плагинов: Если ошибки все еще возникают, удалите кэш плагинов Qt, так как иногда это может помочь. Например, попробуйте удалить содержимое папки
~/.cache
или используйте команды для сброса кэша.
Заключение
Следуя этим шагам, вы сможете успешно запускать и отображать живое изображение с камеры на Raspberry Pi через VS Code. Это решение касается настройки подключения к графическому интерфейсу в удаленной среде и может быть применено к другим приложениям, требующим отображения графики. Надеюсь, это поможет вам в работе с OpenCV на Raspberry Pi!