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

音视频及家电

734人已加入

描述

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

AI

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

AI

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

AI

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

  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的百度语音识别应用。    
编辑:黄飞

 

 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分