OpenCV собирает средства, чтобы сделать библиотеку бесплатной для всех, и для этого нам нужна поддержка всего сообщества. Сделайте пожертвование OpenCV на Github, чтобы выразить свою поддержку.
Предварительно созданные пакеты OpenCV только для ЦП для Python.
Если вы хотите скомпилировать привязки из исходного кода, чтобы включить дополнительные модули, такие как CUDA, проверьте раздел ручной сборки.
Если у вас установлена предыдущая/другая версия OpenCV, установленная вручную (= не установленная через pip
) (например, модуль cv2 в корне пакетов сайта Python), удалите ее перед установкой, чтобы избежать конфликтов.
Убедитесь, что ваша версия pip
актуальна (19.3 — минимальная поддерживаемая версия): pip install --upgrade pip
. Проверьте версию с помощью pip -V
. Например, дистрибутивы Linux обычно поставляются с очень старыми версиями pip
, которые вызывают множество неожиданных проблем, особенно с форматом manylinux
.
Выберите пакет, подходящий для вашей среды:
Существует четыре разных пакета (см. варианты 1, 2, 3 и 4 ниже), и вам следует ВЫБРАТЬ ТОЛЬКО ОДИН ИЗ НИХ . Не устанавливайте несколько разных пакетов в одной среде. Архитектуры плагинов нет: все пакеты используют одно и то же пространство имен ( cv2
). Если вы установили несколько разных пакетов в одной среде, удалите их все с помощью pip uninstall
и переустановите только один пакет.
а. Пакеты для стандартных сред рабочего стола (Windows, macOS, практически любой дистрибутив GNU/Linux)
pip install opencv-python
pip install opencv-contrib-python
(проверьте список дополнительных/дополнительных модулей в документации OpenCV)б. Пакеты для серверных (безголовых) сред (таких как Docker, облачные среды и т. д.), без зависимостей от библиотек графического интерфейса.
Эти пакеты меньше, чем два других пакета выше, поскольку они не содержат каких-либо функций графического интерфейса (не скомпилированы с Qt/другими компонентами графического интерфейса). Это означает, что пакеты избегают тяжелой цепочки зависимостей от библиотек X11, и в результате вы будете иметь, например, меньшие по размеру образы Docker. Вам следует всегда использовать эти пакеты, если вы не используете cv2.imshow
et al. или вы используете какой-либо другой пакет (например, PyQt), отличный от OpenCV, для создания графического интерфейса.
pip install opencv-python-headless
pip install opencv-contrib-python-headless
(проверьте список дополнительных/дополнительных модулей в документации OpenCV)Импортируйте пакет:
import cv2
Все пакеты содержат каскадные файлы Haar. cv2.data.haarcascades
можно использовать как ярлык для папки данных. Например:
cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
Прочтите документацию OpenCV.
Прежде чем открывать новую проблему, прочтите FAQ ниже и просмотрите другие проблемы, которые уже открыты.
Вопрос: Нужно ли мне отдельно устанавливать OpenCV?
О: Нет, пакеты представляют собой специальные двоичные пакеты Wheel и они уже содержат статически созданные двоичные файлы OpenCV.
Вопрос: Установка Pip завершается с ошибкой ModuleNotFoundError: No module named 'skbuild'
?
Начиная с версии opencv-python
4.3.0.*, колеса manylinux1
были заменены колесами manylinux2014
. Если ваш пакет слишком старый, он попытается использовать новый дистрибутив исходного кода, представленный в версии 4.3.0.38, для ручной сборки OpenCV, поскольку он не знает, как установить manylinux2014
. Однако сборка исходного кода также завершится неудачей из-за слишком старого pip
, поскольку он не понимает зависимости сборки в pyproject.toml
. Чтобы использовать новые готовые колеса manylinux2014
(или собирать их из исходного кода), ваша версия pip
должна быть >= 19.3. Пожалуйста, обновите pip
с помощью pip install --upgrade pip
.
Вопрос: Не удалось выполнить импорт в Windows: ImportError: DLL load failed: The specified module could not be found.
?
О: Если при импорте в Windows произошел сбой, убедитесь, что у вас установлен распространяемый компонент Visual C++ 2015. Если вы используете более старую версию Windows, чем Windows 10, и последние обновления системы не установлены, также может потребоваться Universal C Runtime.
Редакции Windows N и KN не включают пакет Media Feature Pack, необходимый для OpenCV. Если вы используете версию Windows N или KN, установите также пакет компонентов Windows Media.
Если у вас Windows Server 2012+, возможно, медиа-библиотеки DLL также отсутствуют; пожалуйста, установите функцию под названием «Media Foundation» в диспетчере серверов. Остерегайтесь, в некоторых сообщениях рекомендуется установить «Windows Server Essentials Media Pack», но для этого требуется роль «Windows Server Essentials Experience», и эта роль сильно повлияет на конфигурацию вашего Windows Server (за счет обеспечения интеграции с активными каталогами и т. д.); поэтому просто установка «Media Foundation» должна быть более безопасным выбором.
Если вышеперечисленное не помогло, проверьте, используете ли вы Anaconda. В старых версиях Anaconda есть ошибка, которая вызывает ошибку. Чтобы исправить ее вручную, см. эту проблему.
Если вы по-прежнему сталкиваетесь с ошибкой после проверки всех предыдущих решений, загрузите «Зависимости» и откройте файл cv2.pyd
(обычно он находится в C:UsersusernameAppDataLocalProgramsPythonPythonXXLibsite-packagescv2
) для устранения проблем с отсутствующими DLL.
Вопрос: У меня есть другие ошибки импорта?
О: Убедитесь, что вы удалили старые привязки OpenCV Python, установленные вручную (cv2.so или cv2.pyd в пакетах сайта).
Вопрос: Функция foo() или метод bar() возвращает неверный результат, выдает исключение или приводит к сбою интерпретатора. Что я должен делать?
О: Репозиторий содержит только скрипты сборки пакета OpenCV-Python, но не сам OpenCV. Привязки Python для OpenCV разрабатываются в официальном репозитории OpenCV, и это лучшее место для сообщения о проблемах. Также, пожалуйста, проверьте вики OpenCV и официальный форум OpenCV, прежде чем сообщать о новых ошибках.
Вопрос: Почему в пакеты не входят несвободные алгоритмы?
О: Несвободные алгоритмы, такие как SURF, не включены в эти пакеты, поскольку они запатентованы/несвободны и поэтому не могут распространяться как встроенные двоичные файлы. Обратите внимание, что SIFT включен в сборки из-за истечения срока действия патента, начиная с версий OpenCV 4.3.0 и 3.4.10. Дополнительную информацию смотрите в этом выпуске: #126.
Вопрос: Почему пакет и импорт отличаются (opencv-python и cv2)?
О: Пользователям легче понять opencv-python
чем cv2
, и это облегчает поиск пакета в поисковых системах. cv2
(старый интерфейс в старых версиях OpenCV назывался cv
) — это имя, которое разработчики OpenCV выбрали при создании генераторов привязок. Это имя сохраняется в качестве имени импорта, чтобы соответствовать различным типам руководств в Интернете. Изменение имени или поведения импорта также может сбить с толку опытных пользователей, привыкших к import cv2
.
Цель этого репозитория — предоставить средства для упаковки каждого нового выпуска OpenCV для наиболее часто используемых версий и платформ Python.
Проект структурирован как обычный пакет Python со стандартным файлом setup.py
. Процесс сборки для одной записи в матрицах сборки выглядит следующим образом (см., например, файл .github/workflows/build_wheels_linux.yml
):
В сборке Linux и MacOS: получите дополнительные зависимости C OpenCV, которые мы компилируем.
Репозиторий Checkout и подмодули
Найдите версию OpenCV из источников
Сборка OpenCV
Измените результат сборки OpenCV, добавьте наши собственные файлы и сгенерируйте колесо.
Колеса Linux и macOS трансформируются с помощью Auditwheel и перемещаются соответственно.
Установите сгенерированное колесо
Проверьте, может ли Python импортировать библиотеку, и выполните некоторые проверки работоспособности.
Используйте шпагат для загрузки сгенерированного колеса в PyPI (только в релизных сборках)
Шаги 1–4 выполняются с помощью pip wheel
.
Сборку можно настроить с помощью переменных среды. В дополнение к любым переменным, которые принимает сборка OpenCV, мы распознаем:
CI_BUILD
. Установите значение 1
чтобы эмулировать поведение сборки среды CI. Используется только в сборках CI для принудительного включения определенных флагов сборки в setup.py
. Не используйте это, если вы не знаете, что делаете.ENABLE_CONTRIB
и ENABLE_HEADLESS
. Установите значение 1
чтобы создать версию Contrib и/или Headless.ENABLE_JAVA
: установите значение 1
, чтобы включить сборку клиента Java. По умолчанию это отключено.CMAKE_ARGS
. Дополнительные аргументы для вызова CMake OpenCV. Вы можете использовать это для создания индивидуальной сборки.Дополнительную информацию о сборках вручную вне среды CI см. в следующем разделе.
Если какая-либо зависимость не включена в предварительно созданных колесах, вы также можете запустить сборку локально, чтобы создать собственное колесо.
git clone --recursive https://github.com/opencv/opencv-python.git
cd opencv-python
git
для проверки какой-либо другой версии OpenCV в подмодулях opencv
и opencv_contrib
.export CMAKE_ARGS="-DSOME_FLAG=ON -DSOME_OTHER_FLAG=OFF"
(в Windows вам необходимо установить переменные среды по-разному в зависимости от командной строки или PowerShell).ENABLE_CONTRIB
и ENABLE_HEADLESS
: т.е. export ENABLE_CONTRIB=1
, если вы хотите собрать opencv-contrib-python
pip wheel . --verbose
. ПРИМЕЧАНИЕ. Убедитесь, что у вас установлена последняя версия pip
. Команда pip wheel
заменяет старую команду python setup.py bdist_wheel
, которая не поддерживает pyproject.toml
.setup.py
, пакет Wheel будет помещен в папку dist
. Пакет готов, и вы можете делать с ним все, что пожелаете.manylinux
в качестве хостов для сборки, если необходима максимальная переносимость, и запустите auditwheel
для колеса после сборки.delocate
(то же самое, что и auditwheel
, но для macOS) для лучшей переносимости. Чтобы собрать opencv-python
в неоптимизированной отладочной сборке, вам нужно немного отойти от обычного процесса.
scikit-build
и numpy
через pip.python setup.py bdist_wheel --build-type=Debug
.dist/
с помощью pip install dist/wheelname.whl
.Если вы хотите, чтобы сборка выдавала все команды компилятора, то следующая комбинация флагов и переменных среды была протестирована для работы в Linux:
export CMAKE_ARGS='-DCMAKE_VERBOSE_MAKEFILE=ON'
export VERBOSE=1
python3 setup.py bdist_wheel --build-type=Debug
Дополнительную информацию см. в этом выпуске: #424.
Начиная с версии OpenCV 4.3.0, в PyPI также предоставляются дистрибутивы исходного кода. Это означает, что если ваша система несовместима ни с одним из колес PyPI, pip
попытается собрать OpenCV из исходников. Если вам нужна версия OpenCV, которая недоступна в PyPI в качестве исходного дистрибутива, вместо этого следуйте инструкциям по ручной сборке, приведенным выше.
Вы также можете заставить pip
собрать колеса из исходного дистрибутива. Несколько примеров:
pip install --no-binary opencv-python opencv-python
pip install --no-binary :all: opencv-python
Если вам нужны дополнительные модули или безголовая версия, просто измените имя пакета (шаг 4 в предыдущем разделе не требуется). Однако любые дополнительные флаги CMake можно предоставить через переменные среды, как описано в шаге 3 раздела ручной сборки. Если они не указаны, сценарии CMake OpenCV попытаются найти и включить любые подходящие зависимости. Безголовые дистрибутивы имеют жестко закодированные флаги CMake, которые отключают все возможные зависимости графического интерфейса.
На медленных системах, таких как Raspberry Pi, полная сборка может занять несколько часов. На 8-ядерном Ryzen 7 3700X сборка занимает около 6 минут.
Пакет Opencv-python (скрипты в этом репозитории) доступен по лицензии MIT.
Сам OpenCV доступен по лицензии Apache 2.
Лицензии сторонних пакетов находятся в LICENSE-3RD-PARTY.txt.
Все колеса поставляются с FFmpeg, лицензированным по лицензии LGPLv2.1.
Небезголовые диски Linux поставляются с Qt 5, лицензированным по лицензии LGPLv3.
Пакеты включают также другие двоичные файлы. Полный список лицензий можно найти в LICENSE-3RD-PARTY.txt.
Скрипт find_version.py
ищет информацию о версии в источниках OpenCV и добавляет к строке версии номер версии, специфичный для этого репозитория. Он сохраняет информацию о версии в файле version.py
под cv2
в дополнение к некоторым другим флагам.
Релиз создается и загружается в PyPI, когда новый тег помещается в главную ветку. Эти теги различают пакеты (в этом репозитории могут быть изменения, но версия OpenCV остается прежней) и их следует увеличивать последовательно. На практике номера версий выпуска выглядят так:
cv_major.cv_minor.cv_revision.package_revision
например 3.1.0.0
Основная ветка следует за выпусками основной ветки OpenCV. Ветка 3.4 следует за выпусками исправлений ошибок OpenCV 3.4.
Каждый коммит в главную ветку этого репозитория будет создан. Возможные артефакты сборки используют идентификаторы локальной версии:
cv_major.cv_minor.cv_revision+git_hash_of_this_repo
например 3.1.0+14a8d39
Эти артефакты не могут быть и не будут загружены в PyPI.
Колеса Linux созданы с использованием Manylinux2014. Эти колеса должны работать «из коробки» для большинства существующих дистрибутивов (которые используют стандартную библиотеку GNU C), поскольку они построены на основе старой версии glibc.
Образы manylinux2014
по умолчанию были расширены некоторыми зависимостями OpenCV. Дополнительную информацию см. в папке Docker.
Предварительно созданные колеса, совместимые с Python 3.x, предоставляются для официально поддерживаемых версий Python (не в EOL):
Начиная со сборок 4.2.0 и 3.4.9, среда сборки macOS Travis была обновлена до XCode 9.4. Это изменение фактически прекратило поддержку версий macOS старше 10.13.
Начиная со сборок 4.3.0 и 3.4.10, среда сборки Linux была обновлена с manylinux1
до manylinux2014
. Это прекратило поддержку старых дистрибутивов Linux.
Начиная с версии 4.7.0 среда сборки Mac OS GitHub Actions была обновлена до версии 11. Поддержка Mac OS 10.x прекращена. См. действия/runner-images#5583.
Начиная с версии 4.9.0 среда сборки Mac OS GitHub Actions была обновлена до версии 12. Поддержка Mac OS 10.x прекращена Brew и большинством используемых пакетов.