实时语音转文字+自动修正+语义理解

效果:

 

语音语义返回结果解析:

	//最重要的结果事件回调,收到文本和语音语义都会返回此事件,里面有结果信息
	
	case AIUIConstant::EVENT_RESULT:
	{
		Json::Value bizParamJson;
		Json::Reader reader;

		if (!reader.parse(event.getInfo(), bizParamJson, false)) {
			cout << "parse error!" << endl << event.getInfo() << endl;
			break;
		}
		Json::Value data = (bizParamJson["data"])[0];
		Json::Value params = data["params"];
		Json::Value content = (data["content"])[0];
		string sub = params["sub"].asString();
		if (sub == "nlp")
		{
			Json::Value empty;
			Json::Value contentId = content.get("cnt_id", empty);

			if (contentId.empty())
			{
				cout << "Content Id is empty" << endl;
				break;
			}
			string cnt_id = contentId.asString();
			int dataLen = 0;
			const char* buffer = event.getData()->getBinary(cnt_id.c_str(), &dataLen);
			string resultStr;

			if (NULL != buffer)
			{
				resultStr = string(buffer, dataLen);
				QString res = QString::fromUtf8(buffer);
				//判断字符串转化为QJsonDocument  是否出现了错误
				QJsonParseError jsonError;
				QJsonDocument json = QJsonDocument::fromJson(res.toUtf8(), &jsonError);
				QString errstring = jsonError.errorString();
				if (jsonError.error == QJsonParseError::NoError)
				{
					if (json.isObject())
					{
						QJsonObject rootObj = json.object();
						QString rootpath;
						int rootusernum;
						//是否含有key  rootpath
						if (rootObj.contains("intent"))
						{
							QJsonObject jonsInt = rootObj.value("intent").toObject();
							if (jonsInt.contains("answer"))
							{
								QJsonObject jonsAns = jonsInt.value("answer").toObject();
								QString value = jonsAns.value("text").toString();
								emit updateMsg(value);
							}
						}
					}
				}
			}
		}

JSON结果解析:

QList<QString> lstResult;
QString completeWorld;
void iat_online_record_sample::on_result(const char *result, char is_last)
{
	int islast = (int)is_last;

	QString mresult = QString::fromUtf8(result);
	QJsonParseError jsonError;
	QJsonDocument json = QJsonDocument::fromJson(mresult.toUtf8(), &jsonError);
	QString errstring = jsonError.errorString();
	if (jsonError.error == QJsonParseError::NoError)
	{
		if (json.isObject())
		{
			QJsonObject rootObj = json.object();

			if (rootObj.contains("ws"))
			{
				QJsonArray wsArray = rootObj.value("ws").toArray();
				int isize = wsArray.size();
				QString strResult;
				//解析出当前结果strResult
				for (int i = 0; i < isize; i++)
				{
					QJsonObject values = wsArray.at(i).toObject();
					if (values.contains("cw"))
					{
						QJsonArray cwArray = values.value("cw").toArray();
						QJsonObject cwObject = cwArray.at(0).toObject();
						if (cwObject.contains("w"))
						{
							strResult += cwObject.value("w").toString();
						}
					}
				}
				QString pgss = rootObj.value("pgs").toString();
				//该片结果是追加到前面的最终结果
				if (pgss == "apd")
				{
					if (lstResult.size() == 0)
					{
						m_this->updateResult(strResult, islast);
						lstResult.append(strResult);//记录每次的结果
					}
					else
					{
						//去重
						QString delRe;
						QString upRe;
						QList<QString> only1 = lstResult;
						if (only1.size() > 0)
						{
							delRe = only1.at(0);
							upRe = delRe;
						}
						for (int j = 0; j < only1.size(); j++)
						{
							if (delRe == only1.at(j))
							{
								continue;
							}
							else
							{
								upRe += only1.at(j);
								delRe = only1.at(j);
							}
						}
						m_this->updateResult(upRe + strResult, islast);
						lstResult.append(strResult);//记录每次的结果
					}
				}
				//替换前面的部分结果,替换范围为rg字段
				if (pgss == "rpl")
				{
					lstResult.append(strResult);//记录每次的结果
					QJsonArray array = rootObj.value("rg").toArray();
					int iStart = array.at(0).toInt();
					int iEnd = array.at(1).toInt();
					for (int j = iStart - 1; j < iEnd; j++)
					{
						lstResult[j ] = strResult;
					}
					//去重
					QString delRe;
					QString upRe;
					QList<QString> only1 = lstResult;
					if (only1.size() > 0)
					{
						delRe = only1.at(0);
						upRe = delRe;
					}
					for (int j = 0; j < only1.size(); j++)
					{
						if (delRe == only1.at(j))
						{
							continue;
						}
						else
						{
							upRe += only1.at(j);
							delRe = only1.at(j);
						}
					}
					m_this->updateResult(upRe, islast);
				}
			}
		}
	}
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C程序内嵌语音文字是指在C程序中集成语音文字功能,使其能够实现将语音转换文字的功能。这一功能可以用于许多场合,比如语音识别、智能语音助手、语音翻译等。 在C程序中内嵌语音文字功能,需要使用相关的语音识别库或API,比如百度语音识别、讯飞语音识别等,这些库或API提供了实现语音文字的相关函数和接口。 首先,我们需要在C程序中引入相应的库文件或API,并进行相应的配置和初始化工作。然后,通过调用相关的函数和接口,实现将语音文件进行解析和转换,得到对应的文字结果。 在转换过程中,需要注意语音文件格式的兼容性,一般支持常见的音频格式如mp3、wav等。对于不同的语音识别库或API,可能有不同的参数设置和调用方式,可以根据具体情况进行调整。 在转换完成后,我们可以进一步对文字结果进行处理和应用,比如进行关键词提取、文本分类、语义分析等。这样,我们就可以在C程序中实现语音文字的功能,并结合其他功能进行更加丰富的应用。 总之,C程序内嵌语音文字是利用语音识别库或API,在C程序中集成语音文字功能,使其能够将语音文件转换为相应的文字结果。这一功能的实现可以根据具体需求选择合适的语音识别库或API,并进行相应的配置和调用,最终实现对语音文件的解析和转换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值