如何把语音识别功能加到你的项目中?

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

305d8468-ad16-11ed-bfe3-dac502259ad0.png

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

308d80a0-ad16-11ed-bfe3-dac502259ad0.png

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

30f088a8-ad16-11ed-bfe3-dac502259ad0.png

  然后开始录音,并且把音频数据以文件的形式保存下来。

  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,再配合官方的文档,基本就能搞定。

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论