void cTumkwsjSink::cbResultPass1Current(Recog *recog, void *dummy) { //int i, j, bgn; //int len, int num; WORD_INFO *winfo; WORD_ID *seq; RecogProcess *r; Sentence *s; r=recog->process_list; if (! r->live) return; if (! r->have_interim) return; winfo = r->lm->winfo; seq = r->result.pass1.word; num = r->result.pass1.word_num; s = &(r->result.pass1); if ((num>0)&&(!isAbort())) { //juAlignPass1Keywords(r, r->am->mfcc->param); //create smile message: Kresult k; fillKresult(&k, seq, num, winfo, s->confidence, r->result.num_frame, /*s->align*/ NULL); if (resultRecp != NULL) { cComponentMessage msg("asrKeywordOutput"); msg.custData = &k; msg.userTime1 = turnStartSmileTimeCur; msg.userTime2 = turnStartSmileTimeCur + ((double)(k.turnDuration))*period; sendComponentMessage( resultRecp, &msg ); SMILE_IDBG(3,"sending 'asrKeywordOutput' message to '%s'",resultRecp); } //output content of k: int kc = 0; printf("----------current hypothesis:------------\n"); printf("numOfKw:%i\n",k.numOfKw); printf("turnDuration:%i\n",k.turnDuration); printf("keywords: "); for (kc=0;kc<(k.numOfKw);kc++) { printf("%s ",k.keyword[kc]); } printf("\n"); printf("kwConf: "); for (kc=0;kc<(k.numOfKw);kc++) { printf("%5.3f ",k.kwConf[kc]); } printf("\n"); printf("kwStartTimes: "); for (kc=0;kc<(k.numOfKw);kc++) { printf("%.3f ",k.kwStartTime[kc]); } printf("\n"); printf("-----------------------------------------\n"); printf("\n\n"); fflush(stdout); } }
void cLibsvmLiveSink::processResult(long long tick, long frameIdx, double time, float res, double *probEstim, int nClasses, double dur) { //ros::Rate loop_rate(10); // int count = 0; // while (ros::ok()) // { //// %EndTag(ROS_OK)% // /** // * This is a message object. You stuff it with data, and then publish it. // */ //// %Tag(FILL_MESSAGE)% // std_msgs::String msg; // std::stringstream ss; // ss << "hello world " << count; // msg.data = ss.str(); //// %EndTag(FILL_MESSAGE)% //// %Tag(ROSCONSOLE)% // ROS_INFO("%s", msg.data.c_str()); //// %EndTag(ROSCONSOLE)% // /** // * The publish() function is how you send messages. The parameter // * is the message object. The type of this object must agree with the type // * given as a template parameter to the advertise<>() call, as was done // * in the constructor above. // */ //// %Tag(PUBLISH)% // chatter_pub.publish(msg); //// %EndTag(PUBLISH)% //// %Tag(SPINONCE)% // ros::spinOnce(); //// %EndTag(SPINONCE)% //// %Tag(RATE_SLEEP)% // loop_rate.sleep(); //// %EndTag(RATE_SLEEP)% // ++count; // } std_msgs::String emoMsg; std_msgs::String affectMsg; if (printResult) { if ((nCls>0)&&(nClasses > 0)&&(classNames != NULL)) { if (labels!=NULL) { if ((int)res >= nClasses) res = (float)(nClasses-1); if (res < 0.0) res = 0.0; res = (float)labels[(int)res]; } if ((int)res >= nCls) res = (float)nCls; if (res < 0.0) res = 0.0; SMILE_PRINT("\n LibSAVM '%s' result (@ time: %f) : ~~> %s <~~",getInstName(),time,classNames[(int)res]); std::string instName = getInstName(); std::string emoName = "emodbEmotion"; std::string affectName = "abcAffect"; if (instName == emoName) { emoMsg.data = classNames[(int)res]; emo_pub.publish(emoMsg); } if (instName == affectName) { affectMsg.data = classNames[(int)res]; affect_pub.publish(affectMsg); } } else { SMILE_PRINT("\n LibSBVM '%s' result (@ time: %f) : ~~> %.2f <~~",getInstName(),time,res); } if (probEstim != NULL) { int i; for (i=0; i<nClasses; i++) { int idx = i; if (labels!=NULL) idx = labels[i]; if ((nCls>0)&&(nClasses > 0)&&(classNames != NULL)) { if (idx >= nCls) idx=nCls-1; if (idx < 0) idx = 0; SMILE_PRINT(" prob. class '%s': \t %f",classNames[idx],probEstim[i]); } else { SMILE_PRINT(" prob. class %i : \t %f",idx,probEstim[i]); } } } } // send result as componentMessage if (sendResult) { cComponentMessage msg("classificationResult", resultMessageName); if ((nCls>0)&&(nClasses > 0)&&(classNames != NULL)) { if (labels!=NULL) { if ((int)res >= nClasses) res = (float)(nClasses-1); if (res < 0.0) res = 0.0; res = (float)labels[(int)res]; } if ((int)res >= nCls) res = (float)nCls; if (res < 0.0) res = 0.0; strncpy(msg.msgtext, classNames[(int)res], CMSG_textLen); } msg.floatData[0] = res; msg.intData[0] = nClasses; msg.custData = probEstim; msg.userTime1 = time; msg.userTime2 = time+dur; // TO TEST ..... sendComponentMessage( resultRecp, &msg ); SMILE_IDBG(3,"sending 'classificationResult' message to '%s'",resultRecp); } }
void cTumkwsjSink::cbResultPass2(Recog *recog, void *dummy) { // int i, j; // int len; char ec[5] = {0x1b, '[', '1', 'm', 0}; WORD_INFO *winfo; WORD_ID *seq; int seqnum; int n, num; Sentence *s; RecogProcess *r; boolean multi; // HMM_Logical *p; // SentenceAlign *align; if (recog->process_list->next != NULL) multi = TRUE; else multi = FALSE; if (isAbort()) return; r=recog->process_list; if (! r->live) return; if (multi) printf("[#%d %s]\n", r->config->id, r->config->name); if (r->result.status < 0) { switch(r->result.status) { case J_RESULT_STATUS_REJECT_POWER: printf("<input rejected by power>\n"); break; case J_RESULT_STATUS_TERMINATE: printf("<input teminated by request>\n"); break; case J_RESULT_STATUS_ONLY_SILENCE: printf("<input rejected by decoder (silence input result)>\n"); break; case J_RESULT_STATUS_REJECT_GMM: printf("<input rejected by GMM>\n"); break; case J_RESULT_STATUS_REJECT_SHORT: printf("<input rejected by short input>\n"); break; case J_RESULT_STATUS_FAIL: printf("<search failed>\n"); break; } return; } winfo = r->lm->winfo; // num = r->result.sentnum; //assume just one sentence: num = 1; //consider just sentence with index n=0 n = 0; s = &(r->result.sent[n]); seq = s->word; seqnum = s->word_num; if (debug2_flag) { printf("\n%s",ec); /* newline & bold on */ } if (verbose_flag) { printf("p2_phon:"); juPutHypoPhoneme(seq, seqnum, winfo); } if (debug2_flag) { ec[2] = '0'; printf("%s\n",ec); /* bold off & newline */ } if (verbose_flag) { if (r->lmtype == LM_DFA) { /* output which grammar the hypothesis belongs to on multiple grammar */ /* determine only by the last word */ if (multigram_get_all_num(r->lm) > 1) { printf("grammar%d: %d\n", n+1, s->gram_id); } } } //create smile message: Kresult k; fillKresult(&k, seq, seqnum, winfo, s->confidence, r->result.num_frame, s->align); return; if (resultRecp != NULL) { cComponentMessage msg("asrKeywordOutput"); msg.custData = &k; msg.userTime1 = turnStartSmileTimeCur; msg.userTime2 = turnStartSmileTimeCur + ((double)(k.turnDuration))*period; sendComponentMessage( resultRecp, &msg ); SMILE_IDBG(3,"sending 'asrKeywordOutput' message to '%s'",resultRecp); } //output content of k: int kc = 0; printf("-------result package (pass 2):----------\n"); printf("numOfKw:%i\n",k.numOfKw); printf("turnDuration:%i\n",k.turnDuration); printf("keywords: "); for (kc=0;kc<(k.numOfKw);kc++) { printf("%s ",k.keyword[kc]); } printf("\n"); printf("kwConf: "); for (kc=0;kc<(k.numOfKw);kc++) { printf("%5.3f ",k.kwConf[kc]); } printf("\n"); printf("kwStartTimes: "); for (kc=0;kc<(k.numOfKw);kc++) { printf("%.3f ",k.kwStartTime[kc]); } printf("\n"); printf("-----------------------------------------\n"); printf("\n\n\n"); fflush(stdout); }
void cTumkwsjSink::cbResultPass1(Recog *recog, void *dummy) { int i,j; static char buf[MAX_HMMNAME_LEN]; WORD_INFO *winfo; WORD_ID *seq; int num; RecogProcess *r; Sentence *s; boolean multi; // int len; boolean have_progout = TRUE; if (isAbort()) return; if (recog->process_list->next != NULL) multi = TRUE; else multi = FALSE; r=recog->process_list; if (! r->live) return; if (r->result.status < 0) return; /* search already failed */ if (have_progout && r->config->successive.enabled) return; /* short pause segmentation */ if (r->config->output.progout_flag) printf("\r"); winfo = r->lm->winfo; seq = r->result.pass1.word; num = r->result.pass1.word_num; s = &(r->result.pass1); /* words */ if (verbose_flag) { /* output further info */ /* phoneme sequence */ printf("p1_phon:"); for (i=0;i<num;i++) { for (j=0;j<winfo->wlen[seq[i]];j++) { center_name(winfo->wseq[seq[i]][j]->name, buf); printf(" %s", buf); } if (i < num-1) printf(" |"); } printf("\n"); if (debug2_flag) { /* logical HMMs */ printf("pass1_best_HMMseq_logical:"); for (i=0;i<num;i++) { for (j=0;j<winfo->wlen[seq[i]];j++) { printf(" %s", winfo->wseq[seq[i]][j]->name); } if (i < num-1) printf(" |"); } printf("\n"); } } juAlignPass1Keywords(r, r->am->mfcc->param); //create smile message: Kresult k; fillKresult(&k, seq, num, winfo, s->confidence, r->result.num_frame, s->align); if (resultRecp != NULL) { cComponentMessage msg("asrKeywordOutput"); msg.custData = &k; msg.userTime1 = turnStartSmileTimeCur; msg.userTime2 = turnStartSmileTimeCur + ((double)(k.turnDuration))*period; sendComponentMessage( resultRecp, &msg ); SMILE_IDBG(3,"sending 'asrKeywordOutput' message to '%s'",resultRecp); } //output content of k: int kc = 0; printf("-------result package (pass 1):----------\n"); printf("numOfKw:%i\n",k.numOfKw); printf("turnDuration:%i\n",k.turnDuration); printf("keywords: "); for (kc=0;kc<(k.numOfKw);kc++) { printf("%s ",k.keyword[kc]); } printf("\n"); printf("kwConf: "); for (kc=0;kc<(k.numOfKw);kc++) { printf("%5.3f ",k.kwConf[kc]); } printf("\n"); printf("kwStartTimes: "); for (kc=0;kc<(k.numOfKw);kc++) { printf("%.3f ",k.kwStartTime[kc]); } printf("\n"); printf("-----------------------------------------\n"); printf("\n\n"); fflush(stdout); }