A OpenCV está arrecadando fundos para manter a biblioteca gratuita para todos e precisamos do apoio de toda a comunidade para isso. Doe para OpenCV no Github para mostrar seu apoio.
Pacotes OpenCV pré-construídos somente para CPU para Python.
Verifique a seção de construção manual se desejar compilar as ligações da fonte para habilitar módulos adicionais, como CUDA.
Se você tiver uma versão anterior/outra instalada manualmente (= não instalada via pip
) do OpenCV instalada (por exemplo, módulo cv2 na raiz dos pacotes de sites do Python), remova-a antes da instalação para evitar conflitos.
Certifique-se de que sua versão pip
esteja atualizada (19.3 é a versão mínima suportada): pip install --upgrade pip
. Verifique a versão com pip -V
. Por exemplo, as distribuições Linux geralmente vêm com versões pip
muito antigas, o que causa muitos problemas inesperados, especialmente com o formato manylinux
.
Selecione o pacote correto para seu ambiente:
Existem quatro pacotes diferentes (ver opções 1, 2, 3 e 4 abaixo) e você deve SELECIONAR APENAS UM DELES . Não instale vários pacotes diferentes no mesmo ambiente. Não há arquitetura de plugin: todos os pacotes usam o mesmo namespace ( cv2
). Se você instalou vários pacotes diferentes no mesmo ambiente, desinstale todos eles com pip uninstall
e reinstale apenas um pacote.
um. Pacotes para ambientes de desktop padrão (Windows, macOS, quase qualquer distribuição GNU/Linux)
pip install opencv-python
pip install opencv-contrib-python
(verifique a listagem de módulos contrib/extras na documentação do OpenCV)b. Pacotes para ambientes de servidor (sem cabeça) (como Docker, ambientes de nuvem etc.), sem dependências de biblioteca GUI
Esses pacotes são menores que os outros dois pacotes acima porque não contêm nenhuma funcionalidade GUI (não compilados com Qt/outros componentes GUI). Isso significa que os pacotes evitam uma cadeia de dependência pesada para bibliotecas X11 e você terá, por exemplo, imagens Docker menores como resultado. Você deve sempre usar esses pacotes se não usar cv2.imshow
et al. ou você está usando algum outro pacote (como PyQt) além do OpenCV para criar sua GUI.
pip install opencv-python-headless
pip install opencv-contrib-python-headless
(verifique a listagem de módulos contrib/extras na documentação do OpenCV)Importe o pacote:
import cv2
Todos os pacotes contêm arquivos em cascata Haar. cv2.data.haarcascades
pode ser usado como um atalho para a pasta de dados. Por exemplo:
cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
Leia a documentação do OpenCV
Antes de abrir um novo problema, leia o FAQ abaixo e dê uma olhada nos outros problemas que já estão abertos.
P: Preciso instalar também o OpenCV separadamente?
R: Não, os pacotes são pacotes binários de roda especiais e já contêm binários OpenCV construídos estaticamente.
P: A instalação do Pip falha com ModuleNotFoundError: No module named 'skbuild'
?
Desde a versão 4.3.0.* opencv-python
, as rodas manylinux1
foram substituídas pelas rodas manylinux2014
. Se o seu pip for muito antigo, ele tentará usar a nova distribuição fonte introduzida em 4.3.0.38 para construir manualmente o OpenCV porque não sabe como instalar rodas manylinux2014
. No entanto, a compilação de origem também falhará devido ao pip
muito antigo, pois não entende as dependências de compilação em pyproject.toml
. Para usar as novas rodas pré-construídas manylinux2014
(ou para compilar a partir do código-fonte), sua versão pip
deve ser >= 19.3. Atualize pip
com pip install --upgrade pip
.
P: A importação falha no Windows: ImportError: DLL load failed: The specified module could not be found.
?
R: Se a importação falhar no Windows, certifique-se de ter o Visual C++ redistributable 2015 instalado. Se você estiver usando uma versão do Windows mais antiga que o Windows 10 e as atualizações mais recentes do sistema não estiverem instaladas, o Universal C Runtime também poderá ser necessário.
As edições Windows N e KN não incluem o Media Feature Pack, exigido pelo OpenCV. Se você estiver usando a edição Windows N ou KN, instale também o Windows Media Feature Pack.
Se você tiver o Windows Server 2012+, provavelmente também faltarão DLLs de mídia; instale o recurso chamado "Media Foundation" no Gerenciador do Servidor. Cuidado, algumas postagens aconselham a instalação do "Windows Server Essentials Media Pack", mas este requer a função "Windows Server Essentials Experience", e essa função afetará profundamente a configuração do Windows Server (impondo a integração do diretório ativo, etc.); portanto, apenas instalar o "Media Foundation" deve ser uma escolha mais segura.
Se o procedimento acima não ajudar, verifique se você está usando o Anaconda. Versões antigas do Anaconda têm um bug que causa o erro, consulte este problema para uma correção manual.
Se você ainda encontrar o erro depois de verificar todas as soluções anteriores, baixe Dependências e abra o cv2.pyd
(geralmente localizado em C:UsersusernameAppDataLocalProgramsPythonPythonXXLibsite-packagescv2
) com ele para depurar problemas de DLL ausentes.
P: Tenho outros erros de importação?
R: Certifique-se de ter removido instalações manuais antigas de ligações OpenCV Python (cv2.so ou cv2.pyd em pacotes de sites).
P: A função foo() ou método bar() retorna resultado errado, lança exceção ou trava o interpretador. O que devo fazer?
R: O repositório contém apenas scripts de construção de pacotes OpenCV-Python, mas não o próprio OpenCV. As ligações Python para OpenCV são desenvolvidas no repositório oficial do OpenCV e é o melhor lugar para relatar problemas. Verifique também o wiki do OpenCV e o fórum oficial do OpenCV antes de registrar novos bugs.
P: Por que os pacotes não incluem algoritmos não-livres?
R: Algoritmos não-livres como o SURF não estão incluídos nesses pacotes porque são patenteados/não-livres e, portanto, não podem ser distribuídos como binários construídos. Observe que o SIFT está incluído nas compilações devido à expiração da patente desde as versões 4.3.0 e 3.4.10 do OpenCV. Veja esta edição para mais informações: #126
P: Por que o pacote e a importação são diferentes (opencv-python vs. cv2)?
R: É mais fácil para os usuários entenderem opencv-python
do que cv2
e torna mais fácil encontrar o pacote nos mecanismos de busca. cv2
(a interface antiga nas versões antigas do OpenCV era chamada cv
) é o nome que os desenvolvedores do OpenCV escolheram quando criaram os geradores de ligação. Este é mantido como o nome de importação para ser consistente com diferentes tipos de tutoriais na Internet. Alterar o nome ou comportamento da importação também seria confuso para usuários experientes que estão acostumados com a import cv2
.
O objetivo deste repositório é fornecer meios para empacotar cada nova versão do OpenCV para as versões e plataformas Python mais usadas.
O projeto é estruturado como um pacote Python normal com um arquivo setup.py
padrão. O processo de construção para uma única entrada nas matrizes de construção é o seguinte (veja, por exemplo, o arquivo .github/workflows/build_wheels_linux.yml
):
Na compilação Linux e MacOS: obtenha as dependências C opcionais do OpenCV nas quais compilamos
Repositório e submódulos de checkout
Encontre a versão OpenCV nas fontes
Construir OpenCV
Reorganize o resultado da construção do OpenCV, adicione nossos arquivos personalizados e gere a roda
As rodas Linux e macOS são transformadas com auditwheel e delocadas, correspondentemente
Instale a roda gerada
Teste se o Python pode importar a biblioteca e executar algumas verificações de integridade
Use o fio para fazer upload da roda gerada para o PyPI (somente em versões de lançamento)
As etapas 1 a 4 são realizadas por pip wheel
.
A construção pode ser personalizada com variáveis de ambiente. Além de quaisquer variáveis que a construção do OpenCV aceita, reconhecemos:
CI_BUILD
. Defina como 1
para emular o comportamento de construção do ambiente de CI. Usado apenas em compilações de CI para forçar a ativação de determinados sinalizadores de compilação em setup.py
. Não use isso a menos que você saiba o que está fazendo.ENABLE_CONTRIB
e ENABLE_HEADLESS
. Defina como 1
para construir a versão contrib e/ou headlessENABLE_JAVA
, Defina como 1
para ativar a construção do cliente Java. Isso está desabilitado por padrão.CMAKE_ARGS
. Argumentos adicionais para a invocação do CMake do OpenCV. Você pode usar isso para fazer uma construção personalizada.Consulte a próxima seção para obter mais informações sobre compilações manuais fora do ambiente de CI.
Se alguma dependência não estiver habilitada nas rodas pré-construídas, você também poderá executar a compilação localmente para criar uma roda personalizada.
git clone --recursive https://github.com/opencv/opencv-python.git
cd opencv-python
git
para verificar alguma outra versão do OpenCV nos submódulos opencv
e opencv_contrib
, se necessárioexport CMAKE_ARGS="-DSOME_FLAG=ON -DSOME_OTHER_FLAG=OFF"
(no Windows você precisa definir variáveis de ambiente de maneira diferente, dependendo da linha de comando ou do PowerShell)ENABLE_CONTRIB
e ENABLE_HEADLESS
: ou seja, export ENABLE_CONTRIB=1
se você deseja construir opencv-contrib-python
pip wheel . --verbose
. NOTA: certifique-se de ter a versão mais recente pip
, o comando pip wheel
substitui o antigo comando python setup.py bdist_wheel
que não suporta pyproject.toml
.setup.py
, o pacote wheel será colocado na pasta dist
. O pacote está pronto e você pode fazer o que quiser.manylinux
como hosts de construção se for necessária portabilidade máxima e execute auditwheel
para a roda após a construçãodelocate
(o mesmo que auditwheel
mas para macOS) para melhor portabilidade Para construir opencv-python
em uma compilação de depuração não otimizada, você precisa contornar um pouco o processo normal.
scikit-build
e numpy
via pip.python setup.py bdist_wheel --build-type=Debug
.dist/
com pip install dist/wheelname.whl
.Se você quiser que a compilação produza todos os comandos do compilador, a seguinte combinação de sinalizadores e variáveis de ambiente foi testada para funcionar no Linux:
export CMAKE_ARGS='-DCMAKE_VERBOSE_MAKEFILE=ON'
export VERBOSE=1
python3 setup.py bdist_wheel --build-type=Debug
Veja esta edição para mais discussão: #424
Desde a versão 4.3.0 do OpenCV, também as distribuições de origem são fornecidas em PyPI. Isso significa que se o seu sistema não for compatível com nenhuma das rodas do PyPI, pip
tentará construir o OpenCV a partir dos fontes. Se você precisar de uma versão OpenCV que não esteja disponível no PyPI como distribuição fonte, siga as orientações de construção manual acima em vez desta.
Você também pode forçar pip
a construir as rodas a partir da distribuição fonte. Alguns exemplos:
pip install --no-binary opencv-python opencv-python
pip install --no-binary :all: opencv-python
Se você precisar de módulos contrib ou versão headless, basta alterar o nome do pacote (a etapa 4 da seção anterior não é necessária). No entanto, quaisquer sinalizadores CMake adicionais podem ser fornecidos por meio de variáveis de ambiente, conforme descrito na etapa 3 da seção de compilação manual. Se nenhuma for fornecida, os scripts CMake do OpenCV tentarão encontrar e habilitar quaisquer dependências adequadas. Distribuições headless possuem sinalizadores CMake codificados que desativam todas as dependências possíveis da GUI.
Em sistemas lentos como Raspberry Pi, a construção completa pode levar várias horas. Em um Ryzen 7 3700X de 8 núcleos, a construção leva cerca de 6 minutos.
O pacote Opencv-python (scripts neste repositório) está disponível sob licença MIT.
O próprio OpenCV está disponível sob licença Apache 2.
As licenças de pacotes de terceiros estão em LICENSE-3RD-PARTY.txt.
Todas as rodas são fornecidas com FFmpeg licenciado sob LGPLv2.1.
Rodas Linux sem cabeça são fornecidas com Qt 5 licenciadas sob LGPLv3.
Os pacotes incluem também outros binários. A lista completa de licenças pode ser encontrada em LICENSE-3RD-PARTY.txt.
O script find_version.py
procura as informações da versão nas fontes OpenCV e anexa também um número de revisão específico deste repositório à string da versão. Ele salva as informações da versão no arquivo version.py
em cv2
além de alguns outros sinalizadores.
Uma liberação é feita e carregada no PyPI quando uma nova tag é enviada para o branch master. Essas tags diferenciam os pacotes (este repositório pode ter modificações, mas a versão do OpenCV permanece a mesma) e devem ser incrementadas sequencialmente. Na prática, os números das versões de lançamento são assim:
cv_major.cv_minor.cv_revision.package_revision
, por exemplo, 3.1.0.0
O branch master segue os lançamentos do branch master OpenCV. A ramificação 3.4 segue as versões de correção de bug do OpenCV 3.4.
Cada commit no branch master deste repositório será construído. Possíveis artefatos de construção usam identificadores de versão local:
cv_major.cv_minor.cv_revision+git_hash_of_this_repo
por exemplo, 3.1.0+14a8d39
Esses artefatos não podem e não serão carregados no PyPI.
As rodas Linux são construídas usando o Manylinux2014. Essas rodas devem funcionar imediatamente para a maioria das distros (que usam a biblioteca padrão GNU C), uma vez que são construídas em uma versão antiga do glibc.
As imagens padrão manylinux2014
foram estendidas com algumas dependências do OpenCV. Consulte a pasta Docker para obter mais informações.
Rodas pré-construídas compatíveis com Python 3.x são fornecidas para as versões Python com suporte oficial (não em EOL):
A partir das compilações 4.2.0 e 3.4.9, o ambiente de compilação do macOS Travis foi atualizado para o XCode 9.4. A mudança efetivamente eliminou o suporte para versões anteriores à 10.13 do macOS.
A partir das compilações 4.3.0 e 3.4.10, o ambiente de compilação do Linux foi atualizado de manylinux1
para manylinux2014
. Isso abandonou o suporte para distribuições Linux antigas.
A partir da versão 4.7.0, o ambiente de construção do Mac OS GitHub Actions foi atualizado para a versão 11. Suporte ao Mac OS 10.x descontinuado. Veja ações/imagens do corredor#5583
A partir da versão 4.9.0, o ambiente de construção do Mac OS GitHub Actions foi atualizado para a versão 12. Suporte ao Mac OS 10.x descontinuado pelo Brew e pela maioria dos pacotes usados.