更新时间:2024-12-04 GMT+08:00
分享

使用实时语音识别

前提条件

初始化Client

初始化RasrClient,其参数包括AuthInfo。

表1 AuthInfo

参数名称

是否必选

参数类型

描述

ak

String

用户的ak,可参考AK/SK认证

sk

String

用户的sk,可参考AK/SK认证

projectId

String

项目ID,同region一一对应,参考获取项目ID

region

String

区域,如cn-north-4,参考终端节点

endpoint

String

终端节点,参考地区和终端节点。一般使用默认即可。

请求参数

请求类为RasrRequest,详见表 RasrRequest

表2 RasrRequest

参数名称

是否必选

参数类型

描述

audioFormat

String

音频格式,支持pcm等,如pcm8k16bit,参见《API参考》中开始识别章节。

property

String

属性字符串,language_sampleRate_domain, 如chinese_8k_common,参见《API参考》中开始识别章节。

通过set方法可以设置具体参数,详见表 RasrRequest设置参数

表3 RasrRequest设置参数

方法名称

是否必选

参数类型

描述

SetPunc

String

表示是否在识别结果中添加标点,取值为yes 、 no,默认no。

SetDigitNorm

String

表示是否将语音中的数字识别为阿拉伯数字,取值为yes 、 no,默认为yes。

SetVadHead

Integer

头部最大静音时间,[0, 60000],默认10000ms。

SetVadTail

Integer

尾部最大静音时间,[0, 3000],默认500ms。

SetMaxSeconds

Integer

音频最长持续时间, [1, 60],默认30s。

SetIntermediateResult

String

是否显示中间结果,yes 或 no,默认no。

SetVocabularyId

String

热词表id,若没有则不填。

SetNeedWordInfo

String

表示是否在识别结果中输出分词结果信息,取值为“yes”“no”,默认为“no”

示例代码

如下示例仅供参考,最新代码请前往SDK(websocket)章节获取并运行。

#include <iostream>

#include "RasrClient.h"
#include "RasrRequest.h"
#include "IoUtil.h"


void OnConnect() {
	std::cout << "now rasr Connect success" << std::endl;
}

void OnStart(std::string text) {
	std::cout << "now rasr receive start response: " << text << std::endl;
}

void OnResp(std::string text) {
	// text encoded by utf-8 contains chinese character, which will cause error code. So we should convert to ansi
	// cout << "rasr receive " << text << endl;
	std::cout << "now rasr receive " << Utf8ToAnsi(text) << std::endl;
}

void OnEnd(std::string text) {
	std::cout << "now rasr receive end response: " << text << std::endl;
}


void OnClose() {
	std::cout << "now rasr receive Close" << std::endl;
}

void OnError(string text) {
	std::cout << "now rasr receive error: " << text << std::endl;
}

void OnEvent(string text) {
	std::cout << "now rasr receive event: " << text << std::endl;
}

void RasrTest() {
	// 1. config parameter
	// 1.1 init authInfo
        // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
        // 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。
	std::string ak = GetEnv("HUAWEICLOUD_SDK_AK");
	std::string sk = GetEnv("HUAWEICLOUD_SDK_SK");
	string region = "";
	string projectId = "";
	AuthInfo authInfo(ak, sk, region, projectId);

	// 1.2 config Connect parameter
	HttpConfig httpConfig;
	httpConfig.SetReadTimeout(20000);
	httpConfig.SetConnectTimeout(20000);

	// 1.3 config callback, callback function are optional, if not set, it will use function in RasrListener
	WebsocketService::ptr websocketServicePtr = websocketpp::lib::make_shared<WebsocketService>();
	websocketServicePtr->SetOnConnectFunc(OnConnect);       // Connect success callback
	websocketServicePtr->SetOnStartFunc(OnStart);				// receive start response callback
	websocketServicePtr->SetOnRespFunc(OnResp);             // receive transcribe result callback
	websocketServicePtr->SetOnEndFunc(OnEnd);               // receive end response callback
	websocketServicePtr->SetOnCloseFunc(OnClose);           // Close callback
	websocketServicePtr->SetOnEventFunc(OnEvent);           // receive event callback
	websocketServicePtr->SetOnErrorFunc(OnError);           // receive error callback

	// 1.4 config request parameter
	RasrRequest request("pcm16k16bit", "chinese_16k_general");
	request.SetIntermediateResult("no");


	// 2. init client
	RasrClient* rasrClient = new RasrClient(authInfo, websocketServicePtr, httpConfig);
	
	// 3. create connection :ContinueStreamConnect/ShortStreamConnect/SentenceStreamConnect
	rasrClient->ContinueStreamConnect();

	// 4. send start
	rasrClient->SendStart(request);
	
	// 5. send binary audio. (filePtr, fileLength, byteLen, SleepTime ). If the audio is generated by recording, then it should set sleep time 0.
	int fileLength;
	std::string filePath = "../sisCppSdkDemo/123.wav";
	unsigned char* buff = ReadBinary(filePath, &fileLength);
	if (buff == nullptr) {
		cout << filePath << " read file failed";
		rasrClient->Close();
		delete rasrClient;
		return;
	}
	rasrClient->SendBinary(buff, fileLength, 3200, 50);

	// 6. send end
	rasrClient->SendEnd();

	// 7. close
	rasrClient->Close();

	delete[] buff;
	delete rasrClient;
}

int main() {
	RasrTest();
	return 0;
}

相关文档