QT学习笔记(语音识别项目 )

news/2024/4/28 20:02:32/文章来源:https://blog.csdn.net/qq_42700289/article/details/130034530

语音识别项目

我们知道 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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_283677.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AR实战-基于Krpano的多场景融合及热点自定义

背景 在之前的博客中&#xff0c;曾经介绍了关于Krpano的相关知识&#xff0c;原文&#xff1a;全景自动切片技术-krpano初识。简单讲解了基于krpano1.19-pr13下单张全景照片的处理与展示。随着实景中国在各地的落地生根&#xff0c;三维园区、三维景区、三维乡村等等需求的集中…

【中土世界】贝烈瑞安德简介

一、Map of Beleriand and the Land to the North 该地图为托尔金之子&#xff0c;克里斯托弗托尔金所手绘&#xff0c;描绘了第二纪元&#xff0c;中洲西北的贝烈瑞安德&#xff08;Beleriand&#xff09;的景象。从下图可以直观地看出&#xff0c;贝烈瑞安德在中洲的相对位置…

【蓝桥杯嵌入式】第十四届蓝桥杯嵌入式省赛[第一场]程序设计题以及详细题解

文章目录原题展示原题分析原题题解LED相关LCD相关按键相关ADC相关定时器相关PWM输入捕获小结文章福利原题展示 原题分析 今年的第一场比赛绝对np,官方将串口直接省掉了&#xff0c;将其替换成很多小功能&#xff0c;如&#xff1a;切换计时、频率均匀变化、锁机制等等&#xff…

【数据结构】--并查集

目录 一、概念 ​编辑 二、应用场景--“连接”问题&#xff08;属于同一Qu 三、实现思路 四、如何存储数据 五、定义接口 1.初始化&#xff08;init&#xff09; 2.其他 isSame&#xff08;&#xff09; 六、抽象类 六、Quick Find【v1 所在集合的所有元素都指向 v2 的…

45-Dockerfile-ARG/ENV指令

AGR/ENV指令前言ARG作用格式说明生效范围使用示例ENV作用格式说明使用环境变量使用示例ARG 和 ENV 的区别前言 本篇来学习下Dockerfile中的AGR/ENV指令 ARG 作用 定义一个可以在构建镜像时使用的变量 格式 ARG <name>[<default value>]说明 在执行 docker b…

SpringBoot学习笔记(四)

SpringBoot整合quartz 任务 定时任务是企业级应用中的常见操作市面上流行的定时任务技术: Quartz、 Spring Task 相关概念: 工作(Job):用于定义具体执行的工作工作明细(JobDetail):用于描述定时工作相关的信息触发器(Trigger):用于描述触发工作的规则,通常使用cron表达式定…

Unity --- 3d数学 --- 坐标系统

1.世界坐标系是固定不动的 2.每一个游戏物体在世界坐标系中都有对应的坐标和方向 1.轴心点的位置不是固定的&#xff0c;是可以人为设定的 1.Screen Space --- 屏幕坐标 2.我们看到的屏幕其实就是相机所在的平面的位置 --- 而屏幕坐标系的Z其实就是游戏中的物体到相机平面的…

开源DataX集成可视化项目Datax-Web的使用

上一篇文章我们已经搭建好了 Datax-Web 后台&#xff0c;这篇文章我们具体讲一下如何通过Datax-Web来配置&#xff0c;同步MySQL数据库。 目标 MySql数据库全量同步 1.执行器配置 1、"调度中心OnLine:"右侧显示在线的"调度中心"列表, 任务执行结束后, 将会…

钢铁侠材质制作——2、线条轮廓部分的制作

钢铁侠Unlit光照Shader&#xff0c;三种效果变化返回目录大家好&#xff0c;我是阿赵&#xff0c;这里是钢铁侠材质制作第二部分&#xff0c;线条轮廓部分的制作 为了实现这个效果&#xff0c;可以把细节拆分成以下几个部分&#xff1a; 1、轮廓光 1.效果分析 这是一个很基…

C生万物 | 十分钟带你学会位段相关知识

结构体相关知识可以先看看这篇文章 —— 链接 一、什么是位段 位段的声明和结构是类似的&#xff0c;有两个不同&#xff1a; 位段的成员必须是 int、unsigned int 或signed int位段的成员名后边有一个冒号和一个数字 在下面&#xff0c;我分别写了一个结构体和一个位段&…

