语音识别项目

我们知道 AI 智能音箱已经在我们生活中不少见,也许我们都玩过,智能化非常高,功能
强大,与我们平常玩的那种蓝牙音箱,Wifi 音箱有很大的区别,AI 智能在哪里呢?语音识别技
术和云端技术,主要由主控芯片,麦克风阵列,功率放大,codec,触控电路,LED 阵列组成。
AI 音箱对传统音箱主要有两大块的技术区别,一块是语音信号的前处理,包括回声消除、
波速成型、音源定位、降噪、去混响、自动语音电平控制这块是偏硬件的控制。还有一块是智
能语音交互,包括语音关键词搜索、本地语音识别、声纹识别、语音合成。
AI 智能音箱的芯片方案商:联发科,全志科技,瑞芯微等等,语音识别都有现成的方案商。
他们的麦克风阵列方案,有 2 麦,4 麦,6 麦,7 + 1 麦等等。

写上面这些是让读者了解一下专业AI音箱方案与我们在正点原子Linux开发板想实现语音
识别的差别在哪里。我们在正点原子 Linux 开发板上实现语音识别项目(功能),就不能与专业
的 AI 音箱对比了。硬件资源有限,开发板只有一个麦头(咪头座),没有那些硬件控制消除回
声,降噪等等。不过笔者在上面调用百度语音 API 识别语音,识别率还是挺高的。

下面就与大家一起在正点原子 Linux IMX6U 开发板上实现语音识别功能吧!注意:正点原
子 MINI I.MX6U 开发板没有音频芯片,不支持此实验,只有正点原子 I.MX6U ALPHA 开发板
支持。

本章简介如下:

(1)介绍百度语音技术账号申请,及简单介绍调用流程。

(2)用 Qt 编写示例程序。流程如下,录制音频后,发送调用百度语音识别 API 接口,识
别并返回结果。支持语音控制正点原子 I.MX6U开发板上的 LED 控制,其他设备可以自行拓展。

语音识别产品申请帐号

语音识别技术产品,有讯飞,百度等厂家,我们可以购买或者免费试用他们的产品。可以
直接到他们的官网上查看,有使用技术文档。下面我们以百度语音识别技术产品为例子。可以
在浏览器输入搜索“百度语音识别”,就可以找到百度 AI 开放平台。

点击进去就可以看到他的技术文档链接位置。如下图。

或者直接打开https://ai.baidu.com/ai-doc/SPEECH/Ek39uxgre就可以跳转到百度AI开放平台》
帮助文档》语音技术页面。如下图。

请仔细阅读百度语音技术的文档,里面写的非常详细,还有例子下载参考。
笔者阅读总结,想要使用百度语音识别接口,需要根据上面图中的新手指南注册百度帐号,
领取免费额度及创建中文普通话应用(创建前先领取免费额度(180 天免费额度,可调用约 5万次左右,详细请看免费额度说明))。记住自己的密钥。请自行完成及创建百度帐号,按照百
度帮助文档里的步骤,领取免费额度及创建中文普通话应用,获取密钥!程序里需要用到自己
的密钥。笔者提供的密钥是百度语音识别例程里的,如果开发次数超了可能就不能使用了。程
序中只需要 API Key 与 Secret Key。注意获取 Access Token 时有效期为 30 天,到期后需要在程
序里重新获取新的 token。

更多参考请查看百度 AI 接入指南。
注意,帮助文档里提及 SDK 包,有 LinuxC++SDK 包支持,但是目前仅支持 X64(x86-64)
CPU 架构的 Linux 操作系统。LinuxSDK 仅支持在线语音识别,固定长语音模式。简单的说就
是还不支持 ARM 架构的 SDK 包。

百度语音识别流程及示例简介

在百度 AI 帮助文档里可以看见如下重要信息。


请认真阅读调用流程,了解操作过程,对下面理解笔者编写 Qt 调用百度语音 API 的例子
会有一定的帮助。
总结:调用流程需要仔细阅读,百度提供了示例 Demo 代码,可以看到里面支持很多种编
程语言编写的 API 请求相关示例 demo 代码。没有直接 C++相关的代码。C 语言是 C++语言的
子集,我们可以直接参考 C 语言编写的例子(请自行查阅及参考百度提供的 C 语言编写的 API

请求相关示例 demo 代码)来编写 Qt 调用语音识别 API。(备注:其他语言编写的例子不在我
们教程范围。)识别的音频格式支持如上,我们可以知道一些重要的信息是支持采样率 16000、

