全部产品
云市场
云游戏

C++ Demo

更新时间:2020-09-02 09:51:25

本文介绍了如何使用阿里云智能语音服务提供的C++ SDK,包括SDK的安装方法及SDK代码示例。

说明

  • 当前最新版本:1.2.2。发布日期:2018年11月14日。

  • 使用SDK前,请先阅读接口说明,详情请参见接口说明

  • 本文中的SDK只适用于2.0版语音服务。关于开通2.0版服务并获取阿里云账号AccessKey ID和AccessKey Secret,请参见开通服务

示例说明

录音文件识别示例使用了nlsCommonSDK的AlibabaNlsCommon::FileTrans提交识别请求和查询识别结果,采用的是RPC风格的POP API调用方式。

下载安装

SDK下载:

下载nlsCommonSDK,文件包含如下几部分:

  • CMakeLists.txt:示例代码工程的CMakeList文件。

  • readme.txt:SDK说明。

  • release.log:更新记录。

  • version:版本号。

  • build.sh:Demo编译脚本。

  • demo:示例文件。

    文件名描述
    fileTransDemo.cpp录音文件识别示例。
  • include:包含SDK头文件,以及部分第三方头文件。各文件如下表所示。

    文件名描述
    opensslOpenSSL头文件目录,Linux下使用。
    curlcurl头文件目录。
    uuidUUID头文件目录,Linux下使用。
    jsonjsoncpp头文件目录。
    Global.h全局声明头文件。
    FileTrans.h录音文件识别头文件。
  • lib:包含curl、jsoncpp动态库。

    根据平台不同,使用如下版本软件加载库文件:

    • linux(Glibc:2.5及以上,Gcc4或Gcc5)

    • windows(VS2013、VS2015)

编译运行操作步骤:

说明

  • Linux下安装工具要求如下:

    • Glibc 2.5及以上

    • Gcc4或Gcc5

  • Windows下需要您自己搭建示例工程(请将示例文件修改为含有BOM的UTF-8编码格式),依赖库如下:

    • openssl-1.0.2j

    • libuuid-1.0.3

    • curl-7.60.0

    • jsoncpp-0.10.6

假设示例文件已解压至path/to路径下,在Linux终端依次执行如下命令编译运行程序。

  • 支持Cmake:

    1. 确认本地系统已安装Cmake 2.4及以上版本。

    2. cd path/to/sdk/lib

    3. tar -zxvpf linux.tar.gz

    4. cd path/to/sdk

    5. ./build.sh

    6. cd path/to/sdk/demo

    7. ./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

关键接口

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

代码示例

说明

下载nls-sample-16k.wav

该示例录音文件为PCM编码格式16000Hz采样率,管控台设置的模型为通用模型。如果使用其他录音文件,请填入对应的编码格式和采样率,并在管控台设置对应的模型。关于模型设置,请参见管理项目

#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;
}