From 7d325c524c453e1ce43a971f2ab44a30a5e330b9 Mon Sep 17 00:00:00 2001 From: Erickson Silva Date: Thu, 27 Mar 2014 12:15:01 -0300 Subject: [PATCH] Indice de confiança do Julius implementado. --- recognize/src/include/recognize.h | 4 ++++ recognize/src/recognize.cpp | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 62 insertions(+), 4 deletions(-) diff --git a/recognize/src/include/recognize.h b/recognize/src/include/recognize.h index 5a2b0fb..e66eb4e 100644 --- a/recognize/src/include/recognize.h +++ b/recognize/src/include/recognize.h @@ -43,6 +43,9 @@ private: char* pathVideo; bool finished; + + float sizeScores; + float avgScores; /** inputType: 1 = RawFile, 2 = Mic */ int inputType, frequency, sizeBlocs; @@ -57,6 +60,7 @@ private: void executeJuliusEngine(); std::list* filterOutputJulius(); + void confidenceJulius(); void notifyListeners(char* text); void cleanFiles(); diff --git a/recognize/src/recognize.cpp b/recognize/src/recognize.cpp index 63f6bf4..6d264b8 100644 --- a/recognize/src/recognize.cpp +++ b/recognize/src/recognize.cpp @@ -1,8 +1,13 @@ #include #include -#include #include #include +#include +#include +#include + +#include +#include #include @@ -12,16 +17,21 @@ #define INPUT_PATTERN 1 /* 1 = Raw file, 2 = Mic */ #define BLOCS_PATTERN 10 #define SIZE_BUFFER 256 +#define CONFIDENCE_RATE 0.80 #define PATH_AUDIO_ORIGIN "gtaaas_user/gtaaas/recognize/src/audio/origin/audio_origin.wav" #define PATH_AUDIO_PARTS "gtaaas_user/gtaaas/recognize/src/audio/parts/" -#define FILENAME_RECOGNIZED_OUT "gtaaas_user/gtaaas/recognize/src/audio/recognized.out" #define FILENAME_AUDIOPART "audio00" #define FILENAME_AUDIOLIST "gtaaas_user/gtaaas/recognize/src/audio/audiolist" #define FILENAME_FILTEROUT "gtaaas_user/gtaaas/recognize/src/audio/filter" -#define PROGRAM "ffmpeg" // ffmpeg +#define FILENAME_CONFIDENCEOUT "gtaaas_user/gtaaas/recognize/src/audio/confidence" +#define FILENAME_RECOGNIZED_OUT "gtaaas_user/gtaaas/recognize/src/audio/recognized.out" + +#define FIND_CONFIDENCE "\"cmscore1:\"" #define FIND_SENTENCE "\"pass1_best:\"" + +#define PROGRAM "ffmpeg" // ffmpeg #define PTS_PATTERN 1000 using namespace std; @@ -75,6 +85,8 @@ void Recognize::initialize() { executeJuliusEngine(); + confidenceJulius(); + std::list *list_sentences; list_sentences = filterOutputJulius(); @@ -220,7 +232,7 @@ void Recognize::executeJuliusEngine() { sprintf(cfreq, "%i", frequency); command.append(" -smpFreq "). append(cfreq). - append(" -1pass -nolog -quiet >> "). + append(" -nolog >> "). append(FILENAME_RECOGNIZED_OUT); printf("\n\nCommand for executeJuliusEngine: %s\n", command.c_str()); @@ -228,6 +240,47 @@ void Recognize::executeJuliusEngine() { } +void Recognize::confidenceJulius() { + + string command = "cat "; + command.append(FILENAME_RECOGNIZED_OUT).append(" | grep "). + append(FIND_CONFIDENCE).append(" >> ").append(FILENAME_CONFIDENCEOUT); + + system(command.c_str()); + printf("\n\n---> command: %s\n\n", command.c_str()); + + ifstream in(FILENAME_CONFIDENCEOUT); + + if (!in) { + perror("Error: "); + } else { + string line; + float tmp; + avgScores = 0; + do { + getline(in, line); + std::istringstream buf(line); + if (line.length() > 0) { + istream_iterator beg(buf), end; + vector tokens(beg, end); + int i; + for(i=2; i < tokens.size()-1; i++){ + istringstream(tokens[i]) >> tmp; + avgScores += tmp; + sizeScores++; + } + } + } while (!in.eof()); + in.close(); + avgScores /= sizeScores; + } + + + if (avgScores < CONFIDENCE_RATE) + finished = true; + throw RecognizeException("Desculpe, não podemos concluir pois o vídeo tem baixa qualidade. Tente novamente com outro vídeo."); +} + std::list* Recognize::filterOutputJulius() { @@ -300,6 +353,7 @@ void Recognize::cleanFiles() { command.append(PATH_AUDIO_ORIGIN).append(" "). append(FILENAME_AUDIOLIST).append(" "). append(FILENAME_FILTEROUT).append(" "). + append(FILENAME_CONFIDENCEOUT).append(" "). append(PATH_AUDIO_PARTS).append("* "). append(FILENAME_RECOGNIZED_OUT); system(command.c_str()); -- libgit2 0.21.2