8000 的固定值,16bit 深的单声道,音频长度最长 60 秒。格式支持 wav,恰好正点原子 Linux
I.MX6U 开发板系统支持 wav 格式播放及录制(详细请看【正点原子】I.MX6U 用户快速体验

V1.x.pdf 测试音频部分)。
备注:由于百度语音识别的 API 例子放在 github(开源网站),国外网站的原因,可能打开
失败,请多次尝试,如果一直无法访问,那么我们直接往下看使用笔者编写 Qt 的示例吧。不能
访问的话,笔者也没办法的。

百度短语音识别 API 接口

源码路径为 4/02_asr_demo/asr/asr.h,内容如下。asr 是语音识别功能 demo,(asr 译作自动
语音识别技术即 automatic speech recognition)

 /****************************************************************** Copyright © Deng Zhimao Co., Ltd. 1990-2021. All rights reserved. * @projectName asr * @brief asr.h
* @author Deng Zhimao * @email 1252699831@qq.com * @net www.openedv.com * @date 2021-06-03 *******************************************************************/ 1 #ifndef ASR_H 2 #define ASR_H 3 4 #include <QWidget> 5 6 #include <QNetworkAccessManager> 7 #include <QNetworkReply> 8 9 #include <QJsonDocument> 10 #include <QJsonParseError> 11 #include <QJsonObject> 12 #include <QJsonArray> 13 #include <QHostInfo> 14 15 #include <QFile> 16 17 class Asr : public QWidget 18 { 19 Q_OBJECT 20 21 public: 22 Asr(QWidget *parent = nullptr); 23 ~Asr(); 24 25 /* 请求网络 */ 26 void requestNetwork(QString, QByteArray); 27 28 /* 获取识别结果 */ 29 void getTheResult(QString fileName); 30 31 private: 32 /* 存储获取 tokenUrl 地址 */ 33 QString tokenUrl; 34 35 /* 存储 serverapi 地址 */ 36 QString serverApiUrl; 37 38 /* 最终需要访问 token 的地址 */ 39 QString accessToken; 40 41 /* 获取 token 的接口*/ 42 const QString token_org = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials
&client_id=%1&client_secret=%2&"; 43 44 /* 填写网页上申请的 appkey 如 g_api_key="g8eBUMSokVB1BHGmgxxxxxx" */ 45 const QString api_key = "kVcnfD9iW2XVZSMaLMrtLYIz"; 46 47 /* 填写网页上申请的 APP SECRET 如
$secretKey="94dc99566550d87f8fa8ece112xxxxx" */ 48 const QString secret_key = "O9o1O213UgG5LFn0bDGNtoRN3VWl2du6"; 49 50 /* 百度服务器 API 接口,发送语音可返回识别结果 */ 51 const QString server_api = "http://vop.baidu.com/server_api?dev_pid=1537&cuid=%1&token=%2"; 52 53 /* 网络管理 */ 54 QNetworkAccessManager *networkAccessManager; 55 56 QString getJsonValue(QByteArray ba, QString key); 57 58 QFile file; 59 60 private slots: 61 62 /* 准备读取响应返回来的数据 */ 63 void readyReadData(); 64 65 /* 响应完成处理 */ 66 void replyFinished(); 67 68 signals: 69 void asrReadyData(QString); 70 71 }; 72 #endif // ASR_H

第 45 行,请填写读者自己在网页上申请的 API Key。以防万一示例中的 API Key 过期不可
用!
第 47 行,请填写读者在网页上申请的 Secret Key。以防万一示例中的 Secret Key 过期不可
用!
其他地址由来是见百度给出的 Demo 示例,及百度的帮助文档。这里就不详细说了。原理
与上一章原子云 API 接口相似。不过百度语音识别需要通过自己的帐号,指定地址获取访问的

Token 源地址,然后将得到的 Access Token 地址与语音识别服务器地址拼接,发送语音到服务
器,就可以返回识别的结果了。详细请参考源码 4/02_asr_demo/asr/asr.cpp。