手动构建自己的docker容器镜像实战

前言 之前的实战中&#xff0c;我们实战中&#xff0c;我们使用的镜像都是镜像仓库已有的镜像。 已有的镜像都是别人已经开发好上传的。今天我们一起来看看如何构建自己的镜像并上传到镜像仓库中。 &#x1f3e0;个人主页&#xff1a;我是沐风晓月 &#x1f9d1;个人简介&…

【Python】字符串 ⑤ ( Python 字符串快速格式化 | 不考虑变量类型 | 不考虑精度控制 )

文章目录一、Python 字符串快速格式化1、语法说明2、代码示例 - 不考虑变量类型3、代码示例 - 不考虑精度控制4、快速格式化的优点一、Python 字符串快速格式化 1、语法说明 Python 字符串快速格式化 : 通过如下格式的代码 , 可以进行字符串的快速格式化 ; f"字符串内容{…

vscode代码片段生成

在刚学习vue的时候&#xff0c;有些代码片段是经常写的&#xff0c;在vscode中写一个代码片段可以帮助快速生成。 生成步骤&#xff1a; VSCode中的代码片段有固定的格式&#xff0c;所以我们一般会借助于一个在线工具来完成。 具体的步骤如下: 第一步&#xff0c;复制自己需…

〖Python网络爬虫实战⑨〗- 正则表达式基本原理

订阅&#xff1a;新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列&#xff08;零基础小白搬砖逆袭) 说明&#xff1a;本专栏持续更新中&#xff0c;目前专栏免费订阅&#xff0c;在转为付费专栏前订阅本专栏的&#xff0c;可以免费订阅付…

Mac PicGo可以上传GitHub但是不能显示

Mac PicGo可以上传到GitHub但是本地不能显示&#xff08;已经加载的&#xff09;图片 背景&#xff1a;使用Typora PicGo GitHub 图床。 文章目录Mac PicGo可以上传到GitHub但是本地不能显示&#xff08;已经加载的&#xff09;图片1. Bug表现2. 解决方法&#xff08;1&…

【好书推荐】认知觉醒:开启自我改变的原动力

书籍信息 书名&#xff1a;认知觉醒&#xff1a;开启自我改变的原动力 作者&#xff1a; 周岭 出版社&#xff1a; 人民邮电出版社 认知觉醒的基础 重新认识大脑 在我们的大脑里&#xff0c;由内到外至少有三重大脑&#xff1a;年代久远的本能脑、相对古老的情绪脑和非常年…

【C语言深入】逐汇编详解函数栈帧的创建和销毁过程

【C语言深入】逐汇编详解函数栈帧的创建和销毁过程一、图解大概过程二、函数栈帧的创建过程1、简介一些需要用到的汇编指令和寄存器2、调用main函数的函数3、局部变量的初始化4、形成临时拷贝5、函数调用6、形成栈帧7、提取临时拷贝8、return返回三、函数栈帧的销毁过程1、释放…

python:异常处理与文件操作(知识点详解+代码展示)

文章目录一、异常处理1、try...except语句2、finally语句二、断言1、定义2、举例例一&#xff1a;例二&#xff1a;三、文件操作1、写文件操作2、读文件操作&#xff08;当你心情低落时候&#xff0c;记得外面还有美好的风景&#xff01;&#xff09; 学习目标&#xff1a; 1、…

堆相关的面试题

文章目录1. 距离不超过k的推排序2. 最大线段重合问题1. 距离不超过k的推排序 题目&#xff1a;已知一个几乎有序的数组。几乎有序是指&#xff0c;如果把数组排好顺序的话&#xff0c;每个元素移动的距离一定不超过k&#xff0c;并且k相对于数组长度来说是比较小的。 请选择一…

WinRAR压缩解压文件

使用WinRAR压缩管理器压缩解压文件详细步骤如下&#xff1a; ■ 压缩文件 ① 鼠标右键需要压缩的文件&#xff0c;点击“添加到压缩文件”&#xff0c;具体操作步骤如图所示&#xff1a; ② 压缩后的对应文件压缩包会显示在桌面&#xff0c;如图所示&#xff1a; ■ 解压文件 …