OpenCV はライブラリを誰でも無料で利用できるようにするために資金を集めていますが、そのためにはコミュニティ全体のサポートが必要です。サポートを示すには、Github の OpenCV に寄付してください。
Python 用に事前に構築された CPU 専用 OpenCV パッケージ。
CUDA などの追加モジュールを有効にするためにソースからバインディングをコンパイルする場合は、手動ビルド セクションを確認してください。
以前のバージョンまたは別のバージョンの OpenCV が手動でインストールされている (= pip
経由でインストールされていない) 場合 (例: Python のサイト パッケージのルートにある cv2 モジュール)、競合を避けるためにインストール前にそれを削除してください。
pip
バージョンが最新であることを確認します (サポートされる最小バージョンは 19.3 です): pip install --upgrade pip
。 pip -V
でバージョンを確認します。たとえば、Linux ディストリビューションには通常、非常に古いpip
バージョンが同梱されており、特にmanylinux
形式では予期せぬ問題が多く発生します。
環境に適したパッケージを選択してください。
4 つの異なるパッケージ (以下のオプション 1、2、3、および 4 を参照) があり、そのうちの 1 つだけを選択する必要があります。同じ環境に複数の異なるパッケージをインストールしないでください。プラグイン アーキテクチャはありません。すべてのパッケージが同じ名前空間 ( cv2
) を使用します。同じ環境に複数の異なるパッケージをインストールした場合は、 pip uninstall
を使用してそれらをすべてアンインストールし、1 つのパッケージのみを再インストールします。
a.標準デスクトップ環境用のパッケージ (Windows、macOS、ほぼすべての GNU/Linux ディストリビューション)
pip install opencv-python
pip install opencv-contrib-python
(OpenCV ドキュメントから contrib/extra モジュールのリストを確認してください)b.サーバー (ヘッドレス) 環境 (Docker、クラウド環境など) 用のパッケージ、GUI ライブラリの依存関係なし
これらのパッケージは、GUI 機能を含まない (Qt や他の GUI コンポーネントでコンパイルされていない) ため、上記の他の 2 つのパッケージよりも小さいです。これは、パッケージが 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 ドキュメントを読む
新しい問題を開く前に、以下の FAQ を読み、すでに公開されている他の問題を確認してください。
Q: OpenCV も別途インストールする必要がありますか?
A: いいえ、パッケージは特別なホイール バイナリ パッケージであり、静的に構築された OpenCV バイナリがすでに含まれています。
Q: Pip のインストールがModuleNotFoundError: No module named 'skbuild'
で失敗します。
opencv-python
バージョン 4.3.0.* 以降、 manylinux1
ホイールはmanylinux2014
ホイールに置き換えられました。 pip が古すぎる場合、 manylinux2014
ホイールのインストール方法がわからないため、4.3.0.38 で導入された新しいソース ディストリビューションを使用して OpenCV を手動でビルドしようとします。ただし、 pip
が古すぎると、 pyproject.toml
内のビルドの依存関係が理解されないため、ソースのビルドも失敗します。新しいmanylinux2014
ビルド済みホイールを使用するには (またはソースからビルドするには)、 pip
バージョンが 19.3 以上である必要があります。 pip install --upgrade pip
を使用してpip
アップグレードしてください。
Q: Windows でインポートが失敗します: ImportError: DLL load failed: The specified module could not be found.
?
A: Windows でインポートが失敗する場合は、Visual C++ 再頒布可能パッケージ 2015 がインストールされていることを確認してください。 Windows 10 よりも古い Windows バージョンを使用しており、最新のシステム更新プログラムがインストールされていない場合は、ユニバーサル C ランタイムも必要になる場合があります。
Windows N および KN エディションには、OpenCV に必要な Media Feature Pack が含まれていません。 Windows N または KN エディションを使用している場合は、Windows Media Feature Pack もインストールしてください。
Windows Server 2012 以降を使用している場合は、メディア DLL も欠落している可能性があります。サーバーマネージャーに「Media Foundation」という機能をインストールしてください。一部の投稿では「Windows Server Essentials Media Pack」のインストールを推奨していますが、これには「Windows Server Essentials Experience」の役割が必要であり、この役割は (Active Directory 統合の強制などにより) Windows Server の構成に深く影響します。したがって、「Media Foundation」をインストールするだけの方が安全な選択です。
上記の方法で問題が解決しない場合は、Anaconda を使用しているかどうかを確認してください。古い Anaconda バージョンにはエラーを引き起こすバグがあります。手動で修正するにはこの問題を参照してください。
これまでの解決策をすべて確認した後もエラーが発生する場合は、依存関係をダウンロードし、 cv2.pyd
(通常はC:UsersusernameAppDataLocalProgramsPythonPythonXXLibsite-packagescv2
) ファイルを使用して、欠落している DLL の問題をデバッグします。
Q: 他にもインポート エラーがありますか?
A: OpenCV Python バインディング (サイト パッケージ内の cv2.so または cv2.pyd) の古い手動インストールが削除されていることを確認してください。
Q: 関数 foo() またはメソッド bar() が間違った結果を返したり、例外をスローしたり、インタープリタをクラッシュさせたりします。どうすればいいですか?
A: リポジトリには OpenCV-Python パッケージのビルド スクリプトのみが含まれており、OpenCV 自体は含まれていません。 OpenCV の Python バインディングは公式 OpenCV リポジトリで開発されており、問題を報告するのに最適な場所です。また、新しいバグを報告する前に、OpenCV wiki と公式 OpenCV フォーラムをチェックしてください。
Q: パッケージに不自由なアルゴリズムが含まれていないのはなぜですか?
A: SURF などの非フリーのアルゴリズムは、特許取得済みまたは非フリーのため、ビルドされたバイナリとして配布できないため、これらのパッケージには含まれていません。 OpenCV バージョン 4.3.0 および 3.4.10 以降、特許期限切れのため SIFT がビルドに含まれていることに注意してください。詳細については、この問題を参照してください: #126
Q: パッケージとインポートが異なるのはなぜですか (opencv-python と cv2)?
A: ユーザーにとってはcv2
よりもopencv-python
方が理解しやすく、検索エンジンでパッケージを見つけやすくなります。 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 のホイールは、auditwheel と delocate で変換され、それに応じて
生成されたホイールをインストールします
Python がライブラリをインポートし、健全性チェックを実行できることをテストします。
Twine を使用して、生成されたホイールを PyPI にアップロードします (リリース ビルドのみ)
ステップ 1 ~ 4 はpip wheel
によって処理されます。
ビルドは環境変数を使用してカスタマイズできます。 OpenCV のビルドが受け入れる変数に加えて、次のものが認識されます。
CI_BUILD
。 CI 環境のビルド動作をエミュレートするには、 1
に設定します。 setup.py
で特定のビルド フラグを強制的にオンにするために、CI ビルドでのみ使用されます。自分が何をしているのか理解していない限り、これを使用しないでください。ENABLE_CONTRIB
とENABLE_HEADLESS
。 contrib および/またはヘッドレス バージョンをビルドするには1
に設定します。ENABLE_JAVA
、Java クライアントのビルドを有効にするには1
に設定します。これはデフォルトでは無効になっています。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
コマンドは、 pyproject.toml
をサポートしていない古いpython setup.py bdist_wheel
コマンドを置き換えます。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
を使用して、生成されたホイール ファイルを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 は必要ありません)。ただし、手動ビルド セクションのステップ 3 で説明されているように、追加の CMake フラグは環境変数を介して提供できます。何も指定されていない場合、OpenCV の CMake スクリプトは適切な依存関係を見つけて有効にしようとします。ヘッドレス ディストリビューションには、考えられるすべての GUI 依存関係を無効にするハードコードされた CMake フラグがあります。
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 マスター ブランチのリリースに従います。 3.4 ブランチは、OpenCV 3.4 バグ修正リリースに続きます。
このリポジトリのマスター ブランチへのすべてのコミットがビルドされます。考えられるビルド アーティファクトでは、ローカル バージョン識別子が使用されます。
cv_major.cv_minor.cv_revision+git_hash_of_this_repo
例: 3.1.0+14a8d39
これらのアーティファクトは PyPI にアップロードできませんし、アップロードされません。
Linux ホイールは manylinux2014 を使用して構築されています。これらのホイールは古いバージョンの glibc に対して構築されているため、ほとんどのディストリビューション (GNU C 標準ライブラリを使用する) でそのまま動作します。
デフォルトのmanylinux2014
イメージは、いくつかの OpenCV 依存関係で拡張されています。詳細については、「Docker フォルダー」を参照してください。
Python 3.x と互換性のある事前構築済みホイールは、公式にサポートされている Python バージョン (EOL ではありません) に対して提供されています。
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 に更新されました。Mac OS 10.x のサポートは廃止されました。アクション/ランナーイメージ#5583 を参照してください。
バージョン 4.9.0 から、Mac OS GitHub Actions ビルド環境はバージョン 12 に更新されました。Mac OS 10.x のサポートは、Brew および使用されているパッケージのほとんどで廃止されました。