3DCG屋さんの活動記録

PROFILE ★★こんな人です

3DCGを活用した映像や没入体験コンテンツの制作をしています。テクノロジーの社会実装に興味があり。テクニカルディレクター。面白いこと新しいことにワクワクする気持ちに『素直』でいつづける。

ラベル Processing の投稿を表示しています。 すべての投稿を表示
ラベル Processing の投稿を表示しています。 すべての投稿を表示

2019年4月12日金曜日

Arduinoと超音波センサーとProcessingで簡易モニター 検証


検証備忘録


仕事でAftereffecstのモーショングラフィック作業してるとき
ふと「キーで気持ち良いボヨヨンとかの動きをさっと作りたいので、PysicalUI作りたい。USB繋げてすぐセンシングして、テキストファイル書き出しして、AEにコピペして」みたいな完全オリジナルPUI作りたいと思って

帰ってから検証して見たのメモ。


実験
Arduino UNO + 超音波センサー
Processing + 可視化グラフ(まずは)
で
手を自由に動かしてインタラクティブにグラフ確認と、テキスト出力までしたい


結果
全然ダメ

超音波センサーは手のひらでセンシングすると20〜30cmくらいでもうノイズ目立ってくる。
まぁノイズなら調整で正せるかもだけど、反応性が悪い気がする。ついてこない。
(スケッチの問題だと思われる。時間かかるのでまた今度)



次のチャレンジ
MIDIコントローラのスライダーと
Processingを繋げてインタラクティブなUIとテキスト出力
したい!
➡️ここを参考にしてやりたい



とりあえず、今回試したスケッチはこちら。


Arduino



//********************************************************************
//*超音波センサを使って距離を表示するプログラム
//********************************************************************
//********************************************************************
//*超音波センサを使って距離を表示するプログラム
//********************************************************************
#define echoPin 3 // Echo Pin
#define trigPin 5 // Trigger Pin


double Duration = 0; //受信した間隔
double Distance = 0; //距離
void setup() {
Serial.begin( 9600 );
pinMode( echoPin, INPUT );
pinMode( trigPin, OUTPUT );
}
void loop() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite( trigPin, HIGH ); //超音波を出力
  delayMicroseconds( 10 ); //
  digitalWrite( trigPin, LOW );
  Duration = pulseIn( echoPin, HIGH ); //センサからの入力
  if (Duration > 0) {
    Duration = Duration/2; //往復距離を半分にする
    Distance = Duration*340*100/1000000; // 音速を340m/sに設定
    Serial.print(Distance);
    Serial.write("\n");
  }
  delay(1); //シリアルモニタで確認するときは100
}




Processing
/*
 * Arduino - Processingシリアル通信
 * センサーの値をグラフにプロット
 * Processing側サンプル
 */
import processing.serial.*;


int NUM = 1; //センサー個数。今回は1個。「ショックセンサーの例」では2個
Serial myPort; // シリアルポート


float sensors = 2; //センサーの値を格納する配列
int cnt; //カウンター


// グラフの線の色を格納
color[] col = new color[6];
int pSize = 2;  //異なる2つのプロットサイズで


void setup() {
  //画面設定
  size(1600, 400);
  frameRate(240);


  // シリアルポートのリスト取得
  //println(Serial.list());
  // ポート番号とスピードを指定してシリアルポートをオープン
  String portName = Serial.list()[1];
//  myPort = new Serial(this, portName, 9600); //Win
  myPort = new Serial(this,"/dev/cu.usbmodem1421",9600); //Mac
  // 改行コード(\n)が受信されるまで、シリアルメッセージを受けつづける
  myPort.bufferUntil('\n');
  //グラフ初期化
  initGraph();
}


void draw() {
  // センサーの数だけ、グラフをプロット 。今回は1個。複数個のときは「ショックセンサーのプログラム参照」
  fill(col[1]);
  float tx = map(cnt, 0, width, 10, width); //左に余白10
  float ty = map(sensors, 0, 100,height-10,10); //上端がy=0のため、下端をベースに描画するにはこのリマップ← ※上下余白 100
  ellipse(tx, ty, pSize, pSize);
  if (cnt > width) {
  initGraph();
  }
  //カウンタアップ
  cnt++;
}


