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関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
ide4grのGR-LYCHEE(opencv)のサンプルスケッチのFaceDetectionDisplay_LCDとWavPlayBackを組み合わせて顔検出時に音声を再生しようとしているのですが、setupブロックに書いたものは再生され、loopブロックに書いたものは再生できません。解決策はないでしょうか?よろしくお願いします。
// Face detection example with OpenCV// Display an image on LCD // Public Domain
#include <Arduino.h>#include <Camera.h>#include <LCD.h>#include <opencv.hpp>#include "SdUsbConnect.h"#include "mbed.h"#include "EasyPlayback.h"#include "EasyDec_WavCnv2ch.h"
#define FILE_NAME_LEN (64)#define MOUNT_NAME "storage"#define VOICE_DIR "voice"#define TAG_BUFF_SIZE (64 + 1) //null-terminated
#define IMAGE_HW 480#define IMAGE_VW 272using namespace cv;
/* FACE DETECTOR Parameters */#define DETECTOR_SCALE_FACTOR (2)#define DETECTOR_MIN_NEIGHBOR (4)#define DETECTOR_MIN_SIZE (30)#define FACE_DETECTOR_MODEL "/storage/lbpcascade_frontalface.xml"
static int volume_percent=100;//static InterruptIn skip_btn(USER_BUTTON0);static InterruptIn volume_down_btn(USER_BUTTON0);static InterruptIn volume_up_btn(USER_BUTTON1);static EasyPlayback AudioPlayer;
static Camera camera(IMAGE_HW, IMAGE_VW);static LCD lcd(IMAGE_HW, IMAGE_VW);static CascadeClassifier detector_classifier;static uint8_t lcd_buf[IMAGE_HW * IMAGE_VW * 2]; // 2 bytes per pixel
static void volume_up_btn_fall(void) { volume_percent=volume_percent+10; if (volume_percent>100) volume_percent=100; AudioPlayer.outputVolume(volume_percent/100.0);}
static void volume_down_btn_fall(void) { volume_percent=volume_percent-10; if (volume_percent<0) volume_percent=0; AudioPlayer.outputVolume(volume_percent/100.0);}
void setup() { DIR * d; struct dirent * p; char file_path[sizeof("/"MOUNT_NAME"/") + FILE_NAME_LEN];// SdUsbConnect storage(MOUNT_NAME);
// button setting //skip_btn.fall(&skip_btn_fall); volume_up_btn.fall(&volume_up_btn_fall); volume_down_btn.fall(&volume_down_btn_fall); // decoder setting AudioPlayer.add_decoder<EasyDec_WavCnv2ch>(".wav"); AudioPlayer.add_decoder<EasyDec_WavCnv2ch>(".WAV");
pinMode(PIN_LED_GREEN, OUTPUT); pinMode(PIN_LED_RED, OUTPUT);
// SD & USB printf("Finding a storage...\r\n"); SdUsbConnect storage("storage"); storage.wait_connect(); printf("done\r\n"); AudioPlayer.outputVolume(volume_percent/100.0); // Volume control (min:0.0 max:1.0) AudioPlayer.play("/storage/"VOICE_DIR"/ohayo.wav");
// Load the cascade classifier file detector_classifier.load(FACE_DETECTOR_MODEL);
if (detector_classifier.empty()) { digitalWrite(PIN_LED_RED, HIGH); // Error CV_Assert(0); mbed_die(); }
// Camera camera.begin(); // LCD lcd.begin(lcd_buf, IMAGE_HW, IMAGE_VW); lcd.clear(); AudioPlayer.play("/storage/"VOICE_DIR"/ohayo.wav");}
void loop(){ Mat img_raw(IMAGE_VW, IMAGE_HW, CV_8UC2, camera.getImageAdr());
Mat src; cvtColor(img_raw, src, COLOR_YUV2GRAY_YUYV); //covert from YUV to GRAY
// Detect a face in the frame Rect face_roi; if (detector_classifier.empty()) { digitalWrite(PIN_LED_RED, HIGH); // Error }
// Perform detected the biggest face std::vector<Rect> rect_faces; detector_classifier.detectMultiScale(src, rect_faces, DETECTOR_SCALE_FACTOR, DETECTOR_MIN_NEIGHBOR, CASCADE_FIND_BIGGEST_OBJECT, Size(DETECTOR_MIN_SIZE, DETECTOR_MIN_SIZE));
if (rect_faces.size() > 0) { // A face is detected face_roi = rect_faces[0]; } else { // No face is detected, set an invalid rectangle face_roi.x = -1; face_roi.y = -1; face_roi.width = -1; face_roi.height = -1; }
if (face_roi.width > 0 && face_roi.height > 0) { // A face is detected digitalWrite(PIN_LED_GREEN, HIGH); printf("Detected a face X:%d Y:%d W:%d H:%d\n",face_roi.x, face_roi.y, face_roi.width, face_roi.height); //AudioPlayer.play("/storage/"VOICE_DIR"/shasinwotorimasu.wav"); AudioPlayer.play("/storage/"VOICE_DIR"/ohayo.wav"); digitalWrite(PIN_LED_GREEN, LOW); } else { }
rectangle(src, Point(face_roi.x, face_roi.y), Point(face_roi.x + face_roi.width, face_roi.y + face_roi.height), 255, 2); lcd.GRAY2YUV(src.data, lcd_buf, IMAGE_HW, IMAGE_VW);}