音视频及家电
如何用2分钟的时间,把语音识别功能加到你的项目中? 早在十年前,就有一些大厂推出了AI开放平台,这里面就包含语音识别的功能。

用法也非常简单,大概的流程就是,先把你的语音录制成文件,然后发送给服务器,服务器识别后得到数据,最后返回给你,全程不涉及语音识别,但是却完成了语音识别功能。

以百度AI平台为例,先注册一个账号,领取免费额度,这一步还有重要的信息,比如各种id、服务器地址等等。

然后开始录音,并且把音频数据以文件的形式保存下来。
QAudioDeviceInfo device = QAudioDeviceInfo::defaultInputDevice();
if (device.isNull()) //录音设备不存在
{
QMessageBox::warning(NULL, "QAudioDeviceInfo", "录音设备不存在");
}
else
{
//音频编码要求
QAudioFormat m_format;
//设置采样频率
m_format.setSampleRate(16000);
//设置通道数
m_format.setChannelCount(1);
//设置位深
m_format.setSampleSize(16);
//设置编码
m_format.setCodec("audio/pcm");
//判断设备是否支持该格式
if (!device.isFormatSupported(m_format))
{
m_format = device.nearestFormat(m_format);
}
//打开文件
m_file = new QFile;
m_file->setFileName(fileName);
m_file->open(QIODevice::WriteOnly);
//创建录音对象
m_audio = new QAudioInput(m_format, this);
m_audio->start(m_file);
}
注:以上代码基于QT! 接下来,就是通过HTTP协议把数据发送给服务器。
//把文件转换成QByteArray;
QFile file;
file.setFileName(fileName);
file.open(QIODevice::ReadOnly);
requestData =file.readAll();
file.close();
replyData.clear();
//再次发起请求
result = m_http.post_sync(speechUrl, header, requestData, replyData);
if (result)
{
QString key = "result";
QString text = getJsonValue(replyData, key);
return text;
//qDebug() << accessToken;
}
else
{
QMessageBox::warning(NULL, "识别提示", "识别失败");
}
顺利的话,我们会收到一个json数据包,里面就包含了识别到的文字。
QJsonParseError parseError;
QJsonDocument jsonDocument = QJsonDocument::fromJson(ba, &parseError);
if (parseError.error == QJsonParseError::NoError)
{
if (jsonDocument.isObject())
{
//jsonDocument转换成json对象
QJsonObject jsonObj = jsonDocument.object();
if (jsonObj.contains(key))
{
QJsonValue jsonVal = jsonObj.value(key);
if (jsonVal.isString()) //字符串
{
return jsonVal.toString();
}
else if (jsonVal.isArray()) //数组
{
QJsonArray arr = jsonVal.toArray(); //转换成JsonArray
QJsonValue jv = arr.at(0); //获取第1个元素
return jv.toString();
}
}
}
}
这个过程,我们只需要会一些网络编程、文件操作、解析json,再配合官方的文档,基本就能搞定。 如果需要详细教程,扫描下方二维码,基于QT的百度语音识别应用。
全部0条评论
快来发表一下你的评论吧 !