Commit 7d325c524c453e1ce43a971f2ab44a30a5e330b9
1 parent
2bd908fc
Exists in
master
and in
2 other branches
Indice de confiança do Julius implementado.
Showing
2 changed files
with
62 additions
and
4 deletions
Show diff stats
recognize/src/include/recognize.h
@@ -43,6 +43,9 @@ private: | @@ -43,6 +43,9 @@ private: | ||
43 | 43 | ||
44 | char* pathVideo; | 44 | char* pathVideo; |
45 | bool finished; | 45 | bool finished; |
46 | + | ||
47 | + float sizeScores; | ||
48 | + float avgScores; | ||
46 | 49 | ||
47 | /** inputType: 1 = RawFile, 2 = Mic */ | 50 | /** inputType: 1 = RawFile, 2 = Mic */ |
48 | int inputType, frequency, sizeBlocs; | 51 | int inputType, frequency, sizeBlocs; |
@@ -57,6 +60,7 @@ private: | @@ -57,6 +60,7 @@ private: | ||
57 | 60 | ||
58 | void executeJuliusEngine(); | 61 | void executeJuliusEngine(); |
59 | std::list<char*>* filterOutputJulius(); | 62 | std::list<char*>* filterOutputJulius(); |
63 | + void confidenceJulius(); | ||
60 | void notifyListeners(char* text); | 64 | void notifyListeners(char* text); |
61 | void cleanFiles(); | 65 | void cleanFiles(); |
62 | 66 |
recognize/src/recognize.cpp
1 | #include <fstream> | 1 | #include <fstream> |
2 | #include <stdio.h> | 2 | #include <stdio.h> |
3 | -#include <string.h> | ||
4 | #include <sstream> | 3 | #include <sstream> |
5 | #include <stdlib.h> | 4 | #include <stdlib.h> |
5 | +#include <algorithm> | ||
6 | +#include <vector> | ||
7 | +#include <iterator> | ||
8 | + | ||
9 | +#include <iostream> | ||
10 | +#include <string> | ||
6 | 11 | ||
7 | #include <lavidlib/io/FileIO.h> | 12 | #include <lavidlib/io/FileIO.h> |
8 | 13 | ||
@@ -12,16 +17,21 @@ | @@ -12,16 +17,21 @@ | ||
12 | #define INPUT_PATTERN 1 /* 1 = Raw file, 2 = Mic */ | 17 | #define INPUT_PATTERN 1 /* 1 = Raw file, 2 = Mic */ |
13 | #define BLOCS_PATTERN 10 | 18 | #define BLOCS_PATTERN 10 |
14 | #define SIZE_BUFFER 256 | 19 | #define SIZE_BUFFER 256 |
20 | +#define CONFIDENCE_RATE 0.80 | ||
15 | 21 | ||
16 | 22 | ||
17 | #define PATH_AUDIO_ORIGIN "gtaaas_user/gtaaas/recognize/src/audio/origin/audio_origin.wav" | 23 | #define PATH_AUDIO_ORIGIN "gtaaas_user/gtaaas/recognize/src/audio/origin/audio_origin.wav" |
18 | #define PATH_AUDIO_PARTS "gtaaas_user/gtaaas/recognize/src/audio/parts/" | 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 | #define FILENAME_AUDIOPART "audio00" | 25 | #define FILENAME_AUDIOPART "audio00" |
21 | #define FILENAME_AUDIOLIST "gtaaas_user/gtaaas/recognize/src/audio/audiolist" | 26 | #define FILENAME_AUDIOLIST "gtaaas_user/gtaaas/recognize/src/audio/audiolist" |
22 | #define FILENAME_FILTEROUT "gtaaas_user/gtaaas/recognize/src/audio/filter" | 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 | #define FIND_SENTENCE "\"pass1_best:\"" | 32 | #define FIND_SENTENCE "\"pass1_best:\"" |
33 | + | ||
34 | +#define PROGRAM "ffmpeg" // ffmpeg | ||
25 | #define PTS_PATTERN 1000 | 35 | #define PTS_PATTERN 1000 |
26 | 36 | ||
27 | using namespace std; | 37 | using namespace std; |
@@ -75,6 +85,8 @@ void Recognize::initialize() { | @@ -75,6 +85,8 @@ void Recognize::initialize() { | ||
75 | 85 | ||
76 | executeJuliusEngine(); | 86 | executeJuliusEngine(); |
77 | 87 | ||
88 | + confidenceJulius(); | ||
89 | + | ||
78 | std::list<char*> *list_sentences; | 90 | std::list<char*> *list_sentences; |
79 | list_sentences = filterOutputJulius(); | 91 | list_sentences = filterOutputJulius(); |
80 | 92 | ||
@@ -220,7 +232,7 @@ void Recognize::executeJuliusEngine() { | @@ -220,7 +232,7 @@ void Recognize::executeJuliusEngine() { | ||
220 | sprintf(cfreq, "%i", frequency); | 232 | sprintf(cfreq, "%i", frequency); |
221 | command.append(" -smpFreq "). | 233 | command.append(" -smpFreq "). |
222 | append(cfreq). | 234 | append(cfreq). |
223 | - append(" -1pass -nolog -quiet >> "). | 235 | + append(" -nolog >> "). |
224 | append(FILENAME_RECOGNIZED_OUT); | 236 | append(FILENAME_RECOGNIZED_OUT); |
225 | 237 | ||
226 | printf("\n\nCommand for executeJuliusEngine: %s\n", command.c_str()); | 238 | printf("\n\nCommand for executeJuliusEngine: %s\n", command.c_str()); |
@@ -228,6 +240,47 @@ void Recognize::executeJuliusEngine() { | @@ -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 | std::list<char*>* Recognize::filterOutputJulius() { | 285 | std::list<char*>* Recognize::filterOutputJulius() { |
233 | 286 | ||
@@ -300,6 +353,7 @@ void Recognize::cleanFiles() { | @@ -300,6 +353,7 @@ void Recognize::cleanFiles() { | ||
300 | command.append(PATH_AUDIO_ORIGIN).append(" "). | 353 | command.append(PATH_AUDIO_ORIGIN).append(" "). |
301 | append(FILENAME_AUDIOLIST).append(" "). | 354 | append(FILENAME_AUDIOLIST).append(" "). |
302 | append(FILENAME_FILTEROUT).append(" "). | 355 | append(FILENAME_FILTEROUT).append(" "). |
356 | + append(FILENAME_CONFIDENCEOUT).append(" "). | ||
303 | append(PATH_AUDIO_PARTS).append("* "). | 357 | append(PATH_AUDIO_PARTS).append("* "). |
304 | append(FILENAME_RECOGNIZED_OUT); | 358 | append(FILENAME_RECOGNIZED_OUT); |
305 | system(command.c_str()); | 359 | system(command.c_str()); |