【class17】人工智能初步-----语音识别(3)

news2024/11/14 14:01:53

【class16】

上节课,我们学习了:
wav文件的相关概念知识,并通过代码从视频中获取了音频以及设置了参数。
学习新的课程之前,我们先来复习一下吧!

代码复习

将上节课学习的代码分为两个部分:
part1. 获取音频文件
part2. 音频文件参数设置

wav文件是非压缩音频文件 ,  pydub模块是用于音频处理的Python模块, moviepy是用于视频处理的Python模块,D选项错误。

本节课,我们将学习这些知识点:
1. 语音端点检测         2. 切分音频               3. 保存语音片段文件

wav文件由文件头和数据体组成,数据体也就是声音波形经过采样所得的一个个数据点了。读取wav文件绘制波形图可以看到:一段音频包括静音段语音段

语音段是wav文件中的有效信息,我们需要的文字信息就储存在语音段。
静音段在wav文件中对应的是说话的间隙部分,不包含文字信息。

将不包含文字信息的静音段切除, 以降低静音段对后续处理所造成的干扰。这个切除静音的操作被称为语音端点检测(VAD), VAD操作之后一段完整的音频就被切分为若干个只有语音段的音频文件。

语音端点检测

定义

语音端点检测(Voice Activity Detection,VAD)又称语音活动检测,语音边界检测。   目的是从声音信号流里识别和消除静音段。

语音端点检测从字义上理解就是对语音的端点进行检测。
这里的端点实际上就是语音段和静音段的分界点,语音端点检测后就可以去除音频中的静音段,只保留语音段的部分

VAD的目的

由于字幕文件包括时间信息,声音和字幕应该同步出现。如果两句话有较长的静音段间隙,不做VAD的话,就会出现语音和字幕不匹配的情况。

切分语音不难,最简单的方法就是按照时间平均切分。 问题在于怎么能不把一句话切成两半,或者一个词切成两半。看看图中因一句话切成两半而引发的笑话吧!语音端点检测就可以解决这个问题。

音频这个东西,看波形就可以看出来有没有声音,哪部分是语音段,哪部分是静音段一目了然。语音段是一段持续高幅度的信号,而静音段幅度很低。

我们可以通过设定一个数值(声音强度)当作基准, 当一个输入的数值序列中出现持续低于基准数值的声音时:
比如,连续2秒出现幅度低于0.1的数时,我们就认定这段音频属于静音段。

学习完语音端点检测的相关概念和原理之后:       我们完成“语音端点检测”的第一步——切分音频去除静音段

首先需要导入pydub模块。
我们在导入pydub模块做音频切分时,使用的是pydub.silence模块里面的split_on_silence,可以理解为从pydub模块中的silence子模块下中导入split_on_silence类。

完成模块的导入后,我们利用语音端点检测的原理:                  对split_on_silence类,设置适当的参数切分音频
接下来让我们一起尝试一下。

代码结构

将切分音频分为两部分:
part1. 导入模块
part2. 切分音频

分析代码:

切分音频

代码的作用

第11-17行,导入模块,设置参数,切分音频。
第12行,从pydub.silence导入split_on_silence;
16行,设置参数sound,min_silence_len和silence_thresh的数值;
第17行,使用split_on_silence()切分音频,并传入参数sound,min_silence_len,silence_thresh。

导入split_on_silence类

需要使用的是pydub.silence模块里面的split_on_silence类。使用from...import从pydub.silence导入split_on_silence类

split_on_silence()

导入模块后,通过split_on_silence()切分音频。

sound

sound为必选参数,即待切分的音频文件。

min_silence_len

min_silence_len为可选参数,它表示的是静音段的最小长度,默认值:1000(毫秒)。设置min_silence_len = 500,表示静音部分长度值任何比这大的值将被视为静音段。参数500不是固定值,根据不同音频可以进行调参。

silence_thresh

silence_thresh为可选参数,它表示的是需要进行识别的静音段的最小声音强度,默认值:-16dbfs。(任何小于该值的声音将直接被视为静音,不需要进行识别)设置silence_thresh = -50,表示任何比这安静(比如-55)的值将被视为静音。参数-50不是固定值,根据不同音频可以进行调参。

返回的对象

将切分完获得的音频片段对象赋值给变量pieces。

完成切分音频处理后,获得了音频片段对象。输出查看切分完的音频片段对象变量pieces,结果为保存了多个音频片段对象的列表。

得到了切分好的无静音段音频对象之后:
我们完成“语音端点检测”的第二步——导出保存音频片段文件

接下来,通过for循环导出音频片段,遍历pieces列表,将获得的多个音频片段对象保存为wav文件。

代码结构

将导出音频文件通过for循环实现:
音频片段按序号保存为wav文件,文件保存至/Users/yequ/路径下。

导出音频片段

代码的作用

第10-16行,通过for循环将切分完的多个音频片段对象保存为wav文件。

