リアルタイム音声変換文字+自動修正+意味理解
4602 ワード
効果:
音声の意味は結果の解析を返します:
JSON結果解析:
音声の意味は結果の解析を返します:
// , ,
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 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 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 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);
}
}
}
}
}