//グラフの初期化
void initGraph() { 
  background(47);
  noStroke();
  cnt = 0;
  // グラフ描画の線の色を定義
  col[0] = color(255, 127, 31);
  col[1] = color(31, 255, 127);
  col[2] = color(127, 31, 255);
  col[3] = color(31, 127, 255);
  col[4] = color(127, 255, 31);
  col[5] = color(127);
}


void serialEvent(Serial myPort) {
  // シリアルバッファーを読込み
  String myString = myPort.readStringUntil('\n');
  // 読み込んだ文字列を 小数(数字)に変換して、関数に代入
  sensors = float(myString);
}





-----------

参考サイト
今後「Arduinoからのシリアル通信結果をProcessingでテキスト出力」はこれまんま
https://kenyu-life.com/2018/11/24/pulsesensortxtdata/




2018年1月11日木曜日

王道Kinect!まさかの生産終了!涙


人物の動きを検知する・・・手っ取り早いのはやはりKinectなのか!


ということでカメラについてまとめサイト!勉強になります
https://qiita.com/fukushima1981/items/77930d3775117d66e5e8


とここで、なんとKinectV2含む製品が製造終了していた!
2017年に。
追悼するまとめサイト、勉強になります
https://wpteq.org/xbox/post-34317/


KinectV2 + Processing + Mac のチュートリアルサイト
https://qiita.com/migizo/items/d0440e36d18f3fdde48c



とりま、今ある Kinect v1 + Processing + Mac で試す。
↓
今後:人のボーンを検出してParticleが寄ってくるエフェクト試す

KinectV2欲しい (在庫あるだけで、販売終了するから早く買わなきゃ)



パソコンで使うときには変換ケーブル必須!
kinectV1とは互換性ないので、新規で買わなきゃ・・・


にしても合計3万か。
この機能にしてはお買い得かな!
会社で5台くらい買ってもらいたい




========================
==  補足 2018.4.8 ============
========================

考えた末、将来性のあるIntel Realsenseを使って制作することに決めました。
KinectメーカーのMicrosoftoがおすすめするのがRealsenseだし
値段も機能も手が届きそう、ってことで!

Xtion2も悩んだけど、やっぱりここはKinectお墨付きのやつにしました。へへへ

にしもて、AppleがPrimeSense買収して、部品を外部に売らなくなったらKinectが製造中止になったってホント?ならひどーいぜよ。
RealSenseもKinet並みに自作ユーザーが増えてもらわないと、あまりにも情報が少なすぎるよ><;

ちなみに、Realsenseを試してみた処女記事はこちら。
https://dekapoppo.blogspot.jp/2018/04/realsense.html

2018年1月8日月曜日

Processingで画像の上に文字やら塗りやら


前回の『Processingで映像テスト』のスケッチを使って、色々試してみた





内容は
・カメラから映像取得して表示(反転表示=鏡)
・キーボードを一度押すと「塗り」エフェクト適用
 ・マウスの位置で色がリアルタイムに変動
・キーボードをもう一度押すとエフェクト解除


実行結果


text()  で文字表示
int() でfloatをintに変換
str() で数値を文字列に型変換
+ を使って文字列を結合

scale() で画像を反転
tint() で塗りつぶし



以上。
まだまだ基礎から



2018年1月6日土曜日

Processing カメラ映像の活用(超入門)


Processingでカメラの映像を使う、入門レベルのテスト!


・ライブカメラの認識
・ライブカメラの読み込み開始
・ライブカメラの読み込み停止


以下スケッチ例





こちら参考にしました!
・yoppaさんのProcessingと映像処理
・Processingとライブカメラ









2018年1月5日金曜日

ProcessingでopenCV始めました


カメラの映像を処理してインタラクティブコンテンツ作成
↓
openCVを利用する

Processing、マジでわかりやすい(簡単・・ではない!)
openFrameworks、やっぱりまだ早かったか><;


あと、思った以上にProcessingの組み方とopenFrameworksが近い。
処理速度はoFが速いというが、、まずはPrでやってみてからかな。
oFはPrの上位ツールってことでいいと思うので、今後!
移行するときはこちらを参考にさせてもらいます。


というわけで、こちらを参考にしてProcessing+openCVを試して遊んでみた。