# 变量count用于计数,赋初始值为0

count = 0

# 通过for循环将切分完的音频片段对象保存为wav文件

for i in pieces:

    # 文件保存至路径变量path,文件名从音乐片段0.wav-音乐片段11.wav

    path = "/Users/yequ/音频片段"+str(count)+".wav"

    # 遍历pieces,将音频片段对象导出为wav文件,文件路径为path

    i.export(path,format = "wav")

    # 计数器加1

count += 1

分析代码:

计数

定义变量count用于计数,赋初始值为0。

遍历

使用for循环遍历pieces音乐音频对象列表,i为列表中的每个元素。

文件路径

文件保存至路径变量path,路径为/Users/yequ/下的音频文件,文件名从音乐片段0.wav-音乐片段11.wav音乐。

待导出音频片段

变量i为pieces列表中每个元素,即待导出音频片段对象。

export()函数

使用export()函数将音频对象导出为音频文件。     用法:export(a,b),a为路径,b为文件格式。

音频格式

通过参数format设置保存的音频文件格式为wav文件。

完成切分音频和导出音频片段这两步操作,我们获得了多个无静音段的音频文件。打开文件夹可以看到命名为音频片段0.wav-音频片段11.wav的12个wav文件。

代码整理

将今日学习的代码分为两个部分:
part1. 切分音频
part2. 导出音频

本节课,我们对音频文件进行了语音端点检测并切分和保存了音频。下节课,我们将学习语音识别系统模型,并调用创建好的AipSpeech客户端实现语音转文字功能。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Suricata-入门实验-快速理解suricata

实验环境: 主机win10 ip地址:192.168.121.1 虚拟机使用vm ubuntu20.04 ip地址:192.168.121.128 实验目标: 从主机 给虚拟机 发送ping 命令 虚拟机中Suricata接收到ping后发出告警信息。 正文 在前面 编译好Suricata后&#x…

PTA 计算矩阵两个对角线之和

计算一个nn矩阵两个对角线之和。 输入格式: 第一行输入一个整数n(0<n≤10)&#xff0c;第二行至第n1行&#xff0c;每行输入n个整数&#xff0c;每行第一个数前没有空格&#xff0c;每行的每个数之间各有一个空格。 输出格式: 两条对角线元素和&#xff0c;输出格式见样例…

想知道期权的交易方式有哪些吗?新手必看!

今天期权懂带你了解想知道期权的交易方式有哪些吗&#xff1f;新手必看&#xff01;期权指投资者在支付了一定的权利金之后&#xff0c;将拥有未来某个时间协定价格买入或者卖出的权利。 期权的交易策略方式有哪些&#xff1f; 买入看涨期权&#xff1a; 使用场景&#xff1a…

【算法】位运算——常见位运算基础操作总结

位运算基础操作总结&#xff0c;包括基础运算符 修改某位bit位 目录 1.基础位运算符2.按位基础操作1.给一个数 n&#xff0c;确定其二进制的第 x 位是 0/12.将一个数 n 的二进制标识的第 x 位修改成 13.将一个数 n 的二进制标识的第 x 位修改成 04.提取一个数 n 二进制中最右侧…

Centos 7 安装刻录至服务器

前言 在日常测试中&#xff0c;会遇到很多安装的场景&#xff0c;今天给大家讲一下centos 7 的安装&#xff0c;希望对大家有所帮助。 一.下载镜像 地址如下&#xff1a; centos官方镜像下载地址https://www.centos.org/download/ 按照需求依次点击下载 二.镜像刻录 镜像刻…

【Spring】Spring AOP底层原理:JDK动态代理和CGLIB动态代理

目录 1、代理模式 1.1、静态代理 1.2、动态代理 2、JDK 动态代理 2.1、jdk动态代理简介 2.2、使用JDK动态代理机制步骤 3、CGLIB 动态代理 3.1、CGLIB 动态代理的特性 3.2、CGLIB的核心类 3.3、CGLIB 动态代理步骤 4、JDK 和 CGLIB 创建代理对象的区别 ​编辑 1、…

Linux网络编程:传输层协议|UDP

知识引入&#xff1a; 端口号&#xff1a; 当应用层获得一个传输过来的报文时&#xff0c;这时数据包需要知道&#xff0c;自己应该送往哪一个应用层的服务&#xff0c;这时就引入了“端口号”&#xff0c;通过区分同一台主机不同应用程序的端口号&#xff0c;来保证数据传输…

【高数】重点内容,公式+推导+例题,大学考试必看

目录 1 隐函数求导1.1 公式1.2 说明1.3 例题 2 无条件极值2.1 运用2.2 求解2.3 例题 3 条件极值3.1 运用3.2 求解3.3 例题 4 二重积分4.1 直角坐标下4.2 极坐标下4.3 例题 5 曲线积分5.1 第一型曲线积分5.2 第二型曲线积分5.3 例题 6 格林公式6.1 公式6.2 说明6.3 例题 &#x…

