概要
GR-KAEDE用のカメラモジュールを接続し、カメラの画像や動体検知のサンプルをご紹介します。WindowsとMacで利用可能です。なお、初めてお使いの方は「はじめてのKAEDE」を参照してください。
準備
ハードウェア
GR-KAEDE、カメラ搭載用シールド、カメラモジュールを以下のように接続します。他に、USBケーブル(Micro B)を準備してください。
ソフトウェア
DisplayAppをダウンロードして解凍してください。PCでカメラの画像を確認するためのアプリケーションです。
- Windows版
DisplayApp File (Windows) (ZIP) - Mac版
DisplayApp File (Mac) (ZIP)
画像
画像
カメラの画像をPCで表示する
以下のプログラムをGR-KAEDEに書き込んでください
#include <Arduino.h>
#include "Image.h"
Image image;
void setup(){
Serial.begin(57600);
image.begin();
}
void loop(){
uint8_t headder_data[12] = {
0xFF,0xFF,0xAA,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
image.captureStart();
while(!image.isCaptureFinished());
image.createJpg();
uint8_t* adr = image.getCreatedJpg();
int32_t size = image.getCreatedJpgSize();
headder_data[8] = (uint8_t)((int32_t)size >> 0);
headder_data[9] = (uint8_t)((int32_t)size >> 8);
headder_data[10] = (uint8_t)((int32_t)size >> 16);
headder_data[11] = (uint8_t)((int32_t)size >> 24);
for (int i = 0; i < sizeof(headder_data); i++){
Serial.write(headder_data[i]);
}
for (int i = 0; i < size; i++){
Serial.write(*adr);
adr++;
}
}
DisplayAppを起動すると、シリアルポートが表示されます。Windowsの場合はCOMxx、Macの場合は/dev/xxxがポート名として表示されますので、それをクリックしてください。カメラの画像がDisplayAppに表示されます。F1キーを押すと画像の転送レートが表示されます。
動体検出サンプル
以下のプログラムをGR-KAEDEに書き込んでください。
#include <Arduino.h>
#include "Image.h"
Image image[3];
void setup(){
Serial.begin(57600);
image[0].begin();
}
void loop(){
uint8_t headder_data[12] = {
0xFF,0xFF,0xAA,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
static int cnt = 0;
while(cnt < 2){ //necessary at least two image in the past.
image[cnt].captureStart();
while(!image[cnt].isCaptureFinished());
image[cnt].createGrayImage();
cnt++;
}
image[cnt%3].captureStart();
while(!image[cnt%3].isCaptureFinished());
image[cnt%3].createGrayImage();
// Moving detection
if( 0 == image[cnt%3].movingDetection(image[(cnt-2)%3].getCreatedGrayImage(), image[(cnt-1)%3].getCreatedGrayImage())){
//do nothing
}
image[cnt%3].createJpg();
uint8_t* adr = image[cnt%3].getCreatedJpg();
int32_t size = image[cnt%3].getCreatedJpgSize();
headder_data[8] = (uint8_t)((int32_t)size >> 0);
headder_data[9] = (uint8_t)((int32_t)size >> 8);
headder_data[10] = (uint8_t)((int32_t)size >> 16);
headder_data[11] = (uint8_t)((int32_t)size >> 24);
for (int i = 0; i < sizeof(headder_data); i++){
Serial.write(headder_data[i]);
}
for (int i = 0; i < size; i++){
Serial.write(*adr);
adr++;
}
cnt++;
}
DisplayAppで画像を表示してみましょう。今度は、動きのあった部分が赤くマーキングされていることが分かります。
本サンプルはGR-KAEDEのImageライブラリのmovingDetectionを使用して、動体検知を行っています。getMovingNumberで動体の数、getMovingAreaで動体の位置を確認することができますので、試してみてください。