OpenCV sammelt Spenden, um die Bibliothek für alle kostenlos zu halten, und wir brauchen dafür die Unterstützung der gesamten Community. Spenden Sie an OpenCV auf Github, um Ihre Unterstützung zu zeigen.
Vorgefertigte OpenCV-Pakete nur für die CPU für Python.
Sehen Sie sich den Abschnitt zur manuellen Erstellung an, wenn Sie die Bindungen aus dem Quellcode kompilieren möchten, um zusätzliche Module wie CUDA zu aktivieren.
Wenn Sie eine frühere/andere manuell installierte (= nicht über pip
installierte) Version von OpenCV installiert haben (z. B. das cv2-Modul im Stammverzeichnis von Pythons Site-Paketen), entfernen Sie diese vor der Installation, um Konflikte zu vermeiden.
Stellen Sie sicher, dass Ihre pip
-Version aktuell ist (19.3 ist die unterstützte Mindestversion): pip install --upgrade pip
. Überprüfen Sie die Version mit pip -V
. Beispielsweise werden Linux-Distributionen normalerweise mit sehr alten pip
-Versionen ausgeliefert, die insbesondere beim manylinux
-Format viele unerwartete Probleme verursachen.
Wählen Sie das richtige Paket für Ihre Umgebung aus:
Es gibt vier verschiedene Pakete (siehe Optionen 1, 2, 3 und 4 unten) und Sie sollten NUR EINES DAVON AUSWÄHLEN . Installieren Sie nicht mehrere verschiedene Pakete in derselben Umgebung. Es gibt keine Plugin-Architektur: Alle Pakete verwenden denselben Namespace ( cv2
). Wenn Sie mehrere verschiedene Pakete in derselben Umgebung installiert haben, deinstallieren Sie sie alle mit pip uninstall
und installieren Sie nur ein Paket neu.
A. Pakete für Standard-Desktop-Umgebungen (Windows, macOS, fast jede GNU/Linux-Distribution)
pip install opencv-python
pip install opencv-contrib-python
(überprüfen Sie die Liste der Contrib-/Extra-Module in der OpenCV-Dokumentation)B. Pakete für Server-(Headless-)Umgebungen (wie Docker, Cloud-Umgebungen usw.), keine Abhängigkeiten von der GUI-Bibliothek
Diese Pakete sind kleiner als die beiden anderen oben genannten Pakete, da sie keine GUI-Funktionalität enthalten (nicht mit Qt/anderen GUI-Komponenten kompiliert). Dies bedeutet, dass die Pakete eine starke Abhängigkeitskette zu X11-Bibliotheken vermeiden und Sie dadurch beispielsweise kleinere Docker-Images erhalten. Sie sollten diese Pakete immer verwenden, wenn Sie cv2.imshow
et al. nicht verwenden. oder Sie verwenden ein anderes Paket (z. B. PyQt) als OpenCV, um Ihre GUI zu erstellen.
pip install opencv-python-headless
pip install opencv-contrib-python-headless
(überprüfen Sie die Liste der Contrib-/Extra-Module in der OpenCV-Dokumentation)Importieren Sie das Paket:
import cv2
Alle Pakete enthalten Haar-Kaskadendateien. cv2.data.haarcascades
kann als Verknüpfung zum Datenordner verwendet werden. Zum Beispiel:
cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
Lesen Sie die OpenCV-Dokumentation
Bevor Sie eine neue Ausgabe eröffnen, lesen Sie die FAQ unten und werfen Sie einen Blick auf die anderen bereits offenen Ausgaben.
F: Muss ich OpenCV auch separat installieren?
A: Nein, die Pakete sind spezielle Wheel-Binärpakete und sie enthalten bereits statisch erstellte OpenCV-Binärdateien.
F: Die Pip-Installation schlägt mit ModuleNotFoundError: No module named 'skbuild'
?
Seit opencv-python
Version 4.3.0.* wurden manylinux1
Räder durch manylinux2014
-Räder ersetzt. Wenn Ihr Pip zu alt ist, wird er versuchen, die in 4.3.0.38 eingeführte neue Quelldistribution zu verwenden, um OpenCV manuell zu erstellen, da er nicht weiß, wie man manylinux2014
-Räder installiert. Der Quellcode-Build schlägt jedoch auch aufgrund eines zu alten pip
fehl, da er Build-Abhängigkeiten in pyproject.toml
nicht versteht. Um die neuen vorgefertigten manylinux2014
Räder zu verwenden (oder aus dem Quellcode zu erstellen), muss Ihre pip
Version >= 19.3 sein. Bitte aktualisieren Sie pip
mit pip install --upgrade pip
.
F: Der Import schlägt unter Windows fehl: ImportError: DLL load failed: The specified module could not be found.
?
A: Wenn der Import unter Windows fehlschlägt, stellen Sie sicher, dass Visual C++ Redistributable 2015 installiert ist. Wenn Sie eine ältere Windows-Version als Windows 10 verwenden und die neuesten Systemupdates nicht installiert sind, ist möglicherweise auch Universal C Runtime erforderlich.
Die Editionen Windows N und KN enthalten kein Media Feature Pack, das für OpenCV erforderlich ist. Wenn Sie die Windows N- oder KN-Edition verwenden, installieren Sie bitte auch das Windows Media Feature Pack.
Wenn Sie Windows Server 2012+ haben, fehlen wahrscheinlich auch Medien-DLLs; Bitte installieren Sie die Funktion „Media Foundation“ im Server Manager. Beachten Sie, dass in einigen Beiträgen die Installation des „Windows Server Essentials Media Pack“ empfohlen wird. In diesem Beitrag ist jedoch die Rolle „Windows Server Essentials Experience“ erforderlich, und diese Rolle hat erhebliche Auswirkungen auf Ihre Windows Server-Konfiguration (durch Erzwingen der Active Directory-Integration usw.). Daher sollte die Installation der „Media Foundation“ die sicherere Wahl sein.
Wenn das oben Genannte nicht hilft, prüfen Sie, ob Sie Anaconda verwenden. Alte Anaconda-Versionen weisen einen Fehler auf, der den Fehler verursacht. Eine manuelle Lösung finden Sie in diesem Problem.
Wenn der Fehler weiterhin auftritt, nachdem Sie alle vorherigen Lösungen überprüft haben, laden Sie Abhängigkeiten herunter und öffnen Sie cv2.pyd
(normalerweise unter C:UsersusernameAppDataLocalProgramsPythonPythonXXLibsite-packagescv2
)-Datei damit, um fehlende DLL-Probleme zu beheben.
F: Ich habe noch andere Importfehler?
A: Stellen Sie sicher, dass Sie alte manuelle Installationen von OpenCV-Python-Bindungen (cv2.so oder cv2.pyd in Site-Paketen) entfernt haben.
F: Die Funktion foo() oder die Methode bar() gibt ein falsches Ergebnis zurück, löst eine Ausnahme aus oder stürzt den Interpreter ab. Was soll ich tun?
A: Das Repository enthält nur Build-Skripte für OpenCV-Python-Pakete, nicht jedoch OpenCV selbst. Python-Bindungen für OpenCV werden im offiziellen OpenCV-Repository entwickelt und sind der beste Ort, um Probleme zu melden. Bitte überprüfen Sie auch das OpenCV-Wiki und das offizielle OpenCV-Forum, bevor Sie neue Fehler melden.
F: Warum enthalten die Pakete keine unfreien Algorithmen?
A: Unfreie Algorithmen wie SURF sind in diesen Paketen nicht enthalten, da sie patentiert/unfrei sind und daher nicht als erstellte Binärdateien verteilt werden können. Beachten Sie, dass SIFT aufgrund des Patentablaufs seit den OpenCV-Versionen 4.3.0 und 3.4.10 in den Builds enthalten ist. Weitere Informationen finden Sie in dieser Ausgabe: Nr. 126
F: Warum sind Paket und Import unterschiedlich (opencv-python vs. cv2)?
A: Für Benutzer ist es einfacher opencv-python
zu verstehen als cv2
, und es erleichtert das Auffinden des Pakets in Suchmaschinen. cv2
(die alte Schnittstelle wurde in alten OpenCV-Versionen als cv
bezeichnet) ist der Name, den OpenCV-Entwickler wählten, als sie die Bindungsgeneratoren erstellten. Dies wird als Importname beibehalten, um mit verschiedenen Arten von Tutorials im Internet konsistent zu sein. Das Ändern des Importnamens oder -verhaltens wäre für erfahrene Benutzer, die mit dem import cv2
vertraut sind, ebenfalls verwirrend.
Das Ziel dieses Repositorys besteht darin, Mittel zum Verpacken jeder neuen OpenCV-Version für die am häufigsten verwendeten Python-Versionen und Plattformen bereitzustellen.
Das Projekt ist wie ein normales Python-Paket mit einer Standarddatei setup.py
aufgebaut. Der Build-Prozess für einen einzelnen Eintrag in den Build-Matrizen ist wie folgt (siehe beispielsweise die Datei .github/workflows/build_wheels_linux.yml
):
Im Linux- und MacOS-Build: Rufen Sie die optionalen C-Abhängigkeiten von OpenCV ab, mit denen wir kompilieren
Checkout-Repository und Submodule
Finden Sie die OpenCV-Version aus den Quellen
Erstellen Sie OpenCV
Ordnen Sie das Build-Ergebnis von OpenCV neu an, fügen Sie unsere benutzerdefinierten Dateien hinzu und generieren Sie das Rad
Linux- und macOS-Räder werden entsprechend mit auditwheel und delocate transformiert
Installieren Sie das generierte Rad
Testen Sie, ob Python die Bibliothek importieren und einige Plausibilitätsprüfungen durchführen kann
Verwenden Sie Twine, um das generierte Rad auf PyPI hochzuladen (nur in Release-Builds).
Die Schritte 1–4 werden über pip wheel
gesteuert.
Der Build kann mit Umgebungsvariablen angepasst werden. Zusätzlich zu allen Variablen, die der OpenCV-Build akzeptiert, erkennen wir Folgendes:
CI_BUILD
. Auf 1
setzen, um das Build-Verhalten der CI-Umgebung zu emulieren. Wird nur in CI-Builds verwendet, um bestimmte Build-Flags in setup.py
zu erzwingen. Verwenden Sie dies nicht, es sei denn, Sie wissen, was Sie tun.ENABLE_CONTRIB
und ENABLE_HEADLESS
. Auf 1
setzen, um die Contrib- und/oder Headless-Version zu erstellenENABLE_JAVA
: Auf 1
setzen, um den Java-Client-Build zu aktivieren. Dies ist standardmäßig deaktiviert.CMAKE_ARGS
. Zusätzliche Argumente für den CMake-Aufruf von OpenCV. Sie können damit einen benutzerdefinierten Build erstellen.Weitere Informationen zu manuellen Builds außerhalb der CI-Umgebung finden Sie im nächsten Abschnitt.
Wenn eine Abhängigkeit in den vorgefertigten Rädern nicht aktiviert ist, können Sie den Build auch lokal ausführen, um ein benutzerdefiniertes Rad zu erstellen.
git clone --recursive https://github.com/opencv/opencv-python.git
cd opencv-python
git
verwenden, um bei Bedarf eine andere Version von OpenCV in den Submodulen opencv
und opencv_contrib
auszuprobierenexport CMAKE_ARGS="-DSOME_FLAG=ON -DSOME_OTHER_FLAG=OFF"
(in Windows müssen Sie Umgebungsvariablen je nach Befehlszeile oder PowerShell unterschiedlich festlegen)ENABLE_CONTRIB
und ENABLE_HEADLESS
erstellen möchten: dh export ENABLE_CONTRIB=1
, wenn Sie opencv-contrib-python
erstellen möchtenpip wheel . --verbose
. HINWEIS: Stellen Sie sicher, dass Sie über die neueste pip
Version verfügen. Der pip wheel
-Befehl ersetzt den alten python setup.py bdist_wheel
, der pyproject.toml
nicht unterstützt.setup.py
verwenden, wird das Wheel-Paket im dist
-Ordner abgelegt. Das Paket ist fertig und Sie können damit machen, was Sie wollen.manylinux
-Images als Build-Hosts, wenn maximale Portabilität erforderlich ist, und führen Sie nach dem Build auditwheel
für das Wheel ausdelocate
(wie auditwheel
, aber für macOS), um die Portabilität zu verbessern Um opencv-python
in einem nicht optimierten Debug-Build zu erstellen, müssen Sie den normalen Prozess ein wenig umgehen.
scikit-build
und numpy
über pip.python setup.py bdist_wheel --build-type=Debug
aus.dist/
mit pip install dist/wheelname.whl
.Wenn Sie möchten, dass der Build alle Compilerbefehle erzeugt, wurde die folgende Kombination aus Flags und Umgebungsvariablen auf ihre Funktionsfähigkeit unter Linux getestet:
export CMAKE_ARGS='-DCMAKE_VERBOSE_MAKEFILE=ON'
export VERBOSE=1
python3 setup.py bdist_wheel --build-type=Debug
Weitere Diskussion finden Sie in dieser Ausgabe: #424
Seit OpenCV Version 4.3.0 werden auch Quelldistributionen in PyPI bereitgestellt. Das bedeutet, dass pip
versucht, OpenCV aus Quellen zu erstellen, wenn Ihr System mit keinem der Räder in PyPI kompatibel ist. Wenn Sie eine OpenCV-Version benötigen, die in PyPI nicht als Quelldistribution verfügbar ist, befolgen Sie bitte die oben stehende manuelle Build-Anleitung anstelle dieser.
Sie können pip
auch zwingen, die Räder aus der Quelldistribution zu erstellen. Einige Beispiele:
pip install --no-binary opencv-python opencv-python
pip install --no-binary :all: opencv-python
Wenn Sie Contrib-Module oder eine Headless-Version benötigen, ändern Sie einfach den Paketnamen (Schritt 4 im vorherigen Abschnitt ist nicht erforderlich). Allerdings können alle zusätzlichen CMake-Flags über Umgebungsvariablen bereitgestellt werden, wie in Schritt 3 des Abschnitts zur manuellen Erstellung beschrieben. Wenn keine bereitgestellt werden, versuchen die CMake-Skripte von OpenCV, alle geeigneten Abhängigkeiten zu finden und zu aktivieren. Headless-Distributionen verfügen über hartcodierte CMake-Flags, die alle möglichen GUI-Abhängigkeiten deaktivieren.
Auf langsamen Systemen wie dem Raspberry Pi kann der vollständige Build mehrere Stunden dauern. Auf einem 8-Core Ryzen 7 3700X dauert der Build etwa 6 Minuten.
Das Opencv-Python-Paket (Skripte in diesem Repository) ist unter MIT-Lizenz verfügbar.
OpenCV selbst ist unter der Apache 2-Lizenz verfügbar.
Paketlizenzen von Drittanbietern finden Sie unter LICENSE-3RD-PARTY.txt.
Alle Räder werden mit FFmpeg geliefert, das unter der LGPLv2.1 lizenziert ist.
Nicht-Headless-Linux-Räder werden mit Qt 5 ausgeliefert, das unter der LGPLv3 lizenziert ist.
Die Pakete enthalten auch andere Binärdateien. Eine vollständige Liste der Lizenzen finden Sie unter LICENSE-3RD-PARTY.txt.
Das Skript „ find_version.py
sucht nach Versionsinformationen aus OpenCV-Quellen und hängt außerdem eine für dieses Repository spezifische Revisionsnummer an die Versionszeichenfolge an. Es speichert die Versionsinformationen zusätzlich zu einigen anderen Flags in der Datei version.py
unter cv2
.
Eine Veröffentlichung wird erstellt und auf PyPI hochgeladen, wenn ein neues Tag an den Hauptzweig übertragen wird. Diese Tags unterscheiden Pakete (dieses Repo kann Änderungen aufweisen, aber die OpenCV-Version bleibt gleich) und sollten sequentiell erhöht werden. In der Praxis sehen Release-Versionsnummern so aus:
cv_major.cv_minor.cv_revision.package_revision
z. B. 3.1.0.0
Der Master-Zweig folgt den OpenCV-Master-Branch-Releases. Der 3.4-Zweig folgt den OpenCV 3.4-Bugfix-Releases.
Jeder Commit für den Master-Zweig dieses Repos wird erstellt. Mögliche Build-Artefakte verwenden lokale Versionskennungen:
cv_major.cv_minor.cv_revision+git_hash_of_this_repo
zB 3.1.0+14a8d39
Diese Artefakte können und werden nicht auf PyPI hochgeladen.
Linux-Räder werden mit Manylinux2014 erstellt. Diese Räder sollten für die meisten verfügbaren Distributionen (die die GNU C-Standardbibliothek verwenden) sofort funktionieren, da sie auf einer alten Version von glibc basieren.
Die standardmäßigen manylinux2014
-Images wurden um einige OpenCV-Abhängigkeiten erweitert. Weitere Informationen finden Sie im Docker-Ordner.
Für die offiziell unterstützten Python-Versionen (nicht in EOL) werden mit Python 3.x kompatible vorgefertigte Räder bereitgestellt:
Ab den Builds 4.2.0 und 3.4.9 wurde die Build-Umgebung von macOS Travis auf XCode 9.4 aktualisiert. Durch die Änderung wurde die Unterstützung für ältere macOS-Versionen als 10.13 praktisch eingestellt.
Ab den Builds 4.3.0 und 3.4.10 wurde die Linux-Build-Umgebung von manylinux1
auf manylinux2014
aktualisiert. Dadurch wurde die Unterstützung für alte Linux-Distributionen eingestellt.
Ab Version 4.7.0 wurde die Build-Umgebung für Mac OS GitHub Actions auf Version 11 aktualisiert. Die Unterstützung für Mac OS 10.x ist eingestellt. Siehe actions/runner-images#5583
Ab Version 4.9.0 wurde die Mac OS GitHub Actions-Build-Umgebung auf Version 12 aktualisiert. Mac OS 10.x-Unterstützung wird von Brew und den meisten verwendeten Paketen abgelehnt.