y_kudo_ncpl
2014年2月17日 16時54分
お世話になります。
工藤@NCPLと申します。
先日PC/SCのインストールでご相談させていただいて、
結局依存関係解決がうまくいかずdebianを入れてみたところ
とりあえずPC/SCはdebian上で動きました。
(クロス環境へ持っていく方法をまた考えねばなりませんが。)
併せてUVCカメラからキャプチャする必要があり、OpenCVを入れてみました。
apt-get installで一通り入れて、下記のようなソースのコンパイル・リンクは通ったのですが
とりあえず手元に転がってたUVCカメラで試したところ
cvCreateCameraCapture( 1 )でNULLが帰ってきました。
dmesg を見てみると
usb 1-1: USB disconnect, address 2
usb 2-1: new high speed USB device using fsl-ehci and address 3
usb 2-1: configuration #1 chosen from 1 choice
uvcvideo: Found UVC 1.00 device USB2.0 Camera (1e4e:0103)
uvcvideo: Failed to query (135) UVC control 1 (unit 0) : -32 (exp. 26).
uvcvideo: Failed to query (1) UVC control 2 (unit 0) : -32 (exp. 26).
uvcvideo: Failed to initialize the device (-5).
と出ていますので、どうもOpenCV以前の話のようです。
①この辺のエラー要因調べるにはどこを探せばよろしいでしょうか?
②何かモジュールが足りてないのか?と思って lsmodを実行しても何も出てきません。
modprobe -lでは下記のように表示されました。
#modprobe -l
FATAL: Could not load /lib/modules/2.6.26-at18/modules.dep: No such file or directory
実際に# ls /lib/modules/ すると
2.6.26-at15 2.6.26-at6
がありますが2.6.26-at18/がありません。
kernelのバージョン見ると
# uname -r
2.6.26-at18
と返ってきました。
この不整合はどうやって解決すればよろしいでしょうか?
以下テストしたソース
// OpenCV カメラ画像取得テスト。
#include
#include
#include
#include
#include
#include
int main(int argc, char **argv)
{
CvCapture *capture = NULL;
IplImage *frame = NULL;
int c;
int i;
// カメラに対するキャプチャ構造体を作成。
capture = cvCreateCameraCapture( 1 );
if( capture == NULL ){
printf("cvCreateCapture Return NULL\n" );
return -1;
};
// キャプチャサイズの設定。
frame = cvQueryFrame(capture);
if( frame == NULL ){
printf("cvQueryFrame return NULL\n");
cvReleaseCapture(&capture);
return -2;
};
cvSaveImage( "test.jpg", frame );
// 後片付け。
cvReleaseCapture(&capture);
return 0;
}
何かアドバイスいただけることが在りましたらよろしくお願いします。
コメント
y_kudo_ncpl
at_yashi
2014年2月19日 15時32分
> 先日PC/SCのインストールでご相談させていただいて、
> 結局依存関係解決がうまくいかずdebianを入れてみたところ
> とりあえずPC/SCはdebian上で動きました。
> (クロス環境へ持っていく方法をまた考えねばなりませんが。)
お役に立てず、すみません。PC/SC を dist に組み込む方法を、こちらでも考
えてみます。
> 併せてUVCカメラからキャプチャする必要があり、OpenCVを入れてみました。
> apt-get installで一通り入れて、下記のようなソースのコンパイル・リンクは通ったのですが
> とりあえず手元に転がってたUVCカメラで試したところ
> cvCreateCameraCapture( 1 )でNULLが帰ってきました。
>
> dmesg を見てみると
> usb 1-1: USB disconnect, address 2
> usb 2-1: new high speed USB device using fsl-ehci and address 3
> usb 2-1: configuration #1 chosen from 1 choice
> uvcvideo: Found UVC 1.00 device USB2.0 Camera (1e4e:0103)
> uvcvideo: Failed to query (135) UVC control 1 (unit 0) : -32 (exp. 26).
> uvcvideo: Failed to query (1) UVC control 2 (unit 0) : -32 (exp. 26).
> uvcvideo: Failed to initialize the device (-5).
> と出ていますので、どうもOpenCV以前の話のようです。
>
> ①この辺のエラー要因調べるにはどこを探せばよろしいでしょうか?
opencv のソースコードで、
あたりが良いかと思います。dmesg に出ているのは uvcvideo ドライバーですが
と、関数コールが流れていきます。v4l2 からカーネルです。uvcvide の部分は
内にあります。v4l2の ioctrlを発行すると、上記の関数が呼ばれます。
> ②何かモジュールが足りてないのか?と思って lsmodを実行しても何も出てきません。
カーネルモジュールはお使いですか?
> modprobe -lでは下記のように表示されました。
> #modprobe -l
> FATAL: Could not load /lib/modules/2.6.26-at18/modules.dep: No such file or directory
modules.dep
は、depmod
を使うと生成できます。でも、module を使っていないと思うので、気にしなくても問題ないです。
> 何かアドバイスいただけることが在りましたらよろしくお願いします。
cvCreateCameraCapture() は、v4l2のラッパー関数なのですが、決め打ちが多
く、あまりお勧めしません。ちょっと手間かもしれませんが、v4l2 を直接扱う
方が、今後いろいろ便利だと思います。
http://manual.atmark-techno.com/armadillo-810/armadillo-810_product_man…
を参考にしてみてください。