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);

  }
}
Ejemplo n.º 2
0
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);


}