Download test/unit/test_acmod.c from camenduru/pocketsphinx: direct link, hf CLI and curl.
- Browser
- Download file 10.2 kB
-
https://huggingface.co/camenduru/pocketsphinx/resolve/main/test/unit/test_acmod.c
- Command line
-
hf download hf://camenduru/pocketsphinx/test/unit/test_acmod.c
-
curl -L -o test_acmod.c https://huggingface.co/camenduru/pocketsphinx/resolve/main/test/unit/test_acmod.c
10.2 kB
| static const mfcc_t cmninit[13] = { | |
| FLOAT2MFCC(41.00), | |
| FLOAT2MFCC(-5.29), | |
| FLOAT2MFCC(-0.12), | |
| FLOAT2MFCC(5.09), | |
| FLOAT2MFCC(2.48), | |
| FLOAT2MFCC(-4.07), | |
| FLOAT2MFCC(-1.37), | |
| FLOAT2MFCC(-1.78), | |
| FLOAT2MFCC(-5.08), | |
| FLOAT2MFCC(-2.05), | |
| FLOAT2MFCC(-6.45), | |
| FLOAT2MFCC(-1.42), | |
| FLOAT2MFCC(1.17) | |
| }; | |
| static void | |
| assert_cmninit(cmn_t *cmn) | |
| { | |
| int i; | |
| for (i = 0; i < cmn->veclen; ++i) { | |
| TEST_EQUAL_MFCC(cmn->cmn_mean[i], cmninit[i]); | |
| TEST_EQUAL_MFCC(cmn->sum[i], cmninit[i] * CMN_WIN); | |
| } | |
| } | |
| int | |
| main(int argc, char *argv[]) | |
| { | |
| acmod_t *acmod; | |
| logmath_t *lmath; | |
| cmd_ln_t *config; | |
| FILE *rawfh; | |
| int16 *buf; | |
| int16 const *bptr; | |
| mfcc_t **cepbuf, **cptr; | |
| size_t nread, nsamps; | |
| int nfr; | |
| int frame_counter; | |
| int bestsen1[270]; | |
| (void)argc; | |
| (void)argv; | |
| err_set_loglevel(ERR_INFO); | |
| lmath = logmath_init(1.0001, 0, 0); | |
| config = ps_config_parse_json( | |
| NULL, | |
| "compallsen: true, cmn: live, tmatfloor: 0.0001," | |
| "mixwfloor: 0.001, varfloor: 0.0001," | |
| "mmap: false, topn: 4, ds: 1, samprate: 16000"); | |
| TEST_ASSERT(config); | |
| cmd_ln_parse_file_r(config, ps_args(), MODELDIR "/en-us/en-us/feat.params", FALSE); | |
| cmd_ln_set_str_extra_r(config, "mdef", MODELDIR "/en-us/en-us/mdef"); | |
| cmd_ln_set_str_extra_r(config, "mean", MODELDIR "/en-us/en-us/means"); | |
| cmd_ln_set_str_extra_r(config, "var", MODELDIR "/en-us/en-us/variances"); | |
| cmd_ln_set_str_extra_r(config, "tmat", MODELDIR "/en-us/en-us/transition_matrices"); | |
| cmd_ln_set_str_extra_r(config, "sendump", MODELDIR "/en-us/en-us/sendump"); | |
| cmd_ln_set_str_extra_r(config, "mixw", NULL); | |
| cmd_ln_set_str_extra_r(config, "lda", NULL); | |
| cmd_ln_set_str_extra_r(config, "senmgau", NULL); | |
| /* Ensure that -cmninit does what it should */ | |
| ps_config_set_str(config, "cmninit", | |
| "41.00,-5.29,-0.12,5.09,2.48,-4.07,-1.37,-1.78,-5.08,-2.05,-6.45,-1.42,1.17"); | |
| TEST_ASSERT(acmod = acmod_init(config, lmath, NULL, NULL)); | |
| assert_cmninit(acmod->fcb->cmn_struct); | |
| /* Ensure that the two different ways of setting CMN do the right thing. */ | |
| cmn_live_set(acmod->fcb->cmn_struct, cmninit); | |
| assert_cmninit(acmod->fcb->cmn_struct); | |
| cmn_set_repr(acmod->fcb->cmn_struct, | |
| "41.00,-5.29,-0.12,5.09,2.48,-4.07,-1.37,-1.78,-5.08,-2.05,-6.45,-1.42,1.17"); | |
| assert_cmninit(acmod->fcb->cmn_struct); | |
| nsamps = 2048; | |
| frame_counter = 0; | |
| buf = ckd_calloc(nsamps, sizeof(*buf)); | |
| TEST_ASSERT(rawfh = fopen(DATADIR "/goforward.raw", "rb")); | |
| TEST_EQUAL(0, acmod_start_utt(acmod)); | |
| E_INFO("Incremental(2048):\n"); | |
| while (!feof(rawfh)) { | |
| nread = fread(buf, sizeof(*buf), nsamps, rawfh); | |
| bptr = buf; | |
| while ((nfr = acmod_process_raw(acmod, &bptr, &nread, FALSE)) > 0 || nread > 0) { | |
| int16 best_score; | |
| int frame_idx = -1, best_senid; | |
| while (acmod->n_feat_frame > 0) { | |
| acmod_score(acmod, &frame_idx); | |
| acmod_advance(acmod); | |
| best_score = acmod_best_score(acmod, &best_senid); | |
| E_INFO("Frame %d best senone %d score %d\n", | |
| frame_idx, best_senid, best_score); | |
| TEST_EQUAL(frame_counter, frame_idx); | |
| if (frame_counter < 190) | |
| bestsen1[frame_counter] = best_score; | |
| ++frame_counter; | |
| frame_idx = -1; | |
| } | |
| } | |
| } | |
| TEST_EQUAL(0, acmod_end_utt(acmod)); | |
| /* Make sure -cmninit was updated. */ | |
| TEST_ASSERT(ps_config_str(config, "cmninit") != NULL); | |
| E_INFO("New -cmninit: %s\n", ps_config_str(config, "cmninit")); | |
| nread = 0; | |
| { | |
| int16 best_score; | |
| int frame_idx = -1, best_senid; | |
| while (acmod->n_feat_frame > 0) { | |
| acmod_score(acmod, &frame_idx); | |
| acmod_advance(acmod); | |
| best_score = acmod_best_score(acmod, &best_senid); | |
| E_INFO("Frame %d best senone %d score %d\n", | |
| frame_idx, best_senid, best_score); | |
| if (frame_counter < 190) | |
| bestsen1[frame_counter] = best_score; | |
| TEST_EQUAL(frame_counter, frame_idx); | |
| ++frame_counter; | |
| frame_idx = -1; | |
| } | |
| } | |
| /* Now try to process the whole thing at once. */ | |
| E_INFO("Whole utterance:\n"); | |
| cmn_live_set(acmod->fcb->cmn_struct, cmninit); | |
| nsamps = ftell(rawfh) / sizeof(*buf); | |
| clearerr(rawfh); | |
| fseek(rawfh, 0, SEEK_SET); | |
| buf = ckd_realloc(buf, nsamps * sizeof(*buf)); | |
| TEST_EQUAL(nsamps, fread(buf, sizeof(*buf), nsamps, rawfh)); | |
| bptr = buf; | |
| TEST_EQUAL(0, acmod_start_utt(acmod)); | |
| acmod_process_raw(acmod, &bptr, &nsamps, TRUE); | |
| TEST_EQUAL(0, acmod_end_utt(acmod)); | |
| /* Make sure -cmninit was updated. */ | |
| TEST_ASSERT(ps_config_str(config, "cmninit") != NULL); | |
| E_INFO("New -cmninit: %s\n", ps_config_str(config, "cmninit")); | |
| { | |
| int16 best_score; | |
| int frame_idx = -1, best_senid; | |
| frame_counter = 0; | |
| while (acmod->n_feat_frame > 0) { | |
| acmod_score(acmod, &frame_idx); | |
| acmod_advance(acmod); | |
| best_score = acmod_best_score(acmod, &best_senid); | |
| E_INFO("Frame %d best senone %d score %d\n", | |
| frame_idx, best_senid, best_score); | |
| if (frame_counter < 190) | |
| TEST_EQUAL_LOG(best_score, bestsen1[frame_counter]); | |
| TEST_EQUAL(frame_counter, frame_idx); | |
| ++frame_counter; | |
| frame_idx = -1; | |
| } | |
| } | |
| /* Now process MFCCs and make sure we get the same results. */ | |
| cepbuf = ckd_calloc_2d(frame_counter, | |
| fe_get_output_size(acmod->fe), | |
| sizeof(**cepbuf)); | |
| fe_start_utt(acmod->fe); | |
| nsamps = ftell(rawfh) / sizeof(*buf); | |
| bptr = buf; | |
| nfr = frame_counter; | |
| fe_process_frames(acmod->fe, &bptr, &nsamps, cepbuf, &nfr); | |
| fe_end_utt(acmod->fe, cepbuf[frame_counter-1], &nfr); | |
| E_INFO("Incremental(MFCC):\n"); | |
| cmn_live_set(acmod->fcb->cmn_struct, cmninit); | |
| TEST_EQUAL(0, acmod_start_utt(acmod)); | |
| cptr = cepbuf; | |
| nfr = frame_counter; | |
| frame_counter = 0; | |
| while ((acmod_process_cep(acmod, &cptr, &nfr, FALSE)) > 0) { | |
| int16 best_score; | |
| int frame_idx = -1, best_senid; | |
| while (acmod->n_feat_frame > 0) { | |
| acmod_score(acmod, &frame_idx); | |
| acmod_advance(acmod); | |
| best_score = acmod_best_score(acmod, &best_senid); | |
| E_INFO("Frame %d best senone %d score %d\n", | |
| frame_idx, best_senid, best_score); | |
| TEST_EQUAL(frame_counter, frame_idx); | |
| if (frame_counter < 190) | |
| TEST_EQUAL_LOG(best_score, bestsen1[frame_counter]); | |
| ++frame_counter; | |
| frame_idx = -1; | |
| } | |
| } | |
| TEST_EQUAL(0, acmod_end_utt(acmod)); | |
| /* Make sure -cmninit was updated. */ | |
| TEST_ASSERT(ps_config_str(config, "cmninit") != NULL); | |
| E_INFO("New -cmninit: %s\n", ps_config_str(config, "cmninit")); | |
| nfr = 0; | |
| acmod_process_cep(acmod, &cptr, &nfr, FALSE); | |
| { | |
| int16 best_score; | |
| int frame_idx = -1, best_senid; | |
| while (acmod->n_feat_frame > 0) { | |
| acmod_score(acmod, &frame_idx); | |
| acmod_advance(acmod); | |
| best_score = acmod_best_score(acmod, &best_senid); | |
| E_INFO("Frame %d best senone %d score %d\n", | |
| frame_idx, best_senid, best_score); | |
| TEST_EQUAL(frame_counter, frame_idx); | |
| if (frame_counter < 190) | |
| TEST_EQUAL_LOG(best_score, bestsen1[frame_counter]); | |
| ++frame_counter; | |
| frame_idx = -1; | |
| } | |
| } | |
| /* Note that we have to process the whole thing again because | |
| * !#@$@ s2mfc2feat modifies its argument (not for long) */ | |
| fe_start_utt(acmod->fe); | |
| nsamps = ftell(rawfh) / sizeof(*buf); | |
| bptr = buf; | |
| nfr = frame_counter; | |
| fe_process_frames(acmod->fe, &bptr, &nsamps, cepbuf, &nfr); | |
| fe_end_utt(acmod->fe, cepbuf[frame_counter-1], &nfr); | |
| E_INFO("Whole utterance (MFCC):\n"); | |
| cmn_live_set(acmod->fcb->cmn_struct, cmninit); | |
| TEST_EQUAL(0, acmod_start_utt(acmod)); | |
| cptr = cepbuf; | |
| nfr = frame_counter; | |
| acmod_process_cep(acmod, &cptr, &nfr, TRUE); | |
| TEST_EQUAL(0, acmod_end_utt(acmod)); | |
| /* Make sure -cmninit was updated. */ | |
| TEST_ASSERT(ps_config_str(config, "cmninit") != NULL); | |
| E_INFO("New -cmninit: %s\n", ps_config_str(config, "cmninit")); | |
| { | |
| int16 best_score; | |
| int frame_idx = -1, best_senid; | |
| frame_counter = 0; | |
| while (acmod->n_feat_frame > 0) { | |
| acmod_score(acmod, &frame_idx); | |
| acmod_advance(acmod); | |
| best_score = acmod_best_score(acmod, &best_senid); | |
| E_INFO("Frame %d best senone %d score %d\n", | |
| frame_idx, best_senid, best_score); | |
| if (frame_counter < 190) | |
| TEST_EQUAL_LOG(best_score, bestsen1[frame_counter]); | |
| TEST_EQUAL(frame_counter, frame_idx); | |
| ++frame_counter; | |
| frame_idx = -1; | |
| } | |
| } | |
| E_INFO("Rewound (MFCC):\n"); | |
| TEST_EQUAL(0, acmod_rewind(acmod)); | |
| { | |
| int16 best_score; | |
| int frame_idx = -1, best_senid; | |
| frame_counter = 0; | |
| while (acmod->n_feat_frame > 0) { | |
| acmod_score(acmod, &frame_idx); | |
| acmod_advance(acmod); | |
| best_score = acmod_best_score(acmod, &best_senid); | |
| E_INFO("Frame %d best senone %d score %d\n", | |
| frame_idx, best_senid, best_score); | |
| if (frame_counter < 190) | |
| TEST_EQUAL_LOG(best_score, bestsen1[frame_counter]); | |
| TEST_EQUAL(frame_counter, frame_idx); | |
| ++frame_counter; | |
| frame_idx = -1; | |
| } | |
| } | |
| /* Clean up, go home. */ | |
| ckd_free_2d(cepbuf); | |
| fclose(rawfh); | |
| ckd_free(buf); | |
| acmod_free(acmod); | |
| logmath_free(lmath); | |
| ps_config_free(config); | |
| return 0; | |
| } | |