※Processing標準のvideoライブラリは、追加インストールになりました。
Quicktimeの非対応に関係したものらしいです。
今回は、追加でインストールしてそのまま使ってますが、
今後は(videoライブラリじゃなくて)openCVの機能使ってみたい。



いつもながら、本当にありがとうございます!!!!


さて、というわけで
環境は

Processing
+
openCV
+
webカメラ(or Kinect)

で輪郭検出&パーティクル演出をまずはやる。



2017年6月21日水曜日

Macから空間演出用に映像出力テスト VDMX5+Syphon


やること

● Macから映像出力
PC画面でちょこちょこ制作している身から、空間演出に向けた最初の一歩


HDMIでテレビモニターに出力とか、
DisplayPortをVGAに変換してプロジェクターに出力とか、
最近だとHDMIでプロジェクターに出力、とか

は、やっていた。
ただどれも画面の「ミラーリング」でしかなかった。

最終的には、VJライクで僕自身もPCで制御した映像演出をするかもしれないし
少なくとも現場で準備・セッティングしたりオペレーションしたりするときは
出力モニターへ「最終絵」と、オペレーションMacでの「作業画面」を分けなきゃ。

で、今までどうすっぺと思いながらモヤモヤしていましたが、
解決しそうなのでメモ。



●今回テストしたのは以下の環境
Mac VDMX ===AirPlay(Fire TV Stick)==>  テレビモニター

結果は・・・超絶かんたん!

手順はこのサイトを参考にさせてもらいながらやりました

①VDMXインストール(無料版あり。設定保存できないので、毎回やる必要あり)
②AirPlay接続、ディスプレイ設定でミラーリングをOFF
③VDMX起動、window/FullScreenOption/FullScreenで出力モニター選択

以上!簡単でしょ?




●今後の映像コラボを考えてSyphon使ってみる

oF、Processin、Blender、 Unity、UEとかの映像をSyphonを使ってVDMXに送信。
あとは上記と同じでモニターに出力。

と言うかSyphon使ったことなかったので、
それが Macに入っているのか、どうやって使うのか全くわからない。
調べりゃわかるだろう、とたかをくくっていたら・・・さぱり笑

結局、最初から入っているが
ServerとCliantがある。
これはMayaのBackburnerのサーバーとマネージャみたいなものかな?
と言うわけで、とりまProcessingの絵を Syhpon通してVDMXに送ってみる


まずは、ProcessingにSyphonのライブラリを追加。

スケッチ例をダウンロードして実行。
※実行画面が表示されない><?Syphonに飛ばすときはウインドウ表示されない?
これで、SyphonのServerに映像が送られた状態に!

ここで、VDMXから新規クリプ作成でSyphonを選択するとリストにProcessingが!

選択して映像出力!

わお簡単☆


以上。

このSyphonのServerとやらで
iPhoneのカメラ映像をリアルタイムに飛ばすに、しかもやり方によっては複数台同時に
VDMXで合成できるようです。すごい。・・・


今回は、空間演出したい!って思ってずっとやってみたかったことができた。


・ワイヤレスで最終映像の出力
 (MacBookはオペレーション画面)の成功
    ➡︎ FireTV Stick、 AirPaly、 VDMX

・Syphon使った映像転送・受信の成功
    ➡︎ Syphon(Server)、ProcessingのSyphonライブラリ、 VDMX


頭で理解するだけじゃなくて、実際手を動かして試してみるのはやらなきゃダメだ。
さてさて、これにKinect(Openpose)やゲームエンジン(BGE,UE,Unity)、Arduinoなど
混ぜて復号システムでインタラクティブなコンテンツ作りたいので、まだまだやることあるわ〜。
楽しいけど、、仕事と子育て(家事)で時間が取れず思うようにカタチにならない><;
頑張るぞ!




※おまけ 色々サイト

VJソフトまとめサイト 
・・・プロジェクションする形状変えれるMadmapper気になってるけど、
   一番オススメしてたVDMX使ってみた。確かにVJ(リアルタイム合成)ならこれか。

屋外100mで映像送るとき
・・・結論はHDMIは短距離専用なので、SDIに変換して送る。
   PC =HDMI=> HDMI-SDIコンバータ =SDI=> SDI-HDMIコンバータ =HDMI=> PJ
   と言うかコンバータ安い!Blackmagic製だし欲しい・・・公式サイト
   だって、コンパクトで機能十分で9800円!
   最低2台+ケーブル類だとしても3万円で100m出力システムができる!?

