開発環境
言語
- 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());
}
}