音视频及家电
如何用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条评论
快来发表一下你的评论吧 !