Skip to main content

GR-KAEDE 特設:カメラで動体検知をしてみよう!

概要

GR-KAEDE用のカメラモジュールを接続し、カメラの画像や動体検知のサンプルをご紹介します。WindowsとMacで利用可能です。なお、初めてお使いの方は「はじめてのKAEDE」を参照してください。


準備

ハードウェア

GR-KAEDE、カメラ搭載用シールド、カメラモジュールを以下のように接続します。他に、USBケーブル(Micro B)を準備してください。

ソフトウェア

DisplayAppをダウンロードして解凍してください。PCでカメラの画像を確認するためのアプリケーションです。

Image
GR-KAEDEカメラモジュール(オプション)
Image
usb-cable

カメラの画像を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キーを押すと画像の転送レートが表示されます。

Image

動体検出サンプル

以下のプログラムを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で動体の位置を確認することができますので、試してみてください。

Image

Support

Support Communities

Support Communities

Get quick technical support online from Renesas Engineering Community technical staff.
Browse Articles

Knowledge Base

Browse our knowledge base for helpful articles, FAQs, and other useful resources.
Submit a Ticket

Submit a Ticket

Need to ask a technical question or share confidential information?