提示:
录音文件Demo
录音文件识别的C++ Demo使用了nlsCommonSDK的AlibabaNlsCommon::FileTrans用来提交录音文件识别请求和识别结果查询,采用的是RPC风格的POP API调用。
SDK 说明
SDK下载链接:nlsCommonSDK
当前最新版本:1.2.2,发布日期:2018年11月14号。
SDK目录说明:
- CMakeLists.txt demo工程的CMakeList文件
- demo
文件名 | 描述 |
---|---|
fileTransDemo.cpp | 录音文件识别Demo |
- include 包含sdk头文件,以及部分第三方头文件。各文件描述见下表
文件名 | 描述 |
---|---|
openssl | OpenSSL头文件目录,Linux下使用 |
curl | curl头文件目录 |
uuid | UUID头文件目录,Linux下使用 |
json | jsoncpp头文件目录 |
Global.h | 全局声明头文件 |
FileTrans.h | 录音文件识别头文件 |
- lib包含sdk,以及第三方依赖库。其中根据平台不同,可以选择Linux版本libnlsCommonSdk.so(glibc:2.5及以上, Gcc4, Gcc5)、Windows版本nlsCommonSdk.dll(VS2013、VS2015)
- readme.txt SDK说明
- release.log 更新记录
- version 版本号
- build.sh demo编译脚本
注意:
- Linux环境下,运行环境最低要求:Glibc 2.5及以上, Gcc4、Gcc5。
- Windows下需要您自己搭建demo工程。
依赖库:
- openssl-1.0.2j
- libuuid-1.0.3
- curl-7.60.0
- jsoncpp-0.10.6
Linux下demo编译过程:
1. 请确认本地系统以安装Cmake,最低版本2.4
2. cd path/to/sdk/lib
3. tar -zxvpf linux.tar.gz
4. cd path/to/sdk
5. 执行[./build.sh]编译demo
6. 编译完毕,进入demo目录,执行
./fileTransDemo your-AccessKeyId your-AccessKeySecret your-appkey
如果不支持cmake,可以尝试手动编译:
1: cd path/to/sdk/lib
2: tar -zxvpf linux.tar.gz
3: cd path/to/sdk/demo
4: g++ -o fileTransDemo fileTransDemo.cpp -I path/to/sdk/include/ -L path/to/sdk/lib/linux -ljsoncpp -lssl -lcrypto -lcurl -luuid -lnlsCommonSdk -D_GLIBCXX_USE_CXX11_ABI=0
5: export LD_LIBRARY_PATH=path/to/sdk/lib/linux/
6: ./fileTransDemo your-AccessKeyId your-AccessKeySecret your-appkey
Windows平台需要您自己搭建工程(请将Demo文件修改为含有BOM的UTF-8编码格式)。
关键接口说明
- FileTrans:录音文件识别对象。您可以从中获取录音文件识别结果、失败信息等。
录音文件识别代码完整示例
录音文件说明: Demo中使用的录音文件为PCM编码格式16000Hz采样率,管控台设置的模型为通用模型;如果使用其他录音文件,请填入对应的编码格式和采样率,并在管控台设置对应的模型,模型设置请阅读管理项目一节。
nls-sample-16k.wav
阿里云鉴权:使用过程中,所有的调用均通过阿里云账号来完成鉴权操作。通过传入阿里云账号的AccessKey ID和AccessKey Secret(获取方法请阅读开通服务一节)。
示例
#include <iostream>
#include <string>
#include "FileTrans.h"
#ifdef _WIN32
#include <windows.h>
#endif // _WIN32
using std::string;
using std::cout;
using std::endl;
using namespace AlibabaNlsCommon;
#if defined _WIN32
string UTF8ToGBK(const string &strUTF8) {
int len = MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, NULL, 0);
unsigned short * wszGBK = new unsigned short[len + 1];
memset(wszGBK, 0, len * 2 + 2);
MultiByteToWideChar(CP_UTF8, 0, (char*)strUTF8.c_str(), -1, (wchar_t*)wszGBK, len);
len = WideCharToMultiByte(CP_ACP, 0, (wchar_t*)wszGBK, -1, NULL, 0, NULL, NULL);
char *szGBK = new char[len + 1];
memset(szGBK, 0, len + 1);
WideCharToMultiByte(CP_ACP, 0, (wchar_t*)wszGBK, -1, szGBK, len, NULL, NULL);
string strTemp(szGBK);
delete[] szGBK;
delete[] wszGBK;
return strTemp;
}
#endif
// 录音文件识别
int fileTrans(const char* accessKeyId, const char* accessKeySecret, const char* appKey, const char* fileLink) {
FileTrans request;
/*设置阿里云账号AccessKey Id*/
request.setAccessKeyId(accessKeyId);
/*设置阿里云账号AccessKey Secret*/
request.setKeySecret(accessKeySecret);
/*设置阿里云AppKey*/
request.setAppKey(appKey);
/*设置音频文件url地址*/
request.setFileLinkUrl(fileLink);
/*开始文件识别, 成功返回0, 失败返回-1*/
int ret = request.applyFileTrans();
if (-1 == ret) {
cout << "FileTrans failed: " << request.getErrorMsg() << endl; /*获取失败原因*/
return -1;
} else {
string result = request.getResult();
#ifdef _WIN32
result = UTF8ToGBK(result);
#endif
cout << "FileTrans successed: " << result << endl;
return 0;
}
}
int main(int argc, char* argv[]) {
if (argc < 4) {
cout << "FileTransDemo need params : <AccessKey Id> <AccessKey Secret> <app - key>" << endl;
return -1;
}
const char* accessKeyId = argv[1];
const char* accessKeySecret = argv[2];
const char* appKey = argv[3];
const char* fileLink = "https://aliyun-nls.oss-cn-hangzhou.aliyuncs.com/asr/fileASR/examples/nls-sample-16k.wav";
fileTrans(accessKeyId, accessKeySecret, appKey, fileLink);
return 0;
}