Commit 7d325c524c453e1ce43a971f2ab44a30a5e330b9

Authored by Erickson Silva
1 parent 2bd908fc
Exists in master and in 2 other branches api, devel

Indice de confiança do Julius implementado.

recognize/src/include/recognize.h
... ... @@ -43,6 +43,9 @@ private:
43 43  
44 44 char* pathVideo;
45 45 bool finished;
  46 +
  47 + float sizeScores;
  48 + float avgScores;
46 49  
47 50 /** inputType: 1 = RawFile, 2 = Mic */
48 51 int inputType, frequency, sizeBlocs;
... ... @@ -57,6 +60,7 @@ private:
57 60  
58 61 void executeJuliusEngine();
59 62 std::list<char*>* filterOutputJulius();
  63 + void confidenceJulius();
60 64 void notifyListeners(char* text);
61 65 void cleanFiles();
62 66  
... ...
recognize/src/recognize.cpp
1 1 #include <fstream>
2 2 #include <stdio.h>
3   -#include <string.h>
4 3 #include <sstream>
5 4 #include <stdlib.h>
  5 +#include <algorithm>
  6 +#include <vector>
  7 +#include <iterator>
  8 +
  9 +#include <iostream>
  10 +#include <string>
6 11  
7 12 #include <lavidlib/io/FileIO.h>
8 13  
... ... @@ -12,16 +17,21 @@
12 17 #define INPUT_PATTERN 1 /* 1 = Raw file, 2 = Mic */
13 18 #define BLOCS_PATTERN 10
14 19 #define SIZE_BUFFER 256
  20 +#define CONFIDENCE_RATE 0.80
15 21  
16 22  
17 23 #define PATH_AUDIO_ORIGIN "gtaaas_user/gtaaas/recognize/src/audio/origin/audio_origin.wav"
18 24 #define PATH_AUDIO_PARTS "gtaaas_user/gtaaas/recognize/src/audio/parts/"
19   -#define FILENAME_RECOGNIZED_OUT "gtaaas_user/gtaaas/recognize/src/audio/recognized.out"
20 25 #define FILENAME_AUDIOPART "audio00"
21 26 #define FILENAME_AUDIOLIST "gtaaas_user/gtaaas/recognize/src/audio/audiolist"
22 27 #define FILENAME_FILTEROUT "gtaaas_user/gtaaas/recognize/src/audio/filter"
23   -#define PROGRAM "ffmpeg" // ffmpeg
  28 +#define FILENAME_CONFIDENCEOUT "gtaaas_user/gtaaas/recognize/src/audio/confidence"
  29 +#define FILENAME_RECOGNIZED_OUT "gtaaas_user/gtaaas/recognize/src/audio/recognized.out"
  30 +
  31 +#define FIND_CONFIDENCE "\"cmscore1:\""
24 32 #define FIND_SENTENCE "\"pass1_best:\""
  33 +
  34 +#define PROGRAM "ffmpeg" // ffmpeg
25 35 #define PTS_PATTERN 1000
26 36  
27 37 using namespace std;
... ... @@ -75,6 +85,8 @@ void Recognize::initialize() {
75 85  
76 86 executeJuliusEngine();
77 87  
  88 + confidenceJulius();
  89 +
78 90 std::list<char*> *list_sentences;
79 91 list_sentences = filterOutputJulius();
80 92  
... ... @@ -220,7 +232,7 @@ void Recognize::executeJuliusEngine() {
220 232 sprintf(cfreq, "%i", frequency);
221 233 command.append(" -smpFreq ").
222 234 append(cfreq).
223   - append(" -1pass -nolog -quiet >> ").
  235 + append(" -nolog >> ").
224 236 append(FILENAME_RECOGNIZED_OUT);
225 237  
226 238 printf("\n\nCommand for executeJuliusEngine: %s\n", command.c_str());
... ... @@ -228,6 +240,47 @@ void Recognize::executeJuliusEngine() {
228 240  
229 241 }
230 242  
  243 +void Recognize::confidenceJulius() {
  244 +
  245 + string command = "cat ";
  246 + command.append(FILENAME_RECOGNIZED_OUT).append(" | grep ").
  247 + append(FIND_CONFIDENCE).append(" >> ").append(FILENAME_CONFIDENCEOUT);
  248 +
  249 + system(command.c_str());
  250 + printf("\n\n---> command: %s\n\n", command.c_str());
  251 +
  252 + ifstream in(FILENAME_CONFIDENCEOUT);
  253 +
  254 + if (!in) {
  255 + perror("Error: ");
  256 + } else {
  257 + string line;
  258 + float tmp;
  259 + avgScores = 0;
  260 + do {
  261 + getline(in, line);
  262 + std::istringstream buf(line);
  263 + if (line.length() > 0) {
  264 + istream_iterator<std::string> beg(buf), end;
  265 + vector<string> tokens(beg, end);
  266 + int i;
  267 + for(i=2; i < tokens.size()-1; i++){
  268 + istringstream(tokens[i]) >> tmp;
  269 + avgScores += tmp;
  270 + sizeScores++;
  271 + }
  272 + }
  273 + } while (!in.eof());
  274 + in.close();
  275 + avgScores /= sizeScores;
  276 + }
  277 +
  278 +
  279 + if (avgScores < CONFIDENCE_RATE)
  280 + finished = true;
  281 + throw RecognizeException("Desculpe, não podemos concluir pois o vídeo tem baixa qualidade. Tente novamente com outro vídeo.");
  282 +}
  283 +
231 284  
232 285 std::list<char*>* Recognize::filterOutputJulius() {
233 286  
... ... @@ -300,6 +353,7 @@ void Recognize::cleanFiles() {
300 353 command.append(PATH_AUDIO_ORIGIN).append(" ").
301 354 append(FILENAME_AUDIOLIST).append(" ").
302 355 append(FILENAME_FILTEROUT).append(" ").
  356 + append(FILENAME_CONFIDENCEOUT).append(" ").
303 357 append(PATH_AUDIO_PARTS).append("* ").
304 358 append(FILENAME_RECOGNIZED_OUT);
305 359 system(command.c_str());
... ...