int ps_end_utt(ps_decoder_t *ps) { int rv, i; acmod_end_utt(ps->acmod); /* Search any remaining frames. */ if ((rv = ps_search_forward(ps)) < 0) { ptmr_stop(&ps->perf); return rv; } /* Finish phone loop search. */ if (ps->phone_loop) { if ((rv = ps_search_finish(ps->phone_loop)) < 0) { ptmr_stop(&ps->perf); return rv; } } /* Search any frames remaining in the lookahead window. */ for (i = ps->acmod->output_frame - ps->pl_window; i < ps->acmod->output_frame; ++i) ps_search_step(ps->search, i); /* Finish main search. */ if ((rv = ps_search_finish(ps->search)) < 0) { ptmr_stop(&ps->perf); return rv; } ptmr_stop(&ps->perf); /* Log a backtrace if requested. */ if (cmd_ln_boolean_r(ps->config, "-backtrace")) { char const *uttid, *hyp; ps_seg_t *seg; int32 score; hyp = ps_get_hyp(ps, &score, &uttid); if (hyp != NULL) { E_INFO("%s: %s (%d)\n", uttid, hyp, score); E_INFO_NOFN("%-20s %-5s %-5s %-5s %-10s %-10s %-3s\n", "word", "start", "end", "pprob", "ascr", "lscr", "lback"); for (seg = ps_seg_iter(ps, &score); seg; seg = ps_seg_next(seg)) { char const *word; int sf, ef; int32 post, lscr, ascr, lback; word = ps_seg_word(seg); ps_seg_frames(seg, &sf, &ef); post = ps_seg_prob(seg, &ascr, &lscr, &lback); E_INFO_NOFN("%-20s %-5d %-5d %-1.3f %-10d %-10d %-3d\n", word, sf, ef, logmath_exp(ps_get_logmath(ps), post), ascr, lscr, lback); } } } return rv; }
void dict_report(dict_t * d) { E_INFO_NOFN("Initialization of dict_t, report:\n"); E_INFO_NOFN("Max word: %d\n", d->max_words); E_INFO_NOFN("No of word: %d\n", d->n_word); E_INFO_NOFN("\n"); }
void mdef_report(mdef_t * m) { E_INFO_NOFN("Initialization of mdef_t, report:\n"); E_INFO_NOFN ("%d CI-phone, %d CD-phone, %d emitstate/phone, %d CI-sen, %d Sen, %d Sen-Seq\n", m->n_ciphone, m->n_phone - m->n_ciphone, m->n_emit_state, m->n_ci_sen, m->n_sen, m->n_sseq); E_INFO_NOFN("\n"); }
void vithist_report(vithist_t * vh) { E_INFO_NOFN("Initialization of vithist_t, report:\n"); if (vh) { E_INFO_NOFN("Word beam = %d\n", vh->wbeam); E_INFO_NOFN("Bigram Mode =%d\n", vh->bghist); E_INFO_NOFN("\n"); } else { E_INFO_NOFN("Viterbi history is (null)\n"); } }
void report_utt_res(utt_res_t * ur) { E_INFO_NOFN("Utt res, report:\n"); if (ur->uttfile != NULL) E_INFO_NOFN("uttfile %s\n", ur->uttfile); if (ur->lmname != NULL) E_INFO_NOFN("lmname %s\n", ur->lmname); if (ur->fsgname != NULL) E_INFO_NOFN("fsgname %s\n", ur->fsgname); if (ur->regmatname != NULL) E_INFO_NOFN("regmatname %s\n", ur->regmatname); if (ur->cb2mllrname != NULL) E_INFO_NOFN("cb2mllrname %s\n", ur->cb2mllrname); }
void feat_report(feat_t * f) { int i; E_INFO_NOFN("Initialization of feat_t, report:\n"); E_INFO_NOFN("Feature type = %s\n", f->name); E_INFO_NOFN("Cepstral size = %d\n", f->cepsize); E_INFO_NOFN("Number of streams = %d\n", f->n_stream); for (i = 0; i < f->n_stream; i++) { E_INFO_NOFN("Vector size of stream[%d]: %d\n", i, f->stream_len[i]); } E_INFO_NOFN("Number of subvectors = %d\n", f->n_sv); for (i = 0; i < f->n_sv; i++) { int32 *sv; E_INFO_NOFN("Components of subvector[%d]:", i); for (sv = f->subvecs[i]; sv && *sv != -1; ++sv) E_INFOCONT(" %d", *sv); E_INFOCONT("\n"); } E_INFO_NOFN("Whether CMN is used = %d\n", f->cmn); E_INFO_NOFN("Whether AGC is used = %d\n", f->agc); E_INFO_NOFN("Whether variance is normalized = %d\n", f->varnorm); E_INFO_NOFN("\n"); }
static void process_ctl(ps_decoder_t *ps, cmd_ln_t *config, FILE *ctlfh) { int32 ctloffset, ctlcount, ctlincr; int32 i; char *line; size_t len; FILE *hypfh = NULL, *hypsegfh = NULL, *ctmfh = NULL; FILE *mllrfh = NULL, *lmfh = NULL, *fsgfh = NULL; double n_speech, n_cpu, n_wall; char const *outlatdir; char const *nbestdir; char const *str; int frate; ctloffset = cmd_ln_int32_r(config, "-ctloffset"); ctlcount = cmd_ln_int32_r(config, "-ctlcount"); ctlincr = cmd_ln_int32_r(config, "-ctlincr"); outlatdir = cmd_ln_str_r(config, "-outlatdir"); nbestdir = cmd_ln_str_r(config, "-nbestdir"); frate = cmd_ln_int32_r(config, "-frate"); if ((str = cmd_ln_str_r(config, "-mllrctl"))) { mllrfh = fopen(str, "r"); if (mllrfh == NULL) { E_ERROR_SYSTEM("Failed to open MLLR control file file %s", str); goto done; } } if ((str = cmd_ln_str_r(config, "-fsgctl"))) { fsgfh = fopen(str, "r"); if (fsgfh == NULL) { E_ERROR_SYSTEM("Failed to open FSG control file file %s", str); goto done; } } if ((str = cmd_ln_str_r(config, "-lmnamectl"))) { lmfh = fopen(str, "r"); if (lmfh == NULL) { E_ERROR_SYSTEM("Failed to open LM name control file file %s", str); goto done; } } if ((str = cmd_ln_str_r(config, "-hyp"))) { hypfh = fopen(str, "w"); if (hypfh == NULL) { E_ERROR_SYSTEM("Failed to open hypothesis file %s for writing", str); goto done; } setbuf(hypfh, NULL); } if ((str = cmd_ln_str_r(config, "-hypseg"))) { hypsegfh = fopen(str, "w"); if (hypsegfh == NULL) { E_ERROR_SYSTEM("Failed to open hypothesis file %s for writing", str); goto done; } setbuf(hypsegfh, NULL); } if ((str = cmd_ln_str_r(config, "-ctm"))) { ctmfh = fopen(str, "w"); if (ctmfh == NULL) { E_ERROR_SYSTEM("Failed to open hypothesis file %s for writing", str); goto done; } setbuf(ctmfh, NULL); } i = 0; while ((line = fread_line(ctlfh, &len))) { char *wptr[4]; int32 nf, sf, ef; char *mllrline = NULL, *lmline = NULL, *fsgline = NULL; char *fsgfile = NULL, *lmname = NULL, *mllrfile = NULL; if (mllrfh) { mllrline = fread_line(mllrfh, &len); if (mllrline == NULL) { E_ERROR("File size mismatch between control and MLLR control\n"); ckd_free(line); ckd_free(mllrline); goto done; } mllrfile = string_trim(mllrline, STRING_BOTH); } if (lmfh) { lmline = fread_line(lmfh, &len); if (lmline == NULL) { E_ERROR("File size mismatch between control and LM control\n"); ckd_free(line); ckd_free(lmline); goto done; } lmname = string_trim(lmline, STRING_BOTH); } if (fsgfh) { fsgline = fread_line(fsgfh, &len); if (fsgline == NULL) { E_ERROR("File size mismatch between control and FSG control\n"); ckd_free(line); ckd_free(fsgline); goto done; } fsgfile = string_trim(fsgline, STRING_BOTH); } if (i < ctloffset) { i += ctlincr; goto nextline; } if (ctlcount != -1 && i >= ctloffset + ctlcount) { goto nextline; } sf = 0; ef = -1; nf = str2words(line, wptr, 4); if (nf == 0) { /* Do nothing. */ } else if (nf < 0) { E_ERROR("Unexpected extra data in control file at line %d\n", i); } else { char const *hyp, *file, *uttid; int32 score; file = wptr[0]; uttid = NULL; if (nf > 1) sf = atoi(wptr[1]); if (nf > 2) ef = atoi(wptr[2]); if (nf > 3) uttid = wptr[3]; E_INFO("Decoding '%s'\n", uttid ? uttid : file); /* Do actual decoding. */ if(process_mllrctl_line(ps, config, mllrfile) < 0) continue; if(process_lmnamectl_line(ps, config, lmname) < 0) continue; if(process_fsgctl_line(ps, config, fsgfile) < 0) continue; if(process_ctl_line(ps, config, file, uttid, sf, ef) < 0) continue; hyp = ps_get_hyp(ps, &score, &uttid); /* Write out results and such. */ if (hypfh) { fprintf(hypfh, "%s (%s %d)\n", hyp ? hyp : "", uttid, score); } if (hypsegfh) { write_hypseg(hypsegfh, ps, uttid); } if (ctmfh) { ps_seg_t *itor = ps_seg_iter(ps, &score); write_ctm(ctmfh, ps, itor, uttid, frate); } if (outlatdir) { write_lattice(ps, outlatdir, uttid); } if (nbestdir) { write_nbest(ps, nbestdir, uttid); } ps_get_utt_time(ps, &n_speech, &n_cpu, &n_wall); E_INFO("%s: %.2f seconds speech, %.2f seconds CPU, %.2f seconds wall\n", uttid, n_speech, n_cpu, n_wall); E_INFO("%s: %.2f xRT (CPU), %.2f xRT (elapsed)\n", uttid, n_cpu / n_speech, n_wall / n_speech); E_INFO_NOFN("%s (%s %d)\n", hyp ? hyp : "", uttid, score); } i += ctlincr; nextline: ckd_free(mllrline); ckd_free(fsgline); ckd_free(lmline); ckd_free(line); } ps_get_all_time(ps, &n_speech, &n_cpu, &n_wall); E_INFO("TOTAL %.2f seconds speech, %.2f seconds CPU, %.2f seconds wall\n", n_speech, n_cpu, n_wall); E_INFO("AVERAGE %.2f xRT (CPU), %.2f xRT (elapsed)\n", n_cpu / n_speech, n_wall / n_speech); done: if (hypfh) fclose(hypfh); if (hypsegfh) fclose(hypsegfh); if (ctmfh) fclose(ctmfh); }