このブログでは、シンプルな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コードを用いて、デバイスのビデオノードを開き、解像度を設定し、フレームを取り込み、プレビューウィンドウにフレームを表示します。
- OpenCV pythonパッケージをインポートします
import cv2 |
- カメラビデオノードを開いて、See3CAM_130にアクセスします
# ID 0でデバイスを開きます
cap = cv2.VideoCapture(0) # ユーザーが選択したカメラが正常に開かれたかどうかを確認します。 if not (cap.isOpened()): print(“Could not open video device”) |
- OpenCVカメラ制御プロパティを使用してカメラの解像度を設定します
# 解像度を設定します
cap.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 640) cap.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, 480) |
- カメラからフレームを継続的に取得し、whileループを使用してプレビューウィンドウに表示します。「q」キーを入力して、ループを中断し、アプリケーションを終了します
while(True):
# フレームごとにキャプチャします ret, frame = cap.read() # 結果のフレームを表示します cv2.imshow(‘preview’,frame) # アプリケーションを終了するにはユーザー入力を待ちます if cv2.waitKey(1) & 0xFF == ord(‘q’): break |
- カメラを解除し、すべての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のカメラにアクセスして使用できるようになります。
Rathish, Our tech support expert with rich 6+ years of experience. He has been a key person in addressing and solving crucial technical queries with wide range of scenarios related to OEM camera hardware and software.