bool asr(speechrecog::Command::Request &req, speechrecog::Command::Response &res) { const char *login_config = "appid = 55b1aeb0"; //登录参数 UserData asr_data; int ret = 0 ; char c; ret = MSPLogin(NULL, NULL, login_config); //第一个参数为用户名,第二个参数为密码,传NULL即可,第三个参数是登录参数 if (MSP_SUCCESS != ret) { printf("登录失败:%d\n", ret); goto exit; } memset(&asr_data, 0, sizeof(UserData)); printf("构建离线识别语法网络...\n"); ret = build_grammar(&asr_data); //第一次使用某语法进行识别,需要先构建语法网络,获取语法ID,之后使用此语法进行识别,无需再次构建 if (MSP_SUCCESS != ret) { printf("构建语法调用失败!\n"); goto exit; } while (1 != asr_data.build_fini) usleep(300 * 1000); if (MSP_SUCCESS != asr_data.errcode) goto exit; printf("离线识别语法网络构建完成,开始识别...\n"); ret = run_asr(&asr_data); if (MSP_SUCCESS != ret) { printf("离线语法识别出错: %d \n", ret); goto exit; } /////////////////////////////将识别结果rec_rslt传递给trigger////////////////////////////////////////// res.command=rec_rslt; if(flag1) res.command=tmpt1; if(flag2) res.command=tmpt2; exit: MSPLogout(); return true; }
int main() { grammar* g = build_grammar("grammar/simple.txt"); gaussian_cluster* sil = g->hmms[10]; gaussian_cluster* one = g->hmms[1]; gaussian_cluster* two = g->hmms[2]; (void) sil; (void) one; (void) two; //Print out params in matrix /* for(int j = 0; j < CEPSTRUM_DIMENSION; j++) { for(int i = 0; i < sil->num_clusters; i++) printf("%f ",sil->params[i]->means.values[j]); printf("\n"); } printf("\n\n"); */ for(int j = 0; j < CEPSTRUM_DIMENSION; j++) { for(int i = 0; i < one->num_clusters; i++) printf("%f ",one->params[i]->means.values[j]); printf("\n"); } printf("\n\n"); /* for(int j = 0; j < CEPSTRUM_DIMENSION; j++) { for(int i = 0; i < two->num_clusters; i++) printf("%f ",two->params[i]->means.values[j]); printf("\n"); } */ /* //Append models gaussian_cluster* cat = malloc(sizeof(gaussian_cluster)); cat->params = calloc(25,sizeof(single_gaussian_params*)); cat->stationary_probs = calloc(25,sizeof(double)); cat->transition_probs = calloc(25,sizeof(double)); cat->num_clusters = 25; gaussian_cluster* wordone = g->hmms[8]; gaussian_cluster* wordtwo = g->hmms[4]; for(int i = 0; i < 5; i++) { cat->params[i] = sil->params[i]; cat->params[i+5] = wordone->params[i]; cat->params[i+10] = sil->params[i]; cat->params[i+15] = wordtwo->params[i]; cat->params[i+20] = sil->params[i]; cat->stationary_probs[i] = sil->stationary_probs[i]; cat->stationary_probs[i+5] = wordone->stationary_probs[i]; cat->stationary_probs[i+10] = sil->stationary_probs[i]; cat->stationary_probs[i+15] = wordtwo->stationary_probs[i]; cat->stationary_probs[i+20] = sil->stationary_probs[i]; cat->transition_probs[i] = sil->transition_probs[i]; cat->transition_probs[i+5] = wordone->transition_probs[i]; cat->transition_probs[i+10] = sil->transition_probs[i]; cat->transition_probs[i+15] = wordtwo->transition_probs[i]; cat->transition_probs[i+20] = sil->transition_probs[i]; } //Read in test feature_vectors* test = features_from_file("analysis/eightfour-40.out"); //Score dtw_t* trellis = *get_gaussian_trellis(test, &cat, 1, false, .1); while(!dtw_fill_next_col(trellis)); dtw_print_struct(trellis); */ return 0; }