Syphon(Server)に対応していないソフトを力技でSyphonに飛ばす方法
・・・架空サブディスプレイ作成して、そこに表示されたものを飛ばす方法らしい。
   ただ、不具合エラー率がかなり高いとのこと。。。最終手段?



2017年6月3日土曜日

Processingの画面キャプチャのテクニック


Processingの再生される画面をキャプチャしたい!
そんなときありませんか?

僕は、CG合成につかいたいなってとき、キャプチャしてましたが
細かいところで不満がいろいろありました。

それをほぼ全て払拭してくれる動画発見!
Daniel Shiffmanさんはたくさんチュートリアルをアップしてくれている方。
いつもありがとうございます。




解説の流れとしては・・・
①キャプチャして連番画像を保存する方法
②デフォルト機能で動画に変換する方法
③キーボード押したときだけキャプチャする方法(再生してる間ずっとじゃなくて)
④キャプチャ状況の表示ボタン(保存される画像には映らない!)
⑤実行中のfpsが落ちても動画変換の際に補正される方法

いやぁすごい。
必読!!!!!




2017年5月11日木曜日

KinectでBVH作成(調査編)


他の記事でやっていた、Blenderを介したKinectのモーションキャプチャ&BVHの取得。
ただやってみたものの、Blenderを介すロスや不確実性があるし、
何よりArmatureの設定とかキーが打たれたロケータから骨にキーをコピーする方法がわからない。

ということで、NI MATE Pro(月二千円)を買うのをまだためらっているので
とりま無料できる方法を探す!
ありました!

ProcessingでKinectハックして、ジョイント情報を取得


BVHの書き出しまでは載っていなかったけど、ジョイント情報の出力はあった。
てことは、それをテキストに保存して、最後に変換かけたりしたらBVHになるのでは?

試してみたらまた報告します!!!


BVH(BioVisionHierarchy)とはなんぞや
・右手系
・骨の階層構造記述 HIERARCHY ➡︎ 動き記述 MOTION の2部構成



2017年3月3日金曜日

風船ポンポン 1.入力装置作成


ずっとやりたかった、風船を使ったインタラクティブな作品にとりかかります!
目標は、1ヶ月間でこどもに遊んでもらえるようなカタチまで作る

・・・頑張ります!汗

これ、本当は昨年末のクリスマスに大々的に実践したかったんですが、
当時は公私でバタバタしてて自主制作どころじゃなかったです。。
海外から極小Arduinoとか面白アイテムとか大量に買い込んでたんだけどなぁ、トホホ。
結局、風船にレインボーLED入れて床に置いただけでした。
それはそれで、子供もはしゃいで楽しんでくれたのでよかったですけどね!

 やっぱり「触れる」のって楽しい!
 2016.クリスマス



さて、とりあえず今回は、風船タッチテストに便利なように入力装置作ってみた。
風船の中にショックセンサー入ってます。
空気抜けないように、ホットボンド多用しました。

データの流れは
風船の中のショックセンサー → Arduino → Mac (Processing)

とりあえず今日はここまで笑。



以下は、昨年末のショックセンサー初テストメモ(書きなぐりですが)を転載。
yoppaさんのサイトにはいつもお世話になってます。

---------------------
2016.10.15 memo
---------------------

初のアナログデータのグラフ(プロット)視覚化!!!!たのしい。
ショックセンサーからArduinoにアナログ入力(0~1024)、
それをProcessingでグラフ化!!

今回のミソ
※複数個のデータが1つにまとまったデータ群(時系列データ)のシリアル通信 ★★
→要は、Arduinoで , で区切ってひとまとめにして送信。Processingで , で区切って分解。



【テスト】

目的:
ショックセンサーの入力をProcessingに送信してビジュアル化

手順:
①ショックセンサーから値入力 (アナログ 0~512)
 それをArduinoで 0~255にリマップ

②シリアルでProcessingに通信。 <ここまでArduino処理>
 ・・・例: 0,0 \n 512,255 \n 200,100 

③Processingでグラフにプロット , を読み取り値を分解。
   シリアル通信を読み取る。読み取ったデータをyの値としてsensors[]に一旦格納。
 それをx方向に追加していく。端までいったら新しいページに描画。

以下スケッチ
===========Code: Arduino ===============

===========Code: Processing=============


スケッチと実行結果
横が時間軸、センサーが反応したところで点が上下している。

2017年2月24日金曜日

Processingでサイン波 


超基本(?)ですが、いまさらながらサイン波

そのままではおもしろくないので、X方向に明るさのことなる点を作成して
それをサイン波で動かす。



さらに、マウスの位置でインタラクティブに変動するように。


実行結果↓



ちなみに今回からGist使ってみました!
プログラムを載せるのに便利、色変わるのとか、行番号とか!
こちらのブログを参照させてもらいました。

正直、GitHubのアカウント作ってたけど全然活用してなかった。
でもこれからはBlog用にGist多用すると思われます。
便利なものがたくさんありますね。

2017年2月23日木曜日

Processing で音連動サイン波


綺麗な映像作りたい!ということで



これ。
「Houdini、NUKE、Aftereffects、Processing使ってるよ」って書いてるけどどこをどうやってるのかわからず悩んでたら、以下の動画で解説してくれてた。




要は、、

Processingでグレースケールのサイン波を作成(音連動)
↓
サイン波素材から、AftereffectsのForm(プラグイン)でパーティクル作成


おーFormってOBJファイルからもパーティクル読み込めるみたい。
さらにOBJシーケンスも行けるとのこと。
使ってみたいなぁ。



というわけで今回は、グレースケールのサイン波素材を作ります。
音に連動したやつ、もろに参考のような動きを目指して☺️


2017年2月15日水曜日

Processing で3D描画


日頃、3DCGソフトのビューポートで、空間をぐるぐるしてますが、自分で改めてプログラムすることでカメラの基礎トランスフォームを再認識。

あとopenGLを使うということにゾクゾク!

リアルタイムにぐるぐるするのって、
単純でもやっぱり楽しい!

processing_line3D from dekapoppo on Vimeo.

こんなに簡単に3Dできるなら、
こんな感じのコンテンツ、作ってみたいなぁ。
ただ、身体経験と繋げたい。
「探る余地」を残す。

2017年2月8日水曜日

Processing OPPとクラスのお勉強3


色をランダム、フルスクリーン。
また、スクリーンサイズと丸の数だけ指定すれば、
丸の位置やサイズは自動で計算されるように改良。

見返さずにゼロから作成。。。なかなか覚えられない!
とにかく書いてテクニカルな障壁は早く解消したい。



以下スケッチ

int spotsNum  = 50;


Spot[] spots = new Spot[spotsNum];

void setup(){
  //size(600,200);
  fullScreen();
  smooth();
  noStroke();
  //配列の数だけパラメーた作成
  for (int i = 0;  i  < spots.length;  i++){
    float x = width/spots.length * i;
    float speed = random(1,5);
    color col = color(random(255),random(255),random(255));
    //インスタンス化
    spots[i] = new Spot( new PVector(x,30),width/spots.length,speed,col);
  }
}

void draw(){
  fill(0,12);
  rect(0,0,width,height);
  for(int i=0; i < spots.length; i++){
    spots[i].move();
    spots[i].display();
  }
}

class Spot{
  PVector pos;
  float  diameter;
  float speed;
  color col;
  int direction = 1; //方向
  //コンストラクタ
  Spot(PVector _pos, float _diameter, float _speed,  color _col){
  pos = _pos;
  diameter = _diameter;
  speed = _speed;
  col  = _col;
  }
  //アニメ
  void move(){
    pos.y += speed * direction;
    if(pos.y < height/spots.length || pos.y > height-height/spots.length){
     direction *= -1;
    }
  }
  //表示
  void display(){
    fill(col);
    ellipse(pos.x, pos.y, diameter, diameter);
  }
}

2017年2月3日金曜日

Processing OPPとクラスのお勉強2


前回の続きで、yoppaさんの講義を進めてみます!
Processingでオブジェクト志向プログラミング

とりあえず、講義のまま
プログラムを書いて書いて書いて、体で覚える!!!
次のようなステップアップレッスンでした。

