概要
今年のみんなのラズパイコンテスト2017で,ソニーセミコンダクタソリューションズさんの「IU233」をお借りすることができました.
IU233をラズパイで動かす手順については,「ビジョンプロセッシング・コミュニティ」にて説明がなされているのですが,これを実際にプログラムに組み込んで使用するためにOpenCV上からアクセスすることを目指してトライしてみました.
前回の記事はこちら
前回の反省
前回の記事では、CSIに挿さっているのでついついraspicam_cv を入れてしまいましたが、いろいろ動かしてもやっぱりダメでした。
基本的には「ビジョンプロセッシング・コミュニティ」に書かれているようにVisionProcessingFramework(VPF)を使うのが一般的? のようです。
ただ、これだと電源入れて即使えるようにするのは難しそうだし、他のセンサとも連動させたりしたいので、できれば使いたくない。
そこでIU233 コミュニティをチェックしたところ、IU233+USB基板+Raspbianで画出しにこんな見出しが。。
USBならOpenCVでもPythonでも操作可能なので、まずはmacbookでこの方法の動作を確認。
※ USBカメラでの動作検証なので、以後の作業はMacbook Proにて行なっています。
opencvによる画像出力
まずはフォーラムのページから、同様のOpenCVプログラムを作成して、コンパイル&実行。。
opencv & Python での実行
import cv2
cam = 1
camera = cv2.VideoCapture(cam)
while(camera.isOpened() == True):
ret, frame = camera.read()
cv2.imshow('image', frame)
c = cv2.waitKey(1) & 0xFF
if c == 27:
break
上のプログラムを作成してチェック。(macbookには内臓のカメラがあるので、カメラ番号は1)
絵は出ました。
解像度、FPSの変更
python版
ここには、
cvSetCaptureProperty 関数を使うとサイズを指定できるようです。
とあるので、
camera.set(cv2.CAP_PROP_FPS, 60)
camera.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 400)
print(camera.get(cv2.CAP_PROP_FPS))
print(camera.get(cv2.CAP_PROP_FRAME_WIDTH))
print(camera.get(cv2.CAP_PROP_FRAME_HEIGHT))
こうすると、cv2.CAP_PROP_FRAME_WIDTHとcv2.CAP_PROP_FRAME_HEIGHTの値は(1280、720)とフルサイズで表示され、cv2.CAP_PROP_FPSの値は0.0となり、変更することができません。
python 上でやったから変更できないのかな?
Cでやったらできるか検証。。
C++版
CPPでもやってみました。
#include <iostream>
#include <opencv2/opencv.hpp>
int main(int argc, const char * argv[]) {
// insert code here...
cv::VideoCapture cap(1);
int width = 640, height = 400;
cap.set(CV_CAP_PROP_FRAME_WIDTH, width);
cap.set(CV_CAP_PROP_FRAME_WIDTH, height);
if(!cap.isOpened())
{
return -1;
}
for(;;)
{
cv::Mat frame;
cap >> frame;
cv::imshow("frame", frame);
if(cv::waitKey(30) == 'q') break;
}
std::cout << "Hello, World!\n";
return 0;
}
ところがこれだとうまくいかない。。。
ここにあるように、cv::Matではなく、IplImageでやるとうまくいくのに。。。
cpp版では画像サイズが変更できない。Pythonでもうまくいかないのは根が同じように思える。
今更IplImageでやるのもイヤだなあ。
やっぱりUSBモードでは無理なのかな。今度はlibSSPでやってみよう
「Raspberry PI3 でソニーセミコンダクタソリューションズのIU233をSSP+OpenCV経由で動かす③ IU233をCSIから撮影」に続く.