| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
|
|
| #include "kws_detections.h" |
|
|
| void |
| kws_detections_reset(kws_detections_t *detections) |
| { |
| gnode_t *gn; |
|
|
| if (!detections->detect_list) |
| return; |
|
|
| for (gn = detections->detect_list; gn; gn = gnode_next(gn)) |
| ckd_free(gnode_ptr(gn)); |
| glist_free(detections->detect_list); |
| detections->detect_list = NULL; |
| } |
|
|
| void |
| kws_detections_add(kws_detections_t *detections, const char* keyphrase, int sf, int ef, int prob, int ascr) |
| { |
| gnode_t *gn; |
| kws_detection_t* detection; |
| for (gn = detections->detect_list; gn; gn = gnode_next(gn)) { |
| kws_detection_t *det = (kws_detection_t *)gnode_ptr(gn); |
| if (strcmp(keyphrase, det->keyphrase) == 0 && det->sf < ef && det->ef > sf) { |
| if (det->prob < prob) { |
| det->sf = sf; |
| det->ef = ef; |
| det->prob = prob; |
| det->ascr = ascr; |
| } |
| return; |
| } |
| } |
|
|
| |
| detection = (kws_detection_t *)ckd_calloc(1, sizeof(*detection)); |
| detection->sf = sf; |
| detection->ef = ef; |
| detection->keyphrase = keyphrase; |
| detection->prob = prob; |
| detection->ascr = ascr; |
| detections->detect_list = glist_add_ptr(detections->detect_list, detection); |
| } |
|
|
| char * |
| kws_detections_hyp_str(kws_detections_t *detections, int frame, int delay) |
| { |
| gnode_t *gn; |
| char *c; |
| int len; |
| char *hyp_str; |
|
|
| len = 0; |
| for (gn = detections->detect_list; gn; gn = gnode_next(gn)) { |
| kws_detection_t *det = (kws_detection_t *)gnode_ptr(gn); |
| if (det->ef < frame - delay) { |
| len += strlen(det->keyphrase) + 1; |
| } |
| } |
|
|
| if (len == 0) { |
| return NULL; |
| } |
|
|
| hyp_str = (char *)ckd_calloc(len, sizeof(char)); |
| c = hyp_str; |
| detections->detect_list = glist_reverse(detections->detect_list); |
| for (gn = detections->detect_list; gn; gn = gnode_next(gn)) { |
| kws_detection_t *det = (kws_detection_t *)gnode_ptr(gn); |
| if (det->ef < frame - delay) { |
| memcpy(c, det->keyphrase, strlen(det->keyphrase)); |
| c += strlen(det->keyphrase); |
| *c = ' '; |
| c++; |
| } |
| } |
| if (c > hyp_str) { |
| c--; |
| *c = '\0'; |
| } |
| detections->detect_list = glist_reverse(detections->detect_list); |
| return hyp_str; |
| } |
|
|
|
|