PythonでOpenCVを使用してカメラにアクセスする方法

このブログでは、シンプルなpythonスクリプトを使用してOpenCV Pythonでカラーカメラをストリーミングする方法についてご紹介いたします。

標準的なUVCコントロールのサポートやカメラストリーミングに伴う画像キャプチャオプションなど、より高度な機能については、次のブログをご参照ください https://www.e-consystems.com/blog/camera/products/interface-high-quality-cameras-with-opencv-python/

Open Computer Vision(OpenCV)は、基本的な画像デコード、拡張、色空間変換、オブジェクト検出、オブジェクトトラッキングなど、あらゆるタイプの画像処理機能の機能がバンドルされたBSDサインセンスのオープンソースです。

このブログでは、シンプルなPythonスクリプトを使用して、OpenCV用のカメラにアクセスし、使用する方法を紹介する予定です。

See3CAMカメラ

See3CAMは、当社の USB 3.0 カメラシリーズです。 これらのカメラはUVCに準拠しており、Windows / Linuxでプラグアンドプレイをサポートしているため、追加のデバイスドライバーを手動でインストールする必要はありません。

このサンプルアプリケーションでは、当社の 13 MPオートフォーカスUSB 3.0カメラ – See3CAM_130を使用します。 シンプルなOpenCV-PythonアプリケーションからSee3CAM_130カメラにアクセスする方法について、順を追って説明します。このアプリケーションは、カメラからフレームを取得してプレビューウィンドウに表示します。

テストシステム

ホスト PC: Ubuntu-14.04
OpenCVバージョン: 3.4.1
Pythonバージョン: 2.7

OpenCVソースをダウンロードする

次のコマンドにてLinuxに必要なOpenCVバージョンをダウンロードします
$ wget https://github.com/opencv/opencv/archive/3.4.1.zip

関連項目をインストールします。

OpenCVがUSBカメラで動作するには、次の関連項目が必要です。次のコマンドからそれらをダウンロードします。

# libav video input/output development libraries

$ sudo apt-get install libavformat-dev libavutil-dev libswscale-dev

# Video4Linux camera development libraries

$ sudo apt-get install libv4l-dev

# OpenGL development libraries (to allow creating graphical windows)

$ sudo apt-get install libglew-dev

# GTK development libraries (to allow creating graphical windows)

$ sudo apt-get install libgtk2.0-dev

# Install the OpenCV python

$ sudo apt-get install python-opencv

OpenCVを構成します。

関連項目をインストールした後、次のコマンドを用いてOpenCVをビルド&インストールする必要があります。

$ unzip opencv-3.4.1.zip

$ cd opencv-3.4.1

$ mkdir build && cd build

cmake -D CMAKE_BUILD_TYPE=RELEASE -D WITH_TBB=OFF -D BUILD_TBB=OFF -D WITH_V4L=ON -D WITH_LIBV4L=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF ..

コンパイルしてインストール

次のコマンドを実行して、下記の場所でOpenCVライブラリーをビルド&インストールします。“/usr/local/lib/”

$ sudo make j4 install

これで、Ubuntu PCにOpenCVをビルド&インストールしました。OpenCVを使用してカメラをストリーミングするためのサンプルPythonアプリケーションを準備する方法をご紹介いたします。

次のサンプルOpenCV Pythonコードを用いて、デバイスのビデオノードを開き、解像度を設定し、フレームを取り込み、プレビューウィンドウにフレームを表示します。

  1. OpenCV pythonパッケージをインポートします
import cv2
  1. カメラビデオノードを開いて、See3CAM_130にアクセスします
# ID 0でデバイスを開きます

cap = cv2.VideoCapture(0)

# ユーザーが選択したカメラが正常に開かれたかどうかを確認します。

if not (cap.isOpened()):

print(“Could not open video device”)

  1. OpenCVカメラ制御プロパティを使用してカメラの解像度を設定します
# 解像度を設定します

cap.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 640)

cap.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, 480)

  1. カメラからフレームを継続的に取得し、whileループを使用してプレビューウィンドウに表示します。「q」キーを入力して、ループを中断し、アプリケーションを終了します
while(True):

# フレームごとにキャプチャします

ret, frame = cap.read()

# 結果のフレームを表示します

cv2.imshow(‘preview’,frame)

# アプリケーションを終了するにはユーザー入力を待ちます

if cv2.waitKey(1) & 0xFF == ord(‘q’):

break

  1. カメラを解除し、すべてのimshow()ウィンドウを閉じます。
# すべてが完了したら、キャプチャを解除します

cap.release()

cv2.destroyAllWindows()

サンプルコードを「camera_stream.py」として保存します。

import cv2

# ID 0でデバイスを開きます

cap = cv2.VideoCapture(0)

# ユーザーが選択したカメラが正常に開かれたかどうかを確認します。

if not (cap.isOpened()):

print(“Could not open video device”)

# 解像度を設定します

cap.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 640)

cap.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, 480)

while(True):

# フレームごとにキャプチャします

ret, frame = cap.read()

# 結果のフレームを表示します

cv2.imshow(‘preview’,frame)

# アプリケーションを終了するにはユーザー入力を待ちます

if cv2.waitKey(1) & 0xFF == ord(‘q’):

break

# すべて完了したら、キャプチャを解放します

cap.release()

cv2.destroyAllWindows()

次に、プログラムをコンパイルして実行します。

python2 camera_stream.py

このシンプルなPythonスクリプトを使用すると、OpenCVのカメラにアクセスして使用できるようになります。

Related posts

包括的な研究:組み込みビジョンにおけるMJPEGとH.264圧縮の比較

総合的な考察:組み込みビジョンにおけるH.264とH.265の圧縮技術

組込みビジョンアプリケーション用カスタムエッジAIビジョンボックス開発の主要な考慮事項