ProcessingでUSBにつないだWebカメラを使おうと思って、どっかからコードスニペットを拾ってきて、「動かねー!」ってなってるとき。
だいたい「Processing カメラ」とかで検索して「WinVDIGを入れろ」とか「バージョンは1.0.1にしろ」だとか「problem connecting video output to video renderer って出る」とか・・・
なんですけど、ちょっとストップ。
実はこれら、みんなProcessing 1.x系のtipsです。2.0からWebカメラの使い方が変わってるので、上のような情報はスルーしてください。
1.xだったら、Webカメラを使うときは
というように書いていましたが、
2.0からは
という風になります。
参考になりました!ありがとうございます
返信削除コメントありがとうございます!
返信削除この問題に対してずっと悩んでました。
返信削除参考になりました。有り難うございます!
コメントありがとうございます!
返信削除こんにちは。
返信削除Processing2.1.2を使用しています。
上記プログラムを入力してみましたが、グレーのWindowが出るのみ・・・
何か対応策をご存知でしたら、教えてください。
Frogさん、こんばんわ!
削除コメントありがとうございます。
Processing 2.1.2が既にDLできず、私の環境では再現できないのですが、まず上記コード10行目の
capture.start();
を忘れていないか、確認してみてもらえますか?
次に、ウェブカメラのモードやデバイスが複数あって正しく選べていないかもしれないので、次のコードを動作させて、コンソールに何が出るか見せてもらえますか?
import processing.video.*;
Capture capture;
void setup()
{
String[] cameras = Capture.list();
for (int i = 0; i < cameras.length; i++) {
println(cameras[i]);
}
}
こんにちは。
削除早速のご返答、ありがとうございます。
まず、capture.start();の書き忘れはありませんでした。
次にコードを実行した結果ですが、
name=Lenovo EasyCamera,size=1280×720,fps=30
と言った形で、sizeの違うものが合計12個ズラッと並んでいます。
中にはfpsの違うものも2つあります。
確認ありがとうございます。
削除Lenovoマシンのビルトインカメラですね。他のUSBカメラの接続はないですよね?
カメラがデータを用意できているかの確認のため、draw()内に
println(capture.available());
を入れてみたら、どうなりますか?コンソールにtrueと出ることはありますか?
また、setup()内で
capture = new Capture(this, cameras[0]);
の替わりに
capture = new Capture(this, 1280, 720, "Lenovo EasyCamera", 30);
等と記述したらどうでしょうか?
おはようございます。
削除ご推察のとおり、Lenoveマシンについているカメラを使用したいと思っています。
draw()内にprintln(・・・を入れた結果ですが、
falseでした(^^;
setup()内のcapture = new Capture(・・・を変更した結果、
変化はありませんでした。
これは、そもそもカメラと通信ができていないということでしょうか?
カメラそのものの存在は見つけられているようですが、カメラからフレームデータを取得できていないためtrueにならないんだと思います。
削除Processing以外のカメラを使うアプリケーション(Skypeなど)では正常に映るでしょうか?
また、もし他にUSB接続のウェブカメラがあれば、それでも試してみると切り分けの参考になります。
パソコンに付属のソフト(今、名前がわかりませんが)では普通に写っています。
削除他のUSB接続Webカメラは持っていません。
これがうまくいったら、購入して広範囲の撮影をしたいと思ってはいるのですが。
色々とありがとうございます。
フレームデータを取得・・・別の命令などがあるのでしょうか??
そのあたりをまた、調べてみます。
何か解決策等あれば、また教えてください。
度々すみません(・・;
削除GSVideoライブラリというものを見つけまして。
ダウンロードしてmodes\java\librariesにコピーして、下記のプログラムを実行したところ、画像が表示されました。
import codeanticode.gsvideo.*;
int w_img = 640;
int h_img = 480;
int p_text_size = 30;
int fps = 24;
GSCapture cam;
void setup() {
size(w_img, h_img);
String[] cameras = GSCapture.list();
if (cameras.length == 0){
println("There are no cameras available for capture.");
exit();
}
else {
println("Available cameras:");
for (int i = 0; i < cameras.length; i++) {
println(cameras[i]);
}
cam = new GSCapture(this, w_img, h_img, cameras[0]);
cam.start();
}
}
void draw() {
frameRate(fps);
if (cam.available()) {
cam.read();
image(cam, 0, 0);
}
}
GSVideoライブラリはまだ中身をしっかり確認しておりませんが、
この中の何かが、解決の糸口?だったようです。
また勉強します。
本当にお世話になりました!
ありがとうございました!!
解決のご報告ありがとうございます!よかったですね。
削除ウェブカメラとProcessingの間で、データフォーマットの対応などで相性が悪く、それをGSVideoのライブラリがカバーしたっていう感じでしょうか。
このコメントは投稿者によって削除されました。
返信削除