GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
がじぇるね岡宮です。
画処理ミドルのおおまかな作りこみを終えまして、現在Webコンパイラへのアップに向けて最終確認をしてます。
ちょっと、bin出力で問題が発生していまして、解決方法を考え中です。ざっと今回作成したImageライブラリのヘッダを添付していますが、大まかな使い方をお伝えしたいと思います。
(動体検知をSDライブラリで保存したところ)
以下は、写真を3枚連続で撮って、動体検知を行い、出力画像をJPEGにしてSDにどんどん保存するサンプルです。相変わらず貼り付けるとタブがなくなってみづらいですがご容赦ください。
基本的な流れはcaptureStartして、isCaptureFinishedで待ち、createGrayImageを作ります。その後movingDetectionで動体検知をし、getMovingNumberで動体の数、getMovingAreaで一番大きな動体があるエリアを取得できます。検知したときの画像も同時に生成されるので、それをcreateJpgでJPEGファイルにします。getCreatedJpgでオブジェクトのアドレス、getCreatedJpgSizeでオブジェクトのサイズが分かるので、これをSDライブラリで書き込めば、動体検知カメラの完成です!
ちなみに、人物検知のライブラリもありますが、暗いとうまいこと検知せず、最適な距離は4mということで、家の中でのサンプル作成はやめました。
純正CCRXでのサンプルは、このJPEGをCGIで更新していますが、Arduinoライブラリでの作成はまだ試せていません。
#include <Arduino.h>#include "Image.h"#include "SD.h"
Image image[3];
void setup(){ Serial.begin(9600); while(!Serial.available()); // wait to press key Serial.read(); //dummy Serial.println("start");
if(!SD.begin()){ Serial.println("Card failed, or not present."); } else { Serial.println("Success to access SD."); }
for(int i = 0; i < 2; i++){ image[i].begin(); }
}
void loop(){
static int cnt = 0;
for(int i = 0; i < 3; i++){ Serial.print("Capturing image"); Serial.println(); image[i].captureStart(); while(!image[i].isCaptureFinished()); image[i].createGrayImage(); } if( 0 == image[2].movingDetection(image[0].getCreatedGrayImage(), image[1].getCreatedGrayImage())){ Serial.println("finish detection"); Serial.println(image[2].getMovingNumber()); Serial.println(image[2].getMovingArea(0)); } image[2].createJpg();
char fn[50]; cnt++; sprintf (fn, "test%d.jpg", cnt); File file = SD.open(fn, FILE_WRITE); uint8_t* adr = image[2].getCreatedJpg(); int32_t size = image[2].getCreatedJpgSize(); for (int i = 0; i < size; i++){ file.write(*adr); adr++; } file.close();
やっとSDカードに画像が記録できました。ちょっとピントが合っていなく、レンズを回して位置をずらしても、フォーカスがうまく
合わないですね。あと、赤く影が写りますね。プログラムを書いて、teratermを起動して、シリアル接続すると、以下が表示されました。その後、SDカードリーダーでPCで表示するとJPEGの記録画像が何枚か映りますね。teratermをつないだ時、以下のように00とか15とか表示されますが、これは何を表すのでしょうか?
start Success to access SD.
Capturing image
finish detection
0
1
5