OpenCV está recaudando fondos para mantener la biblioteca gratuita para todos y necesitamos el apoyo de toda la comunidad para hacerlo. Haga una donación a OpenCV en Github para mostrar su apoyo.
Paquetes OpenCV prediseñados solo para CPU para Python.
Consulte la sección de compilación manual si desea compilar los enlaces desde el código fuente para habilitar módulos adicionales como CUDA.
Si tiene instalada una versión anterior/otra instalada manualmente (= no instalada a través de pip
) de OpenCV (por ejemplo, el módulo cv2 en la raíz de los paquetes del sitio de Python), elimínela antes de la instalación para evitar conflictos.
Asegúrese de que su versión pip
esté actualizada (19.3 es la versión mínima admitida): pip install --upgrade pip
. Verifique la versión con pip -V
. Por ejemplo, las distribuciones de Linux suelen venir con versiones pip
muy antiguas que causan muchos problemas inesperados, especialmente con el formato manylinux
.
Seleccione el paquete correcto para su entorno:
Hay cuatro paquetes diferentes (consulte las opciones 1, 2, 3 y 4 a continuación) y debe SELECCIONAR SOLO UNO DE ELLOS . No instale varios paquetes diferentes en el mismo entorno. No existe una arquitectura de complementos: todos los paquetes usan el mismo espacio de nombres ( cv2
). Si instaló varios paquetes diferentes en el mismo entorno, desinstálelos todos con pip uninstall
y reinstale solo un paquete.
a. Paquetes para entornos de escritorio estándar (Windows, macOS, casi cualquier distribución GNU/Linux)
pip install opencv-python
pip install opencv-contrib-python
(consulte la lista de módulos contrib/extra en la documentación de OpenCV)b. Paquetes para entornos de servidor (sin cabeza) (como Docker, entornos de nube, etc.), sin dependencias de biblioteca GUI
Estos paquetes son más pequeños que los otros dos paquetes anteriores porque no contienen ninguna funcionalidad GUI (no están compilados con Qt u otros componentes GUI). Esto significa que los paquetes evitan una cadena de dependencia pesada con las bibliotecas X11 y, como resultado, tendrá, por ejemplo, imágenes Docker más pequeñas. Siempre debe utilizar estos paquetes si no utiliza cv2.imshow
et al. o está utilizando algún otro paquete (como PyQt) distinto de OpenCV para crear su GUI.
pip install opencv-python-headless
pip install opencv-contrib-python-headless
(consulte la lista de módulos contrib/extra en la documentación de OpenCV)Importar el paquete:
import cv2
Todos los paquetes contienen archivos en cascada Haar. cv2.data.haarcascades
se puede utilizar como acceso directo a la carpeta de datos. Por ejemplo:
cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
Leer la documentación de OpenCV
Antes de abrir un nuevo número, lea las preguntas frecuentes a continuación y eche un vistazo a los otros números que ya están abiertos.
P: ¿Necesito instalar también OpenCV por separado?
R: No, los paquetes son paquetes binarios de rueda especiales y ya contienen binarios OpenCV construidos estáticamente.
P: La instalación de Pip falla con ModuleNotFoundError: No module named 'skbuild'
?
Desde la versión 4.3.0.* opencv-python
, las ruedas manylinux1
fueron reemplazadas por ruedas manylinux2014
. Si su pip es demasiado antiguo, intentará utilizar la nueva distribución fuente introducida en 4.3.0.38 para compilar OpenCV manualmente porque no sabe cómo instalar manylinux2014
wheels. Sin embargo, la compilación del código fuente también fallará debido a que pip
es demasiado antiguo porque no comprende las dependencias de compilación en pyproject.toml
. Para usar las nuevas ruedas prediseñadas manylinux2014
(o para compilar desde el código fuente), su versión pip
debe ser >= 19.3. Actualice pip
con pip install --upgrade pip
.
P: La importación falla en Windows: ImportError: DLL load failed: The specified module could not be found.
?
R: Si la importación falla en Windows, asegúrese de tener instalado Visual C++ redistribuible 2015. Si está utilizando una versión de Windows anterior a Windows 10 y las últimas actualizaciones del sistema no están instaladas, es posible que también sea necesario Universal C Runtime.
Las ediciones Windows N y KN no incluyen el Media Feature Pack que requiere OpenCV. Si está utilizando la edición Windows N o KN, instale también Windows Media Feature Pack.
Si tiene Windows Server 2012+, es probable que también falten archivos DLL multimedia; instale la función llamada "Media Foundation" en el Administrador del servidor. Tenga cuidado, algunas publicaciones recomiendan instalar "Windows Server Essentials Media Pack", pero esta requiere la función "Experiencia de Windows Server Essentials", y esta función afectará profundamente su configuración de Windows Server (al imponer la integración del directorio activo, etc.); por lo que simplemente instalar "Media Foundation" debería ser una opción más segura.
Si lo anterior no ayuda, verifique si está utilizando Anaconda. Las versiones antiguas de Anaconda tienen un error que causa el error; consulte este problema para obtener una solución manual.
Si aún encuentra el error después de haber verificado todas las soluciones anteriores, descargue Dependencias y abra cv2.pyd
(ubicado generalmente en C:UsersusernameAppDataLocalProgramsPythonPythonXXLibsite-packagescv2
) con él para depurar problemas de DLL faltantes.
P: ¿Tengo otros errores de importación?
R: Asegúrese de haber eliminado las instalaciones manuales antiguas de los enlaces OpenCV Python (cv2.so o cv2.pyd en paquetes de sitio).
P: La función foo() o el método bar() devuelve un resultado incorrecto, genera una excepción o bloquea el intérprete. ¿Qué tengo que hacer?
R: El repositorio contiene solo scripts de compilación de paquetes OpenCV-Python, pero no OpenCV en sí. Los enlaces de Python para OpenCV se desarrollan en el repositorio oficial de OpenCV y es el mejor lugar para informar problemas. También consulte la wiki de OpenCV y el foro oficial de OpenCV antes de presentar nuevos errores.
P: ¿Por qué los paquetes no incluyen algoritmos no gratuitos?
R: Los algoritmos no libres como SURF no están incluidos en estos paquetes porque están patentados/no libres y, por lo tanto, no se pueden distribuir como archivos binarios integrados. Tenga en cuenta que SIFT está incluido en las compilaciones debido al vencimiento de la patente desde las versiones 4.3.0 y 3.4.10 de OpenCV. Consulte este número para obtener más información: #126
P: ¿Por qué el paquete y la importación son diferentes (opencv-python vs. cv2)?
R: Es más fácil para los usuarios entender opencv-python
que cv2
y hace que sea más fácil encontrar el paquete en los motores de búsqueda. cv2
(la interfaz antigua en versiones anteriores de OpenCV se denominaba cv
) es el nombre que eligieron los desarrolladores de OpenCV cuando crearon los generadores de enlaces. Este se mantiene como el nombre de importación para que sea coherente con los diferentes tipos de tutoriales que existen en Internet. Cambiar el nombre o el comportamiento de la importación también resultaría confuso para los usuarios experimentados que están acostumbrados a la import cv2
.
El objetivo de este repositorio es proporcionar medios para empaquetar cada nueva versión de OpenCV para las versiones y plataformas de Python más utilizadas.
El proyecto está estructurado como un paquete Python normal con un archivo setup.py
estándar. El proceso de compilación para una sola entrada en las matrices de compilación es el siguiente (consulte, por ejemplo, el archivo .github/workflows/build_wheels_linux.yml
):
En la compilación de Linux y MacOS: obtenga las dependencias C opcionales de OpenCV con las que compilamos
Repositorio de pago y submódulos
Encuentre la versión de OpenCV en las fuentes
Construir OpenCV
Reorganice el resultado de compilación de OpenCV, agregue nuestros archivos personalizados y genere la rueda
Las ruedas de Linux y macOS se transforman con auditwheel y se desplazan, en consecuencia
Instalar la rueda generada.
Pruebe que Python puede importar la biblioteca y ejecutar algunas comprobaciones de cordura
Utilice twine para cargar la rueda generada en PyPI (solo en versiones de lanzamiento)
Los pasos 1 a 4 se realizan mediante pip wheel
.
La compilación se puede personalizar con variables de entorno. Además de cualquier variable que acepte la compilación de OpenCV, reconocemos:
CI_BUILD
. Establezca en 1
para emular el comportamiento de construcción del entorno de CI. Se utiliza solo en compilaciones de CI para forzar la activación de ciertos indicadores de compilación en setup.py
. No utilice esto a menos que sepa lo que está haciendo.ENABLE_CONTRIB
y ENABLE_HEADLESS
. Establezca en 1
para crear la versión contrib y/o sin cabezaENABLE_JAVA
, establecido en 1
para habilitar la compilación del cliente Java. Esto está deshabilitado de forma predeterminada.CMAKE_ARGS
. Argumentos adicionales para la invocación CMake de OpenCV. Puedes usar esto para hacer una compilación personalizada.Consulte la siguiente sección para obtener más información sobre compilaciones manuales fuera del entorno de CI.
Si alguna dependencia no está habilitada en las ruedas prediseñadas, también puede ejecutar la compilación localmente para crear una rueda personalizada.
git clone --recursive https://github.com/opencv/opencv-python.git
cd opencv-python
git
para verificar alguna otra versión de OpenCV en los submódulos opencv
y opencv_contrib
si es necesarioexport CMAKE_ARGS="-DSOME_FLAG=ON -DSOME_OTHER_FLAG=OFF"
(en Windows necesita configurar las variables de entorno de manera diferente según la línea de comandos o PowerShell)ENABLE_CONTRIB
y ENABLE_HEADLESS
: es decir, export ENABLE_CONTRIB=1
si desea compilar opencv-contrib-python
pip wheel . --verbose
. NOTA: asegúrese de tener la última versión pip
, el comando pip wheel
reemplaza el antiguo comando python setup.py bdist_wheel
que no es compatible con pyproject.toml
.setup.py
, el paquete de rueda se colocará en la carpeta dist
. El paquete está listo y puedes hacer con él lo que quieras.manylinux
imágenes de Linux como hosts de compilación si se necesita máxima portabilidad y ejecute auditwheel
para la rueda después de la compilación.delocate
(igual que auditwheel
pero para macOS) para una mejor portabilidad Para compilar opencv-python
en una compilación de depuración no optimizada, debe eludir un poco el proceso normal.
scikit-build
y numpy
mediante pip.python setup.py bdist_wheel --build-type=Debug
.dist/
con pip install dist/wheelname.whl
.Si desea que la compilación produzca todos los comandos del compilador, se ha probado que la siguiente combinación de indicadores y variables de entorno funciona en Linux:
export CMAKE_ARGS='-DCMAKE_VERBOSE_MAKEFILE=ON'
export VERBOSE=1
python3 setup.py bdist_wheel --build-type=Debug
Consulte este número para obtener más información: #424
Desde la versión 4.3.0 de OpenCV, también se proporcionan distribuciones fuente en PyPI. Esto significa que si su sistema no es compatible con ninguna de las ruedas de PyPI, pip
intentará compilar OpenCV a partir de fuentes. Si necesita una versión de OpenCV que no está disponible en PyPI como distribución fuente, siga la guía de compilación manual anterior en lugar de esta.
También puede forzar pip
a construir las ruedas a partir de la distribución fuente. Algunos ejemplos:
pip install --no-binary opencv-python opencv-python
pip install --no-binary :all: opencv-python
Si necesita módulos de contribución o una versión sin cabeza, simplemente cambie el nombre del paquete (no es necesario el paso 4 de la sección anterior). Sin embargo, se pueden proporcionar indicadores de CMake adicionales a través de variables de entorno como se describe en el paso 3 de la sección de compilación manual. Si no se proporciona ninguno, los scripts CMake de OpenCV intentarán encontrar y habilitar las dependencias adecuadas. Las distribuciones sin cabeza tienen indicadores CMake codificados que desactivan todas las posibles dependencias de la GUI.
En sistemas lentos como Raspberry Pi, la compilación completa puede tardar varias horas. En un Ryzen 7 3700X de 8 núcleos, la construcción tarda unos 6 minutos.
El paquete Opencv-python (scripts en este repositorio) está disponible bajo licencia MIT.
El propio OpenCV está disponible bajo la licencia Apache 2.
Las licencias de paquetes de terceros se encuentran en LICENSE-3RD-PARTY.txt.
Todas las ruedas se envían con FFmpeg con licencia LGPLv2.1.
Las ruedas Linux sin cabeza se envían con Qt 5 con licencia LGPLv3.
Los paquetes incluyen también otros binarios. La lista completa de licencias se puede encontrar en LICENSE-3RD-PARTY.txt.
El script find_version.py
busca la información de la versión de las fuentes OpenCV y agrega también un número de revisión específico de este repositorio a la cadena de versión. Guarda la información de la versión en el archivo version.py
en cv2
además de algunas otras banderas.
Se realiza un lanzamiento y se carga en PyPI cuando se envía una nueva etiqueta a la rama maestra. Estas etiquetas diferencian los paquetes (este repositorio puede tener modificaciones pero la versión de OpenCV sigue siendo la misma) y deben incrementarse secuencialmente. En la práctica, los números de versión de lanzamiento se ven así:
cv_major.cv_minor.cv_revision.package_revision
, por ejemplo, 3.1.0.0
La rama maestra sigue las versiones de la rama maestra de OpenCV. La rama 3.4 sigue las versiones de corrección de errores de OpenCV 3.4.
Se creará cada confirmación a la rama maestra de este repositorio. Los posibles artefactos de compilación utilizan identificadores de versión local:
cv_major.cv_minor.cv_revision+git_hash_of_this_repo
por ejemplo, 3.1.0+14a8d39
Estos artefactos no se pueden cargar ni se cargarán en PyPI.
Las ruedas de Linux se construyen utilizando manylinux2014. Estas ruedas deberían funcionar de inmediato para la mayoría de las distribuciones (que usan la biblioteca estándar GNU C), ya que están construidas con una versión antigua de glibc.
Las imágenes predeterminadas manylinux2014
se han ampliado con algunas dependencias de OpenCV. Consulte la carpeta Docker para obtener más información.
Se proporcionan ruedas prediseñadas compatibles con Python 3.x para las versiones de Python oficialmente admitidas (no en EOL):
A partir de las versiones 4.2.0 y 3.4.9, el entorno de compilación de macOS Travis se actualizó a XCode 9.4. El cambio efectivamente eliminó la compatibilidad con versiones de macOS anteriores a 10.13.
A partir de las compilaciones 4.3.0 y 3.4.10, el entorno de compilación de Linux se actualizó de manylinux1
a manylinux2014
. Esto eliminó el soporte para distribuciones antiguas de Linux.
A partir de la versión 4.7.0, el entorno de compilación de Mac OS GitHub Actions se actualizó a la versión 11. La compatibilidad con Mac OS 10.x quedó obsoleta. Ver acciones/imagenes-corredor#5583
A partir de la versión 4.9.0, el entorno de compilación de Mac OS GitHub Actions se actualizó a la versión 12. Compatibilidad con Mac OS 10.x obsoleta por Brew y la mayoría de los paquetes usados.