04. OpenCVインストール

次にpythonで外部モジュールとしてインポートする際の名称とインスールする際の名称が異なる、またはインストールが少々面倒なモジュールの手順を紹介していきます。

★ OpenCVのインストールエラー

本サイトでは馴染み深く画像解析やカスケード分類器で頻繁に使用しますOpenCVのインストールについて詳しくまとめておきます。

まずはインストール前にpythonからインポートするプログラムをみると、「import cv2」となっております。

【case06_test39b_cv2_video02.py】
#coding: utf-8
# ////////////////////////////////////////////////////////////////////////////
# ///【CV2 カメラキャプチャー】                                            ///
# ////////////////////////////////////////////////////////////////////////////
if "__file__" in globals():
    import os, sys
    sys.path.append(os.path.join(os.path.dirname(__file__), ".."))
import cv2

if __name__ == "__main__":
    folder_select   = "16S"
    video_select    = "SD"
    folder_path     = "d:\\VisualStudio2017\\Python3.5_GPU\\test_dataset\\Nogizaka_" + folder_select
    mp_path         = "c:\\Photo\\nogizaka46-" + video_select + ".mp4"

    source_name     = "outvideo.mp4"
    write_name      = "CV2_CASE2_N" + folder_select + "_N46" + video_select + "_stramVideos.mp4"

    face_cascade    = cv2.CascadeClassifier("C:\\opencv-3.4.1\\sources\\data\\haarcascades\\haarcascade_frontalface_alt2.xml")
    cap = cv2.VideoCapture(mp_path)

    fps = int(cap.get(cv2.CAP_PROP_FPS))                        # カメラのFPSを取得
    w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))                  # カメラの横幅を取得
    h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))                 # カメラの縦幅を取得
    fourcc = cv2.VideoWriter_fourcc("m", "p", "4", "v")         # 動画保存時のfourcc設定(mp4用)
    outFilename = write_name
    video = cv2.VideoWriter(outFilename, fourcc, fps, (w, h))   # 動画の仕様(ファイル名、fourcc, FPS, サイズ)

    cnt = 0
    while True:
        ret, img = cap.read()
        try:
            gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
            faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)
            for x, y, w, h in faces:
                cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)

            cv2.imshow("video image", img)

    cap.release()
    cv2.destroyAllWindows()

ところがインストールで下記のように「cv2」を使用するとエラーになってしまいます。


(py37) d:\VisualStudio2017\Python3.5_GPU\DeZero\steps>pip install cv2
ERROR: Could not find a version that satisfies the requirement cv2 (from versions: none)
ERROR: No matching distribution found for cv2

★ OpenCVのインストール

実はOpenCVのインストールが少々ややこしくなっています。
最初に「cv2」問題を解決しておくと、名称は「opencv-python」を使用して、下記のように pip を使用します。

pip install opencv-python

ところがGGEも昔ネットなどで調べながらインストールしていた時期にネットで出回っていたインストール方法に「opencv_python」のものもあるので、同時に試してみましょう。

(py37) d:\VisualStudio2017\Python3.5_GPU\DeZero\steps>pip install opencv-python
Requirement already satisfied: opencv-python in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (4.6.0.66)
Requirement already satisfied: numpy>=1.14.5 in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (from opencv-python) (1.21.6)

(py37) d:\VisualStudio2017\Python3.5_GPU\DeZero\steps>pip install opencv_python
Requirement already satisfied: opencv_python in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (4.6.0.66)
Requirement already satisfied: numpy>=1.14.5 in c:\users\yamin\anaconda3\envs\py37\lib\site-packages (from opencv_python) (1.21.6)

このように両方とも正常に行われました。
では今度サイトパッケージフォルダー内にインストールされたフォルダー名を見ると「opencv_python-4.6.0.66.dist-info」でした。

★ opencv-contrib-pythonのインストール

GGE清須電脳倶楽部発足初期にワオキツネザルの顔認証システムを作成しました。この時対象が動き回るためOpenCvの画像追従処理を行いました。

しかし、時間経過とともに2023現在OpenCVの中から使用していた追従処理がなくなり使用すると例外処理でダウンしてしまいます。

後の調査によりトラッキング処理は「opencv-contrib-python」非公式ビルド済みパッケージとして残っていることが確認されました。但し、opencv-contrib-pythonはmainモジュールを包括しており商用は禁止されています。

またややこしいのは、「opencv-contrib-python」は「opencv-python」のオーバーラップでも並列の関係で存在する補助でもなく、前述のように「opencv-python」モジュールを包括した個別のモジュールだということです。つまり、個別のもので併用禁止だということです。このため、「pip install opencv-contrib-python」を実施し「opencv-python」と同列で「opencv-contrib-python」がインストールされるとエラーはでませんが正常に機能しません。つまり「pip list」でみると2つ表示され、トラッキング処理は処理は機能しないということです。

そこで必ずアンインストールして、「opencv-contrib-python」のみインストールしてください。このためデメリットとしてOpenCVが今後バージョンを新しくして心機能が追加されても無関係になってしまいますので注意して下さい。

pip uninstall opencv-python
pip uninstall opencv-contrib-python
pip install opencv-contrib-python

但し、旧トラッキング処理はインストールが完了してもエラーが継続されます。 その理由として、現在使用している追尾手法「MedianFlow」がなくなってしまったからです。以前は複数のトラッキング処理が試作として提供されますが、少数に絞られて提供されることになったようです。 ちなみに、GGEは「tracker = cv2.TrackerKCF_create()」に変更して実施してみました。


≪清須電脳倶楽部メインページへ戻る場合はここをクリックしてください≫
Copyright(c)2018 GGE Kiyosu Cyber Club Allrights Reserved
inserted by FC2 system