概要
leJOSはEV3専用のJVM(Java Virtual Machine)です.この記事ではEV3に繋げたカメラの映像をネットワーク経由でPCに送信し,OpenCVを使って顔認識をするところまでの手順を説明します.その応用例はこの記事を読んでいるアタナ次第です!
環境
- LEGO mindstorms EV3
- leJOS 0.9.1-beta
- カメラ(本記事では,ロジクール ウェブカメラ C270で動作確認済 )・・・カメラは対応しているものが限られているのでこれ以外のものを使う場合はよく調べてから用意してください.
まずはEV3のカメラの映像をPCに送る
EV3に繋がれたカメラからフレームを取得しソケット通信でPCに送る.行数が多くなるのでimport文は省略しています.(ちなみに,著者はeclipseを使っているので使用しているので,import文はほぼ全てeclipseにまかせています.)
EV3側のプログラム
Stream.java
public class Stream {
private static final int WIDTH = 160;//フレームの横幅
private static final int HEIGHT = 120;//フレームの縦幅
private static final String HOST = "192.168.2.1";//サーバーのアドレス(ここではPCのIPアドレス)
private static final int PORT = 55555;//ポート番号(任意)
public static void main(String[] args) {
EV3 ev3 = (EV3) BrickFinder.getLocal();//EV3本体
Video video = ev3.getVideo();//カメラ
try {
//カメラをオープンして使える状態にする.
video.open(WIDTH, HEIGHT);
} catch (IOException e) {
e.printStackTrace();
return;
}
//フレームを取得する.
byte[] frame = video.createFrame();
//ソケットの準備
Socket sock;
BufferedOutputStream bos;
try {
sock = new Socket(HOST, PORT);
bos = new BufferedOutputStream(sock.getOutputStream());
}catch (IOException e) {
e.printStackTrace();
return;
}
//Escapeボタンが押されるまで繰り返す.
while(Button.ESCAPE.isUp()) {
try {
video.grabFrame(frame);//現在のフレームを取得する
bos.write(frame);//BufferedOutputStreamに書き込む
bos.flush();//バッファの内容を出力する
} catch (IOException e) {
break;
}
}
//プログラムの最後にはopenしたものをすべてcloseする.
try {
bos.close();
sock.close();
video.close();
} catch (IOException e) {
return;
}
}
}