linux系统中利用QT实现语音识别项目的操作方法

简介: linux系统中利用QT实现语音识别项目的操作方法

     大家好,今天主要和大家分享一下,如何使用linux系统上的语音识别项目的操作方法与实现。

 



第一:语音识别基本简介

     AI音箱对传统音箱主要有两大块的技术区别,一块是语音信号的前处理,包括回声消除、波速成型、音源定位、降噪、去混响、自动语音电平控制这块是偏硬件的控制。还有一块是智 能语音交互,包括语音关键词搜索、本地语音识别、声纹识别、语音合成。

    写上面的这些是让读者了解一下专业AI音箱方案与开发板实现的语音识别的差别在哪里。

    说明语音识别项目的基本操作过程:

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

2、用QT编写示例程序。流程如下,录制音频后,发送调用百度语音识别API接口,识别并返回结果。支持语音控制开发板上的LED控制。

第二:语音识别产品申请账号

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

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

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

记住自己的密钥。请自行完成及创建百度帐号,按照百 度帮助文档里的步骤,领取免费额度及创建中文普通话应用,获取密钥!程序里需要用到自己 的密钥。笔者提供的密钥是百度语音识别例程里的,如果开发次数超了可能就不能使用了。程 序中只需要 API Key 与 Secret Key。注意获取 Access Token 时有效期为 30 天,到期后需要在程 序里重新获取新的 token。

第二:百度语音识别流程及示例

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

   总结:调用流程需要仔细阅读,百度提供了示例 Demo 代码,可以看到里面支持很多种编 程语言编写的 API 请求相关示例 demo 代码。没有直接 C++相关的代码。C 语言是 C++语言的 子集,我们可以直接参考 C 语言编写的例子(请自行查阅及参考百度提供的 C 语言编写的 API 请求相关示例 demo 代码)来编写 Qt 调用语音识别 API。(备注:其他语言编写的例子不在我 们教程范围。)识别的音频格式支持如上,我们可以知道一些重要的信息是支持采样率 16000、 8000 的固定值,16bit 深的单声道,音频长度最长 60 秒。格式支持 wav,恰好正点原子 Linux I.MX6U 开发板系统支持 wav 格式播放及录制。

第三:具体代码实现

    asr 是语音识别功能 demo。

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 8888;
46
47 /* 填写网页上申请的 APP SECRET 如
$secretKey="94dc99566550d87f8fa8ece112xxxxx" */
48 const QString 8888;
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 过期不可 用

             

 

总结:原理 与原子云 API 接口相似。不过百度语音识别需要通过自己的帐号,指定地址获取访问的 Token 源地址,然后将得到的 Access Token 地址与语音识别服务器地址拼接,发送语音到服务 器,就可以返回识别的结果了。

相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
目录
相关文章
|
4天前
|
Linux 应用服务中间件 Shell
linux系统服务二!
本文详细介绍了Linux系统的启动流程,包括CentOS 7的具体启动步骤,从BIOS自检到加载内核、启动systemd程序等。同时,文章还对比了CentOS 6和CentOS 7的启动流程,分析了启动过程中的耗时情况。接着,文章讲解了Linux的运行级别及其管理命令,systemd的基本概念、优势及常用命令,并提供了自定义systemd启动文件的示例。最后,文章介绍了单用户模式和救援模式的使用方法,包括如何找回忘记的密码和修复启动故障。
19 5
linux系统服务二!
|
4天前
|
Linux 应用服务中间件 Shell
linux系统服务!!!
本文详细介绍了Linux系统(以CentOS7为例)的启动流程,包括BIOS自检、读取MBR信息、加载Grub菜单、加载内核及驱动程序、启动systemd程序加载必要文件等五个主要步骤。同时,文章还对比了CentOS6和CentOS7的启动流程图,并分析了启动流程的耗时。此外,文中还讲解了Linux的运行级别、systemd的基本概念及其优势,以及如何使用systemd管理服务。最后,文章提供了单用户模式和救援模式的实战案例,帮助读者理解如何在系统启动出现问题时进行修复。
21 3
linux系统服务!!!
|
4天前
|
网络协议 Linux
linux系统重要文件目录
本文介绍了Linux系统中的重要目录及其历史背景,包括根目录、/usr、/etc、/var/log和/proc等目录的结构和功能。其中,/etc目录下包含了许多关键配置文件,如网卡配置、DNS解析、主机名设置等。文章还详细解释了各目录和文件的作用,帮助读者更好地理解和管理Linux系统。
16 2
|
5天前
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。
|
8天前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
50 3
|
9天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
11天前
|
存储 安全 关系型数据库
Linux系统在服务器领域的应用与优势###
本文深入探讨了Linux操作系统在服务器领域的广泛应用及其显著优势。通过分析其开源性、安全性、稳定性和高效性,揭示了为何Linux成为众多企业和开发者的首选服务器操作系统。文章还列举了Linux在服务器管理、性能优化和社区支持等方面的具体优势,为读者提供了全面而深入的理解。 ###
|
Linux 程序员 开发者
你要的Linux命令手册,这个开源项目里全都有!
对于大多数开发者来说,Linux命令行是每天必用的工具;但是,熟练使用命令行是一种常常被忽视或被认为难以掌握的技能,有的程序员即便每天使用许多Linux命令行,但是由于没有持续性练习,经常就容易忘
你要的Linux命令手册,这个开源项目里全都有!
|
15天前
|
运维 安全 Linux
Linux中传输文件文件夹的10个scp命令
【10月更文挑战第18天】本文详细介绍了10种利用scp命令在Linux系统中进行文件传输的方法,涵盖基础文件传输、使用密钥认证、复制整个目录、从远程主机复制文件、同时传输多个文件和目录、保持文件权限、跨多台远程主机传输、指定端口及显示传输进度等场景,旨在帮助用户在不同情况下高效安全地完成文件传输任务。
111 5
|
15天前
|
Linux
Linux系统之expr命令的基本使用
【10月更文挑战第18天】Linux系统之expr命令的基本使用
51 4