Closed GoogleCodeExporter closed 9 years ago
It seems I understand the description of the problem right, though couldn't get
the
same results. It works to me for both cases. I quickly used the NLSML result
from the
network capture you attached against umc and asterisk applications and both
behaved
the same way. See my Asterisk console output below.
ANNOUNCE rtsp://192.168.1.10:1554/media/speechrecognizer RTSP/1.0
CSeq: 4
Session: f68573bbff90d041
Content-Type: application/mrcp
Content-Length: 312
RECOGNITION-COMPLETE 3 COMPLETE MRCP/1.0
Completion-Cause: 000 success
Content-Type: application/x-nlsml
Content-Length: 181
<?xml version='1.0'?><result><interpretation grammar='digit'
confidence='85.37'><input
mode='speech'>...</input><instance><answer>Masr</answer></instance></interpretat
ion>
</result>
[Apr 15 04:02:58] NOTICE[7351]: res_speech_unimrcp.c:569 uni_recog_get: Get
result
'f68573bbff90d041'
[Apr 15 04:02:58] NOTICE[7351]: res_speech_unimrcp.c:634 uni_recog_get:
Interpreted
input:... score:85 grammar:none
I'd suggest you put a few traces in nlsml_doc_load located in apt_nlsmsl_doc.c.
Also, just wonder if you use proper APR and APR-Util libs in both cases. Note
that
Ubuntu comes with its own APR libraries.
Original comment by achalo...@gmail.com
on 14 Apr 2010 at 7:18
[deleted comment]
Thanks achaloyan for your prompt response. As I mentioned my C/C++ is a bit
rusty,
can you please guide me how can I ast_log the whole body text on which
nlsml_doc_load
works? In the trace I see the extra define grammar after the nlsml result which
is
weird and I do not see that when using the command line.
I am more suspicious about the libmrcp*.so libs because although the mrcpclient
executable displays 0.10, and I can compile the asterisk plugin with it, I can
not
load that plugin because I get symbol not found for
mrcp_client_connection_timeout_set I checked ldconfig -v and updatedb/locate
and the
libs seem to be ok, unless I am missing something.
Original comment by taz...@gmail.com
on 16 Apr 2010 at 7:18
OK, now able to display the ->buf, and it looks ok to me, so now I am puzzled
why the
result was not interpreted:
[Apr 16 17:10:16] WARNING[14779]: res_speech_unimrcp.c:593 uni_recog_get:
Failed to
load NLSML document: <?xml version='1.0'?><result><interpretation
grammar='digit'
confidence='80.22'><input
mode='speech'>���</input><instance><answer>Masr</answer></instance></inter
pretation>
</result>
Original comment by taz...@gmail.com
on 16 Apr 2010 at 12:12
I suspect you linked against wrong libraries.
To help you out a bit, I've added a few traces in NLSML document loader.
See r1655 and apply the modified source file (apt_nlsml_doc.c) or the diff over
the
version you're using and check the output.
Original comment by achalo...@gmail.com
on 16 Apr 2010 at 6:42
Thanks a lot for your help with the traces, unfortunately the first one failed:
Failed to feed NLSML input to the parser
Well with the weekend already here, I had to do an ugly hack to get it working
for
the demo. I was using Ubuntu because that is my desktop OS, on servers I use
CentOS
so I have high hopes not to get into these Library issues on it, otherwise will
keep
using my hack if it still does not work:
char *tmp1;
char *tmp2;
char *buf = strdup(nlsml_result->buf);
tmp1 = strstr( buf, "grammar='" );
tmp1 += 9;
tmp2 = strstr( tmp1, "'" );
int idx = (tmp2-tmp1);
strncpy( tmp2, tmp1, idx );
tmp2[idx] = '\0';
speech->results->grammar = strdup(tmp2);
buf = strdup(nlsml_result->buf);
tmp1 = strstr( buf, "confidence='" );
tmp1 += 12;
tmp2 = strstr( tmp1, "'" );
idx = (tmp2-tmp1);
strncpy( tmp2, tmp1, idx );
tmp2[idx] = '\0';
speech->results->score = atoi(tmp2);
buf = strdup(nlsml_result->buf);
tmp1 = strstr( buf, "<answer>" );
tmp1 += 8;
tmp2 = strstr( tmp1, "</answer>" );
idx = (tmp2-tmp1);
strncpy( tmp2, tmp1, idx );
tmp2[idx] = '\0';
speech->results->text = strdup(tmp2);
Original comment by taz...@gmail.com
on 17 Apr 2010 at 4:59
Have you managed to workaround this issue?
Original comment by achalo...@gmail.com
on 27 Apr 2010 at 1:10
I am using the code above, so instead of parsing it the proper way I am just
getting
the info I require into the structure and return, hence bypassing the library
causing
problems.
Thanks for your concerns though.
Original comment by taz...@gmail.com
on 27 Apr 2010 at 1:37
This issue remains a bit strange to me. I'd suggest to use ldd to check whether
both
UniMRCP client application and Asterisk module are using the same libraries. The
libraries to check are apr, apr-util and expat
ldd ldd /usr/local/unimrcp/lib/libunimrcpclient.so
ldd /usr/lib/asterisk/modules/res_speech_unimrcp.so
Original comment by achalo...@gmail.com
on 5 May 2010 at 5:27
As far as I still have no clue what was wrong there, and you have found a
workaround,
I'm going to close this issue.
Feel free to re-open, if you have an update.
Original comment by achalo...@gmail.com
on 12 May 2010 at 5:40
Original issue reported on code.google.com by
taz...@gmail.com
on 14 Apr 2010 at 2:04Attachments: