首先去官网 开通服务得到 密匙
官网帮助连接:https://help.aliyun.com/document_detail/43822.html?spm=a2c0j.8204267.556860.11.3c165e57i4PFWH
可以看到 一句话识别的sdk C++ 版本的.
下载但是看到里面有一个config文件里面包含了编译所用的所有东西.
初次看到这句话
demo 编译命令及注意事项
g++ -o demo demo.cpp -pthread -I ./ -L. -ldl -lopus -lrealTimeUnity -lssl -lcrypto
g++ -o demo demo.cpp -pthread -I ./ -L. -lrealTimeUnity -lopus -lssl -lcrypto -ldl
感觉很无厘头.但事实就是这样我config自带的文件编译失败了... ... 心疼自己1s钟... ...
改良后的版本按照第二种方式排列连接库的顺序
#!/bin/bash
if [ -f libopus.so.0 ]; then
rm -rf libopus.so.0
fi
ln -s libopus.so libopus.so.0
# compile realtime
LOCAL_LDFLAGS="-pthread -I./ -L./ -lrealTimeUnity -lopus -lssl -lcrypto -ldl -D_GLIBCXX_USE_CXX11_ABI=0"
g++ -o realtime-demo realtime-demo.cpp $LOCAL_LDFLAGS
g++ -o asr-demo asr-demo.cpp $LOCAL_LDFLAGS
g++ -o tts-demo tts-demo.cpp $LOCAL_LDFLAGS
g++ -o nlu-demo nlu-demo.cpp $LOCAL_LDFLAGS
这样的方式编译能通过但是,运行没有通过.
心疼自己 1s钟
下面的连接阐述了如何在运行时找到动态库.
https://www.cnblogs.com/smartvessel/archive/2011/01/21/1940868.html
我尝试了23两个方法,都失败了心疼自己2s钟
总结下来主要有3种方法:
1. 用ln将需要的so文件链接到/usr/lib或者/lib这两个默认的目录下边
ln -s /where/you/install/lib/*.so /usr/lib
sudo ldconfig
2.修改LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/where/you/install/lib:$LD_LIBRARY_PATH
sudo ldconfig
3.修改/etc/ld.so.conf,然后刷新
vim /etc/ld.so.conf
add /where/you/install/lib
sudo ldconfig
万般无奈尝试第一种,成功... ...
接下来运行nlu-demo
发现
param is not valid. Usage: demo test.wav config.txt 1 1 [your-id] [your-scret] 0 这个问题.
看源码.按照官网的拷贝了一份config.txt
#注意:
#1. 以#开头的行为注释,处理时会直接跳过该行。
#2. 配置中每行只能出现一条配置且以key:value的形式出现,切忌中间、行头、行尾不要出现空格,除非key, value字段中本身含有空格
Url:wss://nls.dataapi.aliyun.com:443
#AppKey 不同领域对应不同的AppKey,详细可见官网简介
AppKey:nls-service
#Language:EN/CHN
#VocabId 表示所要使用的热词对应的id,详细可见官网热词说明文档
#VocabId:
#KeyWordListId 表示所要检测的关键词对应的id,详细可见官网关键词说明文档
#KeyWordListId:
#ResponseMode 支持streaming, normal
ResponseMode:streaming
#Format 支持pcm 、 opu
Format:pcm
AsrInEnable:true
发现有问题.
然后更改源码,使用第二种方式.反正看源码你会看到.
还有如果发送 test.wav 的话注意程序的最后一个参数不能使用0
使用成功:
2017-11-23 11:19:52 AliSpeech_C++SDK(WARN): createNluRequest:202 config file is NULL, pls invoke setParam to set parameters
2017-11-23 11:19:52 AliSpeech_C++SDK(DEBUG): ConnectToHttp:127 send http head to server
2017-11-23 11:19:52 AliSpeech_C++SDK(DEBUG): ConnectToHttp:144 receive http status response from server
2017-11-23 11:19:52 AliSpeech_C++SDK(DEBUG): ConnectToHttp:158 receive http head response from server
Id:1234567 {"version":"4.0","id":"5d9403853756431aa8d8ecd1f729e4d7","status":"1","status_code":0,"bstream_attached":false}
Id:1234567 {"version":"4.0","id":"5d9403853756431aa8d8ecd1f729e4d7","status":"1","status_code":200,"finish":"1","bstream_attached":false,"results":{"asr_out":{"result":"你叫什么名字?","uid":"5d9403853756431aa8d8ecd1f729e4d7","confidence":1.0,"finish":1,"version":"4.0","nbest":[{"result":"你叫什么名字?","lexical":"你 叫 什么 名字","confidence":1.0}],"status":1},"ds_out":{"nlu_result":[],"nlg_result":{},"dm_result":{},"status":"0"},"out":{"nlu_result":[],"nlg_result":{},"dm_result":{},"status":"0"}}}
Id:1234567 nls request finished
NLU应该叫做自然语言理解.我说的是你叫什么名字.出现了.鼓掌.撒花.