開発環境
言語
- Processing 3.1.1
eclipseを使用し、core.jarをインポートした環境でコーディングしているため、ProcessingのIDEでは実行できません。
参考URL
http://hiroyukitsuda.com/archives/1721
- java 1.8.0_91
API
- Video
動画ファイル、ライブカメラ等の映像を扱う機能を提供
https://processing.org/reference/libraries/video/index.html
- OpenCV for Processing
画像処理・画像解析および機械学習等の機能を提供
https://github.com/atduskgreg/opencv-processing
OS
- macOS sierra 10.12.6
フロー
1.setup
1.1 動画ファイルを指定
1.2 検知対象を設定
1.3 再生設定
2.draw
2.1 OpenCVが検知した対象を配列に格納
2.2 検知対象を四角形で表示
コード
package detection.phase1; import java.awt.Rectangle; import gab.opencv.OpenCV; import processing.core.PApplet; import processing.video.Movie; public class WalkerDetection extends PApplet { Movie movie; OpenCV openCV; Rectangle[] detectsFromOCV; public void settings() { size(1280, 720); } public void setup() { //動画ファイルを指定 movie = new Movie(this, "umeda_rain.m4v"); openCV = new OpenCV(this, width,height); //検知対象に歩行者を指定 openCV.loadCascade(OpenCV.CASCADE_PEDESTRIAN); //ループ再生 movie.loop(); movie.play(); //再生スピード movie.speed(1); } public void draw() { //動画をメモリに展開 image(movie, 0, 0); openCV.loadImage(movie); //OpenCVで検知したオブジェクトを配列に格納 detectsFromOCV = openCV.detect(); //検知対象を四角形で表示 noFill(); stroke(255, 0, 0); strokeWeight(3); for (int i = 0; i < detectsFromOCV.length; i++) { rect(detectsFromOCV[i].x, detectsFromOCV[i].y, detectsFromOCV[i].width, detectsFromOCV[i].height); } } //映像フレーム毎に自動呼び出しされるイベント public void movieEvent(Movie m) { //現在のフレームを読み込み m.read(); } //キー押下 public void keyPressed() { //Spaceキー if(key == ' '){ //一時停止 movie.pause(); } //ENTERキー if(key == ENTER){ //再生 movie.play(); } } public static void main(String[] args) { PApplet.main(WalkerDetection.class.getName()); } }