①クラス使わずに丸描画
②クラスを使って丸描画
③クラスを使って、移動する丸を描画
④クラスを使って、移動する丸を複数描画
⑤クラスを使って、移動する丸を大量複製描画(for文)






最終的に、
100個インスタンス化して、
色をランダムにしてみた。


color型使い勝手がわからず苦戦!
『new』をつける・つけないの違いがわからない。。
とりあえず解決したからいいか。


参考サイト
color型について

2017年2月2日木曜日

Processing OOPとクラスのお勉強


・・・恥ずかしながら、サンプルスケッチがわからん!笑ということで
基礎の基礎のお勉強からしていこうと思います。


yoppaさんの講義でお勉強させてもらいました!(感謝)
Processingでオブジェクト志向プログラミング



・クラスの作成(定義?)
・クラスに動作を実装
・オブジェクトを宣言
・オブジェクトの作成=インスタンス化


PythonはMayaのスクリプト制作でなんだかんだ2年使ってきたので、
今回のOOPの説明は今までよりは理解できたと思います。。


とは言ってもまだまだPythonの方がサクサク使える感じ。
Processing(java)も時間かけて修得していきますか。
最終的にはopenFrameworks(C)で、ガシガシやって速く動くリアルタイムシステム作るようになりたい!!!

2017年2月1日水曜日

Box2d for processing 使ってみた


なかなかProcessing の勉強が進まないので、、
とりあえず物理シミュレーションを「使ってみる!」ということで
Box2Dのサンプルを少し変えてみることから始めてみました。


BumpySurfaceNoiseを使いました。

目標
・box2dのプログラムを理解。落下、衝突、などの基礎部分の理解。
・ノイズの地面を、手描きにカスタマイズできるようになる

進捗
・box2d.step() で落下が始まる
・particles.size() でオブジェクト数が取得できる

やってみたこと
・今回は、初期状態では重力がなく、マウスのドラッッグで文字が書ける。
・g キーを押すと重力が発生して落下する。
・オブジェクト数を画面に表示する




マウスで文字書ける(オブジェクトは落下しない)


gキー押すと一気に落下開始!



ぐわー


ガラガラ!画面上のカウントも変化しています。






以上。
こんなペースで進めていこうと思います(汗)
今年中には何か具体的な作品を作りたいです!!!


=====BumpySurfaceNoise=========
// The Nature of Code
// <http://www.shiffman.net/teaching/nature>
// Spring 2010
// Box2DProcessing example

// An uneven surface

import shiffman.box2d.*;
import org.jbox2d.collision.shapes.*;
import org.jbox2d.common.*;
import org.jbox2d.dynamics.*;
import org.jbox2d.dynamics.*;

//dekapoppo
int grav = 0; //重力のON

// A reference to our box2d world
Box2DProcessing box2d;

// An ArrayList of particles that will fall on the surface
ArrayList<Particle> particles;

// An object to store information about the uneven surface
Surface surface;

void setup() {
  size(500,300);
  smooth();

  // Initialize box2d physics and create the world
  box2d = new Box2DProcessing(this);
  box2d.createWorld();
  // We are setting a custom gravity
  box2d.setGravity(0, -20);

  // Create the empty list
  particles = new ArrayList<Particle>();
  // Create the surface
  surface = new Surface();
}

void draw() {
  // If the mouse is pressed, we make new particles
  if (mousePressed) {
    float sz = random(2,6);
    particles.add(new Particle(mouseX,mouseY,sz));
  }
 
  //dekapoppo
  if(key == 'g'){
    if(grav == 1){
      grav = 0;
    }
     else if (grav ==0){
       grav = 1;
     }
  }
  // We must always step through time!
  if(grav  == 1){
    box2d.step();
  }

  background(255);

  // Draw the surface
  surface.display();

  // Draw all particles
  for (Particle p: particles) {
    p.display();
  }

  // Particles that leave the screen, we delete them
  // (note they have to be deleted from both the box2d world and our list
  for (int i = particles.size()-1; i >= 0; i--) {
    Particle p = particles.get(i);
    if (p.done()) {
      particles.remove(i);
    }
  }

  // Just drawing the framerate to see how many particles it can handle
  fill(0);
  text("framerate: " + (int)frameRate,12,16);
  text("count: "+(int)particles.size(),12,32); //パーティクル数のカウント
  text("press G key  GravityON",12,48); //はじめ重力なし。gキー押すと落下する。
}