【强化学习】Q-learning,DQN,SARSA算法介绍

【强化学习】Q-learning&#xff0c;DQN&#xff0c;SARSA算法介绍 强化学习算法分类基于价值的方法基于策略的方法Actor-Critic方法 Q-learning算法DQN算法强化学习训练数据存在的问题经验回放机制备份网络机制 Sarsa算法总结 强化学习算法分类 按学习目标进行分类 可分为基于…

信息化赋能:干部监督工作的创新与实践

随着信息技术的迅猛发展&#xff0c;信息化手段在干部监督工作中的应用越来越广泛&#xff0c;为提升监督工作的效率和精准度提供了有力支持。以下是如何利用信息化手段扎实推进干部监督工作的几点建议&#xff1a; 一、搭建信息化平台&#xff0c;实现数据统一管理 要扎实推…

【unity小技巧】unity读excel配置表操作,excel转txt文本,并读取txt文本内容,实例说明

文章目录 前言下载资源库导入资源库excel转txt文本读取txt内容 读取配置表所有的数据&#xff0c;并使用结束语 前言 关于unity读excel配置表操作&#xff0c;其实之前就有用过&#xff0c;这里只是单独整理出这部分知识&#xff0c;后续好使用。 感兴趣可以去看看&#xff1a…

【408精华知识】时钟周期、机器周期、总线周期、指令周期、存取周期还傻傻分不清?

在做题时&#xff0c;我们经常能遇到关于“周期”的表述&#xff0c;比如时钟周期、机器周期、总线周期、指令周期、存取周期&#xff0c;类似的表述让我们很容易迷茫&#xff0c;那么接下来我们就看看它们到底是什么、有什么区别&#xff1f; 周期特点时钟周期也称为CPU时钟周…

太速科技-基于FPGA Spartan6 的双路光纤PCIe采集卡(2路光纤卡)

基于FPGA Spartan6 的双路光纤PCIe采集卡(2路光纤卡) 1、板卡概述   板卡采用xilinx Spartan6系列芯片&#xff0c;支持 PCI Express Base Specification 1.1 x1。内含丰富的逻辑资源和存储单元&#xff0c;板卡FPGA外接双片32M*16bit DDR2缓存器&#xff0c;支持乒乓操作。…

【Linux进程篇】父子进程fork函数||进程生死轮回状态||僵尸进程与孤儿进程

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 前言&#xff1a;上篇文章中我们认识了进程&#xff0c;可执行程序在内存中加载运行被称作进程&#xff0c;而操作系统是通过给每一个可执行程序创建一个PCB来管理进程的。并且学习了一些查看进程的指令&#xff0c;认识…

利用机器非学习进行后门攻击

信息安全是一个古老的计算机领域。许多 80 后还记得自己小时候经常听到的瑞星杀毒和江民杀毒软件。这些 90 年代火遍大江南北的信息安全工具&#xff0c;至今仍然影响着使用互联网和信息技术的千家万户。随着人工智能的兴起和普及&#xff0c;有越来越多的商业软件使用了人工智…

5.2网安学习第五阶段第二周回顾(个人学习记录使用)

本周重点 ①HIDS的基本应用(suricata) ②Suricata的基本应用 ③Suricata的流量检测 ④Suricata的https流量检测 ⑤利用Elastic整合Suricata日志 ⑥利用Wazuh对Suricata主动响应 本周主要内容 ①HIDS的基本应用(suricata) 1、NIDS 1、定义&#xff1a;网络入侵检测系统…

【软件设计师】——6.程序设计语言与语言处理程序

目录 6.1基本概念 6.2编译与解释 6.3文法 6.4有限自动机 6.5正规式 6.6 表达式 6.7 传值与引用 6.8 数据类型与程序控制结构 6.9 程序语言特点 6.10 Java程序设计 6.11 C 6.12 python 6.1基本概念 语句&#xff1a;高级程序设计语言中描述程序的运算步骤、控制结构、…

vue3父组件改变 子组件不改变(uniapp)

项目中遇到了这么个问题 场景&#xff1a;封装select组件&#xff0c;通过子组件选中后传递值给父组件&#xff0c;父组件需要回显这个值&#xff08;这里使用 defineProps和defineEmits就可以实现&#xff0c;或者直接使用defineModel也可以实现&#xff0c;但是uniapp目前不…

语音深度鉴伪识别项目实战:基于深度学习的语音深度鉴伪识别算法模型(一)音频数据编码与预处理

前言 深度学习技术在当今技术市场上面尚有余力和开发空间的&#xff0c;主流落地领域主要有&#xff1a;视觉&#xff0c;听觉&#xff0c;AIGC这三大板块。目前视觉板块的框架和主流技术在我上一篇基于Yolov7-LPRNet的动态车牌目标识别算法模型已有较为详细的解说。与AIGC相关…