QT学习笔记(语音识别项目 )相关推荐

  1. Qt学习笔记之国际化

    国际化的英文表述为Internationalization,通常简写为I18N(首尾字母加中间的字符数),一个应用程序的国际化就是使该应用程序可以让其他国家的用户使用的过程. 1. 相关的Qt类和AP ...

  2. QT学习笔记(十):通用算法示例

    QT学习笔记(十):通用算法示例 std是C++标准库统一使用的命名空间(namespace)的名称,C++标准库中的名字全部都在std这个命名空间中,std也就是英文"standard&q ...

  3. QT学习笔记(九):遍历容器-迭代器(iterators)

    QT学习笔记(九):遍历容器-迭代器(iterators) 遍历容器 : 1.Jave风格: 2.STL风格: 3.foreach 关键字: 遍历容器 : 遍历一个容器可以使用迭代器(iterator ...

  4. QT学习笔记(八):顺序容器和关联容器

    QT学习笔记(八):顺序容器和关联容器 一.前言 二.容器介绍 2.1 顺序容器 2.2 关联容器 二.顺序容器示例 三.关联容器 一.前言 在Qt库中为我们提供了一系列的基于模板的容器类(conta ...

  5. QT学习笔记(二):QT MinGW 和 MSVC 编译方式

    QT学习笔记(二):QT MinGW 和 MSVC 编译方式 Qt 中有两种方式编译:一种是MinGW ,另一种MSVC,是使用两种不同的编译器. 1.MSVC是指微软的VC编译器: 2.MingGW ...

  6. Qt 学习笔记(5)绘图 五子棋游戏

    在上一篇博客C++ Qt学习笔记(4)绘图中介绍了Qt中的绘图方法,基于上一篇的博客的知识,使用QPainter设计一个五子棋的棋盘,后续会完成五子棋的游戏设计. 1. 棋盘的设计 首先需要绘制棋盘的 ...

  7. QT学习笔记(摘抄)

    QT学习笔记-1.QT主要的对象 说来惭愧学习c++很长时间了一直没有使用c++开发过软件界面 所以现在想认认真真的学习一个c++图形界面框架库 本来想学习Xwidget但是这个资料不大好找 有啥问题 ...

  8. QT 学习笔记(六)

    文章目录 一.设计器的使用 二.常用控件 1. Containers 容器类 2. Input Widgets 输出控件 3. Display Widgets 显示类控件 三.代码和运行结果 1. 主 ...

  9. Qt学习笔记,Qt国际化

    Qt学习笔记,Qt国际化 Qt国际化步骤: 第一步:设置.pro文件,加入TRANSLATIONS为国际化做准备 TRANSLATIONS = language/language_en.ts\     ...

  10. Qt学习笔记,Qt程序架构设计要旨

    Qt学习笔记,Qt程序架构设计要旨 时间过得很快,转眼学习Qt已经有一个多月了,对Qt的学习也在不断的深入中.自己手下的code也很多了,不过不得不说,还有很多的部分没有接触过,比如网络编程,2D,3 ...

最新文章

  1. Python Web实时消息后台服务器推送技术---GoEasy
  2. 限时领取!CSDN夏日惊喜礼包上线啦~
  3. mybatis.mapper-locations 配置多个mapper路径
  4. 【Transformer】ACMix:On the Integration of Self-Attention and Convolution
  5. python矩阵施密特标准型_矩阵与数值计算(3)——Schur标准型和Jordan分解
  6. 调用异步服务时的超时处理
  7. 收集常用的Linux常用命令
  8. 无碳小车 matlab,基于无碳小车前轮运动关系的MATLAB运动轨迹仿真.doc
  9. 腾讯 2016 春季实习校招模拟笔试
  10. Appium框架中Android下EditText内容清除
  11. 如何在Shell脚本中使用if-else?
  12. MFC CListCtrl 将一个列表的选中项添加到另一个列表
  13. 如何让jpa 持久化时不校验指定字段
  14. 常见的java设计模式
  15. 单片机c语言 课程设计报告,51单片机课程设计报告.doc
  16. sca60c使用程序_使用PHP的SDO和SCA扩展
  17. 字符串的倒叙输出(直接倒叙和单词倒叙)
  18. 手机算不算计算机系统,现在的手机是不是和电脑一样是组装机
  19. 条件概率的本质是样本空间的缩减
  20. 新数组中的元素是对原数组中的元素升序排列后所得。

热门文章

  1. 个人观点:Cisco和Juniper认证的比较
  2. vs2008 控制台程序在win2000上无法运行的 提示缺少dll等问题
  3. 用C#写的一个类似网吧游戏菜单的软件
  4. 关于HashMap几个刁钻的面试题,第四个我就跪了
  5. 提取数据以及清洗数据
  6. 实用的生产管理系统案例分析:如何应对市场快速变化?
  7. 华为手机打开html文件,华为手机必须打开的6个功能,让你手机顺滑流畅,再用3年也不卡!...
  8. 十多年零工资!马斯克获得近8亿美元绩效股票期权奖励
  9. 如何做一个基于微信电影院订票选座小程序系统毕业设计毕设作品
  10. linux内核如何修改lowmem,Linux Kernel Tuning for C500k