Creating RTCs using OpenCV Python
OpenRTM-aist Python版でOpenCV(Python)を使用したRTコンポーネントを作成する方法を解説します。
1. はじめに
Webカメラの画像を取得し、表示するRTC「WebCam」を作成しながら、OpenCVを使ったRTCの作成方法を学びます。
それでは早速、RTコンポーネントを作成してみましょう。
4. おわりに
これでOpenRTM-aist C++版でOpenCV(C++)を使用したRTCを作成することができるようになりました。
今回作成したのは、OpenCVでWebカメラを使う場合のテンプレートになるものです。
ここで取得した画像に処理を追加することで、ロボットビジョンRTCを作ることができます。
これを参考に自分のRTCをどんどん作成してみて下さい。
2. コーディング
まずはWebCamのテンプレートを生成しましょう。
テンプレートの生成には、RTミドルウェアの統合開発環境環境であるOpenRTPを使用します。
WebCamのテンプレートの設定は以下のようになります。
今回いは純粋にOpenCVをRTCに組み込む方法を学ぶためにデータポートは設定しません。
-
モジュール名 WebCam
-
ベンダ名 あなたの名前
-
モジュールカテゴリ TEST
-
実行周期 30
-
アクションコールバック
onInitialize
onActivated
onDeactivated
onExecute
-
言語 Python
テンプレートを生成したらWebCam.pyに以下のコードを記述します。
以下のコードは抜粋となります。生成したテンプレートに当てはめて下さい。
-
# Import RTM module
-
import RTC
-
import OpenRTM_aist
-
-
# Import OpenCV
-
import cv2.cv as cv
-
-
def onInitialize(self):
-
print('WebCamComp')
-
self.cap = cv.CaptureFromCAM(0)
-
-
return RTC.RTC_OK
-
-
def onActivated(self, ec_id):
-
print('CreateWindow')
-
cv.NamedWindow("Capture", 1)
-
-
return RTC.RTC_OK
-
-
def onDeactivated(self, ec_id):
-
print('DestoryWindow ')
-
cv.DestroyAllWindows()
-
-
return RTC.RTC_OK
-
-
def onExecute(self, ec_id):
-
frame = cv.QueryFrame(self.cap)
-
cv.ShowImage("Capture", frame)
-
-
cv.WaitKey(1)
-
-
return RTC.RTC_OK
コードの解説を行います。
-
5-6行目
OpenCVのモジュールをインポートします。
-
9-10行目
CaptureFormCAMオブジェクトを生成します。
-
15-16行目
Active状態のときに、Webカメラでキャプチャした画像を表示するウィンドウを生成します。
-
21-22行目
InActive状態のときに、ウィンドウを破棄します。
-
27行目
Webカメラから取得した画像を格納します。
-
28行目
格納した画像を指定したウィンドウに表示しています。
次に、cv:waitKey()で1 msの間、キー入力を待ちます。
この処理は不要に思えますが、cv::waitKey()を行わないとウィンドウに画像を表示することはできないので注意して下さい。
3. 動作確認
ネーミングサービスの起動後、WebCam.pyを実行して下さい。
コーディングができたら、プログラムを実行します。
■Windowsの場合
camera.pyをダブルクリックして下さい。
■Ubuntu / Raspbianの場合

$ python WebCam.py
RT System Editorを使用して、RTCをActive化しWebカメラの画像が表示されることを確認して下さい。
また、Inactive化したときにウィンドウが破棄されることも確 認してください。