全部产品
云市场

C++ Demo

更新时间:2019-10-11 14:19:59

提示:

  • 在使用SDK之前,请先确保已阅读了接口说明文档
  • 本文档中的SDK只适用于7月5日新发布的2.0版语音服务,如果您是之前开通的,要使用此SDK需要新开通2.0版服务

录音文件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编译脚本

注意:

  1. Linux环境下,运行环境最低要求:Glibc 2.5及以上, Gcc4、Gcc5。
  2. Windows下需要您自己搭建demo工程。

依赖库:

  1. openssl-1.0.2j
  2. libuuid-1.0.3
  3. curl-7.60.0
  4. jsoncpp-0.10.6

Linux下demo编译过程:

  1. 1. 请确认本地系统以安装Cmake,最低版本2.4
  2. 2. cd path/to/sdk/lib
  3. 3. tar -zxvpf linux.tar.gz
  4. 4. cd path/to/sdk
  5. 5. 执行[./build.sh]编译demo
  6. 6. 编译完毕,进入demo目录,执行
  7. ./fileTransDemo your-AccessKeyId your-AccessKeySecret your-appkey
  8. 如果不支持cmake,可以尝试手动编译:
  9. 1: cd path/to/sdk/lib
  10. 2: tar -zxvpf linux.tar.gz
  11. 3: cd path/to/sdk/demo
  12. 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
  13. 5: export LD_LIBRARY_PATH=path/to/sdk/lib/linux/
  14. 6: ./fileTransDemo your-AccessKeyId your-AccessKeySecret your-appkey
  15. Windows平台需要您自己搭建工程(请将Demo文件修改为含有BOMUTF-8编码格式)。

关键接口说明

  • FileTrans:录音文件识别对象。您可以从中获取录音文件识别结果、失败信息等。

录音文件识别代码完整示例

录音文件说明: Demo中使用的录音文件为PCM编码格式16000Hz采样率,管控台设置的模型为通用模型;如果使用其他录音文件,请填入对应的编码格式和采样率,并在管控台设置对应的模型,模型设置请阅读管理项目一节。

nls-sample-16k.wav


阿里云鉴权:使用过程中,所有的调用均通过阿里云账号来完成鉴权操作。通过传入阿里云账号的AccessKey ID和AccessKey Secret(获取方法请阅读开通服务一节)。

示例

  1. #include <iostream>
  2. #include <string>
  3. #include "FileTrans.h"
  4. #ifdef _WIN32
  5. #include <windows.h>
  6. #endif // _WIN32
  7. using std::string;
  8. using std::cout;
  9. using std::endl;
  10. using namespace AlibabaNlsCommon;
  11. #if defined _WIN32
  12. string UTF8ToGBK(const string &strUTF8) {
  13. int len = MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, NULL, 0);
  14. unsigned short * wszGBK = new unsigned short[len + 1];
  15. memset(wszGBK, 0, len * 2 + 2);
  16. MultiByteToWideChar(CP_UTF8, 0, (char*)strUTF8.c_str(), -1, (wchar_t*)wszGBK, len);
  17. len = WideCharToMultiByte(CP_ACP, 0, (wchar_t*)wszGBK, -1, NULL, 0, NULL, NULL);
  18. char *szGBK = new char[len + 1];
  19. memset(szGBK, 0, len + 1);
  20. WideCharToMultiByte(CP_ACP, 0, (wchar_t*)wszGBK, -1, szGBK, len, NULL, NULL);
  21. string strTemp(szGBK);
  22. delete[] szGBK;
  23. delete[] wszGBK;
  24. return strTemp;
  25. }
  26. #endif
  27. // 录音文件识别
  28. int fileTrans(const char* accessKeyId, const char* accessKeySecret, const char* appKey, const char* fileLink) {
  29. FileTrans request;
  30. /*设置阿里云账号AccessKey Id*/
  31. request.setAccessKeyId(accessKeyId);
  32. /*设置阿里云账号AccessKey Secret*/
  33. request.setKeySecret(accessKeySecret);
  34. /*设置阿里云AppKey*/
  35. request.setAppKey(appKey);
  36. /*设置音频文件url地址*/
  37. request.setFileLinkUrl(fileLink);
  38. /*开始文件识别, 成功返回0, 失败返回-1*/
  39. int ret = request.applyFileTrans();
  40. if (-1 == ret) {
  41. cout << "FileTrans failed: " << request.getErrorMsg() << endl; /*获取失败原因*/
  42. return -1;
  43. } else {
  44. string result = request.getResult();
  45. #ifdef _WIN32
  46. result = UTF8ToGBK(result);
  47. #endif
  48. cout << "FileTrans successed: " << result << endl;
  49. return 0;
  50. }
  51. }
  52. int main(int argc, char* argv[]) {
  53. if (argc < 4) {
  54. cout << "FileTransDemo need params : <AccessKey Id> <AccessKey Secret> <app - key>" << endl;
  55. return -1;
  56. }
  57. const char* accessKeyId = argv[1];
  58. const char* accessKeySecret = argv[2];
  59. const char* appKey = argv[3];
  60. const char* fileLink = "https://aliyun-nls.oss-cn-hangzhou.aliyuncs.com/asr/fileASR/examples/nls-sample-16k.wav";
  61. fileTrans(accessKeyId, accessKeySecret, appKey, fileLink);
  62. return 0;
  63. }