Вопрос или проблема
Я только что установил Ubuntu-20.04 на WSL2. И я установил среду miniconda с python 3.7, а затем установил opencv-python с помощью “conda install opencv”. Но когда я пытаюсь выполнить самое простое cv2.imshow, он выдает следующую ошибку:
cv2.error: OpenCV(3.4.2) /tmp/build/80754af9/opencv-suite_1535558553474/work/modules/highgui/src/window.cpp:632: ошибка: (-2:Неуточненная ошибка) Функция не реализована. Пересоберите библиотеку с поддержкой Windows, GTK+ 2.x или Carbon. Если вы находитесь на Ubuntu или Debian, установите libgtk2.0-dev и pkg-config, затем повторно запустите cmake или скрипт конфигурации в функции ‘cvShowImage’
Кстати, я могу показать окно графика с помощью matplotlib.pyplot после установки VcXsrv и экспорта DISPLAY=host_ip_in_wsl2:1.1. И я также заставил свою видеокарту работать после установки обновления Windows 10 ноября 2021 года, драйвера CUDA для WSL2 и набора инструментов CUDA 11.0. Я могу нормально запускать Tensorflow 2.4.1 с GPU. Я могу компилировать darknet с GPU и использовать его для YOLO v1.
Я погуглил немного. Говорят, что удаление opencv и повторная установка из канала menpo могут помочь. Но этот пост 5 лет назад и не для WSL.
Я также видел несколько постов, демонстрирующих утомительную процедуру компиляции opencv-python из исходников.
Итак, как использовать opencv-python на Ubuntu-20.04 в WSL2? Предпочтительны простые подходы, такие как “conda install …” или “pip install …”. Компиляция из исходников также приемлема.
Я решил эту проблему, установив opencv-python с помощью pip.
$ pip install opencv-python
Но я не понимаю, почему pip работает, когда conda install opencv
не срабатывает. Если кто-то знает подробности, не могли бы вы дать мне подсказку?
Ответ или решение
Чтобы использовать библиотеку OpenCV на Ubuntu 20.04 в WSL2, важно учитывать несколько нюансов, связанных с установкой и конфигурацией среды. Ниже представлена подробная инструкция.
Установка OpenCV на WSL2 Ubuntu 20.04
-
Предварительные требования:
Убедитесь, что ваш WSL2 обновлен до последней версии. Запустите Ubuntu и выполните следующие команды для установки необходимых зависимостей:sudo apt update sudo apt install -y build-essential cmake libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt install -y libjpeg-dev libpng-dev libtiff-dev sudo apt install -y libatlas-base-dev gfortran
Эти библиотеки необходимы для сборки и работы OpenCV с поддержкой графического интерфейса.
-
Создание и активация виртуальной среды:
Используйтеconda
для создания новой среды с Python 3.7, если вы еще этого не сделали:conda create -n opencv-env python=3.7 conda activate opencv-env
-
Установка OpenCV:
Как вы уже заметили, командаconda install opencv
может не сработать из-за отсутствия необходимых библиотек для GUI. Вместо этого, вы можете установить OpenCV черезpip
:pip install opencv-python pip install opencv-python-headless
Пакет
opencv-python
включает в себя сборку OpenCV, которая может не содержать поддержку GUI, тогда какopencv-python-headless
позволяет избежать проблем с GUI, если вы используете командную строку или фоновые процессы. -
Настройка дисплея:
Убедитесь, что у вас установлена и работает программа X-сервера, такая как VcXsrv. Запустите VcXsrv и настройте его для работы с WSL. После этого установите переменную окруженияDISPLAY
:export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
Это позволяет вашим приложениям, использующим OpenCV, отображать графические окна на вашем рабочем столе Windows.
-
Проверка работоспособности:
Напишите простой скрипт для проверки работы OpenCV:import cv2 import numpy as np # Создаем черное изображение img = np.zeros((512, 512, 3), np.uint8) cv2.putText(img, 'Hello, OpenCV!', (100, 250), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2) cv2.imshow('image', img) cv2.waitKey(0) cv2.destroyAllWindows()
Запустите скрипт после активации среды с OpenCV. Если все настроено правильно, должен открыться графический интерфейс с вашим изображением.
Почему pip install
сработал, а conda install
— нет?
-
Разные источники:
conda
иpip
используют разные репозитории и могут устанавливать разные версии и сборки библиотек. Установка черезpip
может предоставить более актуальную или совместимую сборку OpenCV с вашими текущими библиотеками и ОС. -
Конфликт зависимостей:
conda
может не установить все необходимые зависимости, которые требуются для поддержки GUI. Пакеты, установленные черезpip
, могут иметь другие зависимости, которые включают поддержку GUI, такие как GTK.
Заключение
Использование OpenCV в WSL2 не всегда обходится без сложностей, однако соблюдение вышеизложенных рекомендаций позволит вам успешно интегрировать эту мощную библиотеку в ваш проект. Переход на установку через pip
является наиболее простым и эффективным способом избежать проблем, связанных с графическим выводом.