2017年1月12日木曜日

Processing openCVで動体認識


openCVで動体認識

processing openCVを使って、遠景動画で動体認識してみました。
サンプルの BackgroundSubtraction をそのまま使ってます。
動画だけ別途用意してみました。



opencv.startBackgroundSubtraction(30,100,0.4)
で背景の閾値を調整するようです。
()の中身は・・・よくわかりませんでした。

(①,②,③)としてなんとなく
①?
②動体認識が消えるまでの時間?
③判定感覚時間?(用意した動画が30fpsなので1/30=0.033333より大きい数字に)

本当簡単に試せてProcessingの魅力を改めて感じます。
ただ、ちゃんとライブラリを理解して作り込むには、まだまだ勉強せねば。


これを応用して、動体検出 ➡︎ 輪郭検出➡︎ box2Dの衝突判定
と進めて行こうと思います。

当面の目標はこれ!!
Kinect・・・Processingではまだ未使用だけど、やっぱり便利なのかな



2017年1月9日月曜日

box2D for Processing で物理挙動を試す


processingってライブラリの追加が簡単だから便利です。


今回は物理シミュレーションを簡単に使える
box2Dを試してみます。

Processingのツールバーから
スケッチ/ライブラリをインポート
で「box2D for Processing」を検索してDL。

DLインストール後、再起動すると
サンプルを確認することができます。

以下、最初から入っているサンプルをまとめてみました。


=========================
①ApplyForceAttractMouse
自動で□がランダムに落下。
マウスをクリックすると、カーソルに□が引き寄せられる。


②ApplyForceSimpleWind
自動で□がランダムに落下。
マウスをクリックすると、右向きの風が吹く。



③AttractionApplyForce
可動サークルと引力サークル。
自動で引き寄せられる。




④Blobby
繋がった◯の輪が落下してきて、
ソフトボディ的な挙動を示す。


⑤box2d_exercise_solved
マウスクリックで□が生成。。
重力落下。
床なし画面から消える。



⑥box2d_exercise
マウスクリックで□が生成。
位置固定。




 
⑦Boxes
□が自動生成。
重力落下。
既存の床で干渉。


⑧BridgeExample
サークルで可動の橋。
マウスクリックで□が生成。
重力で落下。



⑨BumpySurfaceNoise
既存の床(ノイズ形状)。
マウスクリックで◯が生成。
重力落下、干渉。



⑩BumpySurfaceSine
既存の床(サイン波形状)。
マウスクリックで◯が生成。
重力落下、干渉。




11 .BumpySurfaceStraightLine
既存の床(直線形状)。
マウスクリックで◯が生成。
重力落下、干渉。



12 .CollisionListening
自動で◯が降ってくる。
床に落下。
◯同士が触れると赤に変色。



13 .CollisionListeningDeletion
自動で◯が降ってくる。
床に落下。
◯同士が触れると赤に変色。
一定時間で◯は消滅。



14 .CollisionAndControl
自動で◯が降ってくる。
床なし画面から消える。
□に干渉、触れると赤く変色。
マウスドラッグで□を引っ張れる。



15 .CollisionAndControllnterface
自動で◯が降ってくる。
床なし画面から消える。
□に干渉、触れると赤く変色。
マウスドラッグで□を引っ張れる。
□は◯との干渉で回転する。



16 .DistanceJoint
マウスクリックで2個◯が繋がったものが生成。
びよんびよん、と伸び縮み。




17 .Liquidy
マウスクリックで放出口生成。
自動で水が出続ける。



18 .Mouse
□が重力落下。
□をドラッグで引っ張れる。
上下左右の壁に干渉。



19 .MultiShapes
既存の床に干渉。
重力落下。
マウスクリックでオブジェクト生成。



20 .Polygons
既存の床に干渉。
重力落下。
マウスクリックでオブジェクト生成。



21 .RevoluteJoint
◯が自動で落下。
下にある回転棒が、マウスクリックで回転。
重力落下、棒に干渉。


=====================

以上。


試してみるだけでも全部面白いですが、
個人的には1,2,8,14が好き。
いろいろカスタマイズしてみたいです。