QT学习笔记(语音识别项目 )
语音识别项目
我们知道 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学习笔记(语音识别项目 )
语音识别项目 我们知道 AI 智能音箱已经在我们生活中不少见,也许我们都玩过,智能化非常高,功能 强大,与我们平常玩的那种蓝牙音箱,Wifi 音箱有很大的区别,AI 智能在哪里呢?语音识别技 术和云端…...

Vulnhub:DC-4靶机
kali:192.168.111.111 靶机:192.168.111.251 信息收集 端口扫描 nmap -A -v -sV -T5 -p- --scripthttp-enum 192.168.111.251 访问目标网站发现需要登录 使用账号admin爆破出密码:happy 登陆后抓包执行反弹shell 提权 在/home/jim/backu…...
序列差分练习题--从模板到灵活运用
本篇包含6道序列差分练习题及题解,难度由模板到提高 语文成绩 题目背景 语文考试结束了,成绩还是一如既往地有问题。 题目描述 语文老师总是写错成绩,所以当她修改成绩的时候,总是累得不行。她总是要一遍遍地给某些同学增加分…...

Xshell 连接 Ubuntu 20.04
1 更改网络配置信息 修改/etc/netplan/01-network-manager-all.yaml文件信息 sudo gedit /etc/netplan/01-network-manager-all.yaml删除原有内容,替换为以下信息: 注意:addresses、gateway4 要根据个人虚拟机的实际情况修改 # Let Networ…...

【网口交换机:交换机KSZ9897学习-笔记-资料汇总-记录】
【网口交换机:交换机KSZ9897学习-笔记-资料汇总-记录】1、概述2、 自己的学习与摸索之路第一阶段:随意在网上查找相关资料第二阶段:针对性在网上资料第三阶段:测试并且使用开发板第四阶段:针对性使用工具进行测试。2、…...
linux信号量及其实例
概述 Linux信号量是用于进程间同步和互斥的一种通信机制。本质是计数器 它们通常用于控制对共享资源的访问,以确保只有一个进程可以同时访问该资源。以下是一个详细的教程和C语言代码示例,展示如何使用信号量进行进程间通信。 创建信号量 要使用信号量…...

Nomogram | 盘点一下绘制列线图的几个R包!~(一)
1写在前面 列线图,又称诺莫图(Nomogram),是一种用于预测模型的可视化工具,它可以将多个影响因素和结局事件的关系展示在同一平面上。🥳 列线图最早是由法国工程师Philbert Maurice dOcagne于1884年发明的&a…...

两个数组的交集(力扣刷题)
给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/intersection-of-two-arrays 说…...

SonarQube 10.0 (macOS, Linux, Windows) - 清洁代码 (Clean Code)
请访问原文链接:https://sysin.org/blog/sonarqube-10/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org Sonar Clean Code Industry leading solutions IDE | SonarLint Free IDE extension that provides on-the-f…...

怎么统一把文件名不需要部分批量替换掉
同事把文件传给我,我接在电脑上看发现文件名都是乱的,前面都加了一串挺长的数字,总之看起来很乱,顺序也跟着乱了,如何把红色框内部分删除掉呢? 上图就是我收到同事发我文件呢,你说要什么修改呢&…...
Vue3电商项目实战-结算支付 3【05-结算-收货地址-添加、06-结算-收货地址-修改、07-结算-提交订单】
文章目录05-结算-收货地址-添加06-结算-收货地址-修改07-结算-提交订单05-结算-收货地址-添加 目的:实现收货地址的添加。 大致步骤: 独立组件,准备一个对话框完成表单布局完成确认添加操作 落的代码: 1.独立组件,准…...

开心档之开发入门网-C++ 变量作用域
C 变量作用域 目录 C 变量作用域 局部变量 实例 全局变量 实例 实例 初始化局部变量和全局变量 作用域是程序的一个区域,一般来说有三个地方可以定义变量: 在函数或一个代码块内部声明的变量,称为局部变量。 在函数参数的定义中声明…...
蓝易云:linux怎么关闭防火墙详细教程
在Linux下关闭防火墙可以通过以下步骤实现: 1. 检查防火墙状态 首先需要检查当前系统的防火墙状态,可以使用以下命令: sudo systemctl status firewalld 如果防火墙当前正在运行,会显示出如下信息: ● firewalld.s…...
操作系统-用户进程
一、Makefile 这个 Makefile 要比之前的文件夹中的 Makefile 更加复杂,是因为之前的文件夹都是对操作系统特定部分的一个编译指导,所以基本上是实现的功能就是“对应的 C 文件和汇编文件编译成目标文件”这一个功能,最后合成一个整体。但是 …...
小驰私房菜_07_camx EIS使能
#小驰私房菜# #Qcom Cax# 本篇文章分下面几点展开: 1) camxoverridesettings.txt 中如何设置打开eis开关? 2)app打开eis,需要设置哪些request? 3) eisv2.0、eisv3.0分别是什么时候采用? 4)相关日志分析,日志上如何确认eis已经使能? 一、 camxoverridesettings.txt …...
互联网快速发展,孕育着新技术、新模式的全新时代正在到来
除了新时代的红利之外,在马云的回归之下,我更多地看到的是,人们信心的回归。这样一种回归,并不仅仅只是局限于企业家本身,纵然是对于普通民众来讲,同样是一种信心的回归。时下,经济复苏的号角开…...
【VUE】1、安装node.js
1、什么是 node.js 官方:Node.js is an open-source, cross-platform JavaScript runtime environment. 翻译:Node.js 是一个开源、跨平台的 JavaScript 运行时环境。 Node.js发布于2009年5月,由Ryan Dahl开发,是一个基于Chrome…...

一文弄懂window.print()打印
一文弄懂window.print 打印前言window.print() 默认效果缺陷一、打印样式二、打印指定区域内容1. 对容器进行打印2. 对容器内的部分内容进行打印3. 监听打印前后事件4. iframe三、强行插入分页四、打印设置五、最佳实践(React)1. 背景:2. 思路…...

卷麻了,00后测试用例写的比我还好,简直无地自容.....
前言 作为一个测试新人,刚开始接触测试,对于怎么写测试用例很头疼,无法接触需求,只能根据站在用户的角度去做测试,但是这样情况会导致不能全方位的测试APP,这种情况就需要一份测试用例了,但是不…...

mysql性能优化之explain分析执行计划
前言 在实际工作中,如果已经定位到某些具体的sql需要进行explain分析进而优化,可以直接使用explainsql来分析其执行计划;如果还不能确定是哪些具体的sql语句需要进行explain分析进而优化,那么我们可以首先要定位哪些sql查询慢&…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...

基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...