OpenCV 正在籌集資金,以使圖書館免費向所有人開放,我們需要整個社區的支持才能做到這一點。在 Github 上向 OpenCV 捐款以表達您的支持。
適用於 Python 的預先建置的僅限 CPU 的 OpenCV 套件。
如果您希望從原始程式碼編譯綁定以啟用其他模組(例如 CUDA),請檢查手動建置部分。
如果您安裝了先前/其他手動安裝(= 未透過pip
安裝)版本的 OpenCV(例如 Python 網站包根目錄中的 cv2 模組),請在安裝前將其刪除以避免衝突。
確保您的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 文件中列出的 contrib/extra 模組)b.適用於伺服器(無頭)環境(例如 Docker、雲端環境等)的軟體包,無 GUI 庫依賴項
這些套件比上面的其他兩個套件小,因為它們不包含任何 GUI 功能(不與 Qt/其他 GUI 元件一起編譯)。這意味著這些套件避免了對 X11 庫的嚴重依賴鏈,因此您將獲得更小的 Docker 映像。如果您不使用cv2.imshow
等,則應始終使用這些軟體包。或者您正在使用 OpenCV 以外的其他軟體包(例如 PyQt)來建立 GUI。
pip install opencv-python-headless
pip install opencv-contrib-python-headless
(檢查 OpenCV 文件中列出的 contrib/extra 模組)導入包:
import cv2
所有套件都包含 Haar 級聯文件。 cv2.data.haarcascades
可以用作資料資料夾的捷徑。例如:
cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
閱讀 OpenCV 文檔
在打開新問題之前,請閱讀下面的常見問題並查看其他已開啟的問題。
Q:我還需要單獨安裝 OpenCV 嗎?
答:不,這些軟體包是特殊的 Wheel 二進位軟體包,它們已經包含靜態建置的 OpenCV 二進位。
Q:Pip 安裝失敗並出現ModuleNotFoundError: No module named 'skbuild'
?
自opencv-python
版本 4.3.0.* 起, manylinux1
輪子被manylinux2014
輪子取代。如果你的 pip 太舊,它會嘗試使用 4.3.0.38 中引入的新源發行版來手動建立 OpenCV,因為它不知道如何安裝manylinux2014
輪子。但是,由於pip
太舊,來源建置也會失敗,因為它不理解pyproject.toml
中的建置依賴項。要使用新的manylinux2014
預先建置輪子(或從原始碼建置),您的pip
版本必須 >= 19.3。請使用pip install --upgrade pip
pip
pip 。
Q:在 Windows 上匯入失敗: ImportError: DLL load failed: The specified module could not be found.
?
答:如果在 Windows 上匯入失敗,請確保已安裝了 Visual C++ Redistributable 2015。如果您使用的 Windows 版本早於 Windows 10 且未安裝最新的系統更新,則可能還需要通用 C 執行時間。
Windows N 和 KN 版本不包含 OpenCV 所需的媒體功能包。如果您使用的是 Windows N 或 KN 版本,請同時安裝 Windows Media 功能套件。
如果您使用的是 Windows Server 2012+,媒體 DLL 也可能遺失;請在伺服器管理員中安裝名為「Media Foundation」的功能。請注意,有些帖子建議安裝“Windows Server Essentials Media Pack”,但這需要“Windows Server Essentials Experience”角色,並且該角色將深刻影響您的 Windows Server 配置(透過強制執行 Active Directory 整合等);所以只安裝「媒體基礎」應該是更安全的選擇。
如果上述方法沒有幫助,請檢查您是否使用 Anaconda。舊的 Anaconda 版本存在導致該錯誤的錯誤,請參閱此問題以進行手動修復。
如果檢查前面所有的解決方案後仍然遇到錯誤,請下載 Dependencies 並開啟cv2.pyd
(通常位於C:UsersusernameAppDataLocalProgramsPythonPythonXXLibsite-packagescv2
)文件,用它來偵錯遺失的DLL 問題。
Q:我還有其他導入錯誤嗎?
答:確保您已刪除舊的手動安裝的 OpenCV Python 綁定(網站套件中的 cv2.so 或 cv2.pyd)。
Q:函數 foo() 或方法 bar() 傳回錯誤結果、拋出例外或導致解釋器崩潰。我該怎麼辦?
答:儲存庫僅包含 OpenCV-Python 套件建置腳本,而不包含 OpenCV 本身。 OpenCV 的 Python 綁定是在官方 OpenCV 儲存庫中開發的,它是報告問題的最佳位置。另外,請在提交新錯誤之前檢查 OpenCV wiki 和官方 OpenCV 論壇。
Q:為什麼軟體包不包含非免費演算法?
答:SURF 等非自由演算法不包含在這些軟體包中,因為它們是專利/非自由的,因此不能作為建構的二進位檔案分發。請注意,自 OpenCV 版本 4.3.0 和 3.4.10 起,由於專利到期,SIFT 包含在建置中。請參閱此問題以獲取更多資訊:#126
Q:為什麼打包和導入不同(opencv-python 與 cv2)?
A: opencv-python
比cv2
更容易讓使用者理解,也更容易用搜尋引擎找到套件。 cv2
(舊 OpenCV 版本中的舊介面被命名為cv
)是 OpenCV 開發人員在建立綁定產生器時所選擇的名稱。將此保留為導入名稱,以便與互聯網上不同類型的教程保持一致。更改匯入名稱或行為也會讓習慣import cv2
有經驗的使用者感到困惑。
這個儲存庫的目的是提供為最常用的 Python 版本和平台打包每個新 OpenCV 版本的方法。
這個專案的結構類似於具有標準setup.py
檔案的普通 Python 套件。建置矩陣中單一條目的建置流程如下(例如,請參閱.github/workflows/build_wheels_linux.yml
檔案):
在 Linux 和 MacOS 建置中:取得我們編譯的 OpenCV 可選 C 依賴項
檢查儲存庫和子模組
從來源碼中尋找 OpenCV 版本
建構 OpenCV
重新排列 OpenCV 的建置結果,加入我們的自訂檔案並產生輪子
Linux和macOS的wheel分別用auditwheel和delocate改造,對應
安裝生成的輪子
測試 Python 是否可以導入庫並執行一些健全性檢查
使用 twine 將產生的輪子上傳到 PyPI(僅在發布版本中)
步驟 1--4 由pip wheel
處理。
可以使用環境變數自訂建置。除了 OpenCV 的建構接受的任何變數之外,我們還認識到:
CI_BUILD
。設定為1
以模擬 CI 環境建置行為。僅在 CI 建置中使用,以在setup.py
中強制啟用某些建置標誌。除非您知道自己在做什麼,否則請勿使用此功能。ENABLE_CONTRIB
和ENABLE_HEADLESS
。設定為1
以建立 contrib 和/或無頭版本ENABLE_JAVA
,設定為1
以啟用 Java 用戶端建置。預設情況下停用此功能。CMAKE_ARGS
。 OpenCV 的 CMake 呼叫的附加參數。您可以使用它來進行自訂建置。有關 CI 環境之外手動構建的更多信息,請參閱下一節。
如果預先建置的輪子中未啟用某些依賴項,您也可以在本機上執行建置來建立自訂輪子。
git clone --recursive https://github.com/opencv/opencv-python.git
cd opencv-python
git
在opencv
和opencv_contrib
子模組中查看 OpenCV 的其他版本export CMAKE_ARGS="-DSOME_FLAG=ON -DSOME_OTHER_FLAG=OFF"
(在 Windows 中,您需要根據命令列或 PowerShell 設定不同的環境變數)ENABLE_CONTRIB
和ENABLE_HEADLESS
的套件風格:如果您希望建立opencv-contrib-python
則export ENABLE_CONTRIB=1
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
包。python setup.py bdist_wheel --build-type=Debug
。pip install dist/wheelname.whl
將產生的 Wheel 檔案安裝在dist/
資料夾中。如果您希望建置產生所有編譯器命令,則以下標誌和環境變數的組合已經過測試,可以在 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。如果您需要 PyPI 中未提供的 OpenCV 版本作為來源發行版,請遵循上面的手動建立指南,而不是遵循此指南。
您也可以強制pip
從來源發行版建立輪子。一些例子:
pip install --no-binary opencv-python opencv-python
pip install --no-binary :all: opencv-python
如果您需要 contrib 模組或無頭版本,只需更改套件名稱(不需要上一節的步驟 4)。但是,可以透過環境變數提供任何其他 CMake 標誌,如手動建置部分的步驟 3 所述。如果未提供任何依賴項,OpenCV 的 CMake 腳本將嘗試尋找並啟用任何適當的依賴項。無頭髮行版具有硬編碼的 CMake 標誌,可停用所有可能的 GUI 依賴項。
在 Raspberry Pi 等慢速系統上,完整建置可能需要幾個小時。在 8 核心 Ryzen 7 3700X 上,建造大約需要 6 分鐘。
Opencv-python 套件(此儲存庫中的腳本)可在 MIT 許可證下使用。
OpenCV 本身可在 Apache 2 許可證下使用。
第三方軟體包許可證位於 LICENSE-3RD-PARTY.txt。
所有輪子均附帶根據 LGPLv2.1 許可的 FFmpeg。
非無頭 Linux 輪子附帶了根據 LGPLv3 許可的 Qt 5。
這些軟體包還包括其他二進位檔案。完整的許可證清單可以在 LICENSE-3RD-PARTY.txt 中找到。
find_version.py
腳本從 OpenCV 來源搜尋版本信息,並將特定於此儲存庫的修訂號附加到版本字串。除了一些其他標誌之外,它將版本資訊保存到cv2
下的version.py
檔案中。
當新標籤推送到 master 分支時,就會發布版本並上傳到 PyPI。這些標籤區分套件(此儲存庫可能有修改,但 OpenCV 版本保持不變)並且應按順序遞增。實際上,發布版本號如下所示:
cv_major.cv_minor.cv_revision.package_revision
例如3.1.0.0
master 分支遵循 OpenCV master 分支版本。 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 版本(不在 EOL 中)提供了與 Python 3.x 相容的預先建置輪:
從 4.2.0 和 3.4.9 建置開始,macOS Travis 建置環境已更新至 XCode 9.4。這項變更實際上放棄了對 10.13 之前的 macOS 版本的支援。
從 4.3.0 和 3.4.10 開始構建,Linux 建置環境從manylinux1
更新為manylinux2014
。這放棄了對舊 Linux 發行版的支援。
從版本 4.7.0 開始,Mac OS GitHub Actions 建置環境已更新至版本 11。請參閱 actions/runner-images#5583
從版本 4.9.0 開始,Mac OS GitHub Actions 建置環境已更新至版本 12。