LoginSignup
3
1

More than 1 year has passed since last update.

PythonでOpenCVからGStreamerを使うためのOpenCV4.6.0のBuildについて

Posted at

概要

GStreamerはデータの送受信をパイプライン的に処理できる仕組みで、映像送受信に使うと便利です。さらに映像送受信時に合わせてOpenCVで映像処理することも可能です。
GStreamerとOpenCVを組み合わせるにはOpenCVからGStreamerを呼び出す方法が一般的です。しかしOpenCVからGStreamerを呼び出すためににはOpenCVをソースコードからビルドする必要があり、加えてWindows環境で使用できるようにするまでに苦労したのでその手順を記載したいと思います。

実行環境

  • Windows11
  • CMake 3.24.2
  • Visual studio communication 2019
  • GStreamer 1.16.2
  • OpenCV 4.6.0
  • Python 3.10

前提

以下のサイトを参考に進めていきますが、Versionが古いものは新しくしています

CMakeのインストール

  • 以下よりインストール下さい

  • Pathを通してコマンドプロンプトで実行できるようにして下さい
  • 確認コマンド
> cmake --version
cmake version 3.24.2

CMake suite maintained and supported by Kitware (kitware.com/cmake).

GStreamerのインストール

> gst-inspect-1.0 --version
gst-inspect-1.0 version 1.16.2
GStreamer 1.16.2
Unknown package origin
  • 動作確認
> gst-launch-1.0 videotestsrc ! autovideosink

以下のようにテスト画像が表示されます
図1.png

Pythonの必要パッケージのインストール

  • Pythonのインストール自体は解説しません
  • Numpyのインストール
> pip install numpy
> pip list
# numpyがあることを確認

 - 既存のopen cvのアンインストール

> pip uninstall opencv-python
> pip uninstall opencv-contrib-python
> pip list
# opencv-pythonがopencv-contrib-pythonが無いことを確認

Visual Studio Communication のインストール

  • Version2019を使用してください
  • ダウンロードサイトは以下です

OpeCVのソースコードダウンロード

  • opencvopencv_contribのソースコードが必要です
  • 以下よりopencv

  • 以下よりopencv_contrib

  • zipのダウンロードかgit cloneでソースコードを展開してください

OpenCVのBuild設定

buildフォルダの作成

>cd opencv-4.6.0
> mkdir build

CMakeの起動

  • OpenCVのコンパイルの設定を行います。
  • この中で使用するGStreamerやPython等の設定を行います。
  • インストールしたCMakeアプリを起動してください
  • source codeフォルダに展開したopencvのフォルダを指定ください
  • buildフォルダに作成したbuildフォルダを指定ください
  • まずはConfigureを実行してください。
  • 今後、Configureはこまめに実行ください。新たな設定等が現れたりします。
  • 起動画面
    図2.png

GStreamerの設定

  • 以下の画像を参考にしてください
    図3.png

Pythonの設定

  • 以下の画像を参考にしてください
  • ’PYTHON_NUMPY_INCLUDE_DIRS’の設定は必要です。
  • Python2の設定は不要です
    図4.png

FFMpegの無効化

  • GStreamerと相性が悪いとの話もあり、できれば無効化してください。必項ではありません

図5.png

Generateの実行

  • 上記設定が終了したら、 Generateボタンを押して Generateしてください
  • 出力を結果について以下を参考に問題ないか確認ください
  • GStreamerがYESになっている
  • PythonのPathがただしい
General configuration for OpenCV 4.6.0 =====================================
  Version control:               unknown

  Extra modules:
    Location (extra):            C:/Users/tigri/work/opencv_contrib-4.6.0/modules
    Version control (extra):     unknown

# 省略

  Platform:
    Timestamp:                   2022-10-14T07:30:18Z
    Host:                        Windows 10.0.22000 AMD64
    CMake:                       3.24.2
    CMake generator:             Visual Studio 16 2019
    CMake build tool:            C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/MSBuild/Current/Bin/MSBuild.exe

# 省略

  Video I/O:
    DC1394:                      NO
    GStreamer:                   YES (1.16.2)
    DirectShow:                  YES
    Media Foundation:            YES
      DXVA:                      YES

# 省略


  Python 3:
    Interpreter:                 C:/Python310/python.exe (ver 3.10.4)
    Libraries:                   C:/Python310/libs/python310.lib (ver 3.10.4)
    numpy:                       C:/Python310/Lib/site-packages/numpy/core/include (ver 1.23.3)
    install path:                C:/Python310/Lib/site-packages/cv2/python-3.10

  Python (for build):            C:/Python310/python.exe

# 省略
-----------------------------------------------------------------

OpenCVのBuild

  • 以下を参考にVisualStudioComunication2019にて実行ください

  • インストールをビルドするとPythonにOpenCVがライプラリとしてインストールされます
  • Pythonのフォルダ内に{your_python_paht}\Lib\site-packages\cv2が作成されていることを確認ください

Pythonでの確認

  • 以下を実行しGStreamer: YES (1.16.2)がある事を確認ください

GStreamerのDLLimport cv2前に
os.add_dll_directory('{your_gstreamer_path}/1.0/x86_64/bin')
にて設定しないと「ImportError: DLL load failed while importing cv2: The specified module could not be found.」エラーが発生する場合があります。環境によっては出ない場合があります。

> python
Python 3.10.8 (tags/v3.10.8:aaaf517, Oct 11 2022, 16:50:30) [MSC v.1933 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.add_dll_directory('C:/gstreamer/1.0/x86_64/bin') ## DLLファイルを指定
<AddedDllDirectory('C:/gstreamer/1.0/x86_64/bin')>
>>> import cv2 ## OpenCVの読み込み
>>> print(cv2.getBuildInformation())

General configuration for OpenCV 4.6.0 =====================================

# 省略

  Video I/O:
    DC1394:                      NO
    GStreamer:                   YES (1.16.2)
    DirectShow:                  YES
    Media Foundation:            YES
      DXVA:                      YES

# 省略
>>>

PythonでOpenCVからGStreamerを使う

  • Pythonの実行コード
## GStreamerのDLLを’import cv2’前にセットします
import os
## GStreamerのインストールに合わせてpathをセットしてください
os.add_dll_directory('C:/gstreamer/1.0/x86_64/bin')

## OpenCV読み込み
import cv2

## GStreamerデータのキャプチャ作成
cap = cv2.VideoCapture("videotestsrc ! videoconvert ! appsink")

while True:
     ## GStreamerデータのキャプチャ読み込み
    ret, img = cap.read()
    if not ret:
        break

    ## ここに画像処理を書く
    

    ## キャプチャイメージの表示
    cv2.imshow("img",img)
    
    ## ブレーク処理
    key = cv2.waitKey(1)
    if key==27: #[esc] key
        break
  • 実行結果
    以下のようなTest映像が表示されます

図1.png

最後に

最後のPythonでOpenCVからGStreamerを使う事態は非常に簡単ですが、Buildに時間がかるのと、Windows環境でGStreamerの使用時には事前にDLLファイルの場所の設定が必要なことが判明するまで大変時間がかかりました。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1