当前位置: 首页 > news >正文

语音识别--使用YAMNet识别环境音

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟
🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号:不懂开发的程序猿
个人网站:https://jerry-jy.co/

❗❗❗知识付费,🈲止白嫖,有需要请后台私信或【文末】个人微信公众号联系我

语音识别--使用YAMNet识别环境音

  • 使用YAMNet识别环境音
    • 一、任务需求
    • 二、任务目标
          • 1、学习TF Hub使用
          • 2、学习YAMNet网络
          • 3、学习tf模型推理
    • 三、任务环境
          • 1、jupyter开发环境
          • 2、python3.6
          • 3、tensorflow2.4
    • 四、任务实施过程
      • 1、导入 TensorFlow 和其他库
      • 2、从 TensorFlow Hub 加载 YAMNet
      • 3、加载类映射
      • 4、运行推理
    • 五、任务小结
  • 说明

使用YAMNet识别环境音


一、任务需求

YAMNet是一个预训练的深度神经网络,可以从521 个类别中预测音频事件,例如笑声、吠叫或警报声。

YAMNet采用MobileNetV1深度可分离卷积架构。它可以使用音频波形作为输入,并对来自AudioSet语料库的 521 个音频事件中的每一个进行独立预测。

在内部,该模型从音频信号中提取“帧”并批量处理这些帧。此版本的模型使用 0.96 秒长的帧,每 0.48 秒提取一帧。

该模型接受包含任意长度波形的一维 float32 张量或 NumPy 数组,表示为范围内的单通道(单声道)16 kHz 样本[-1.0, +1.0]。本教程包含帮助我们将 WAV 文件转换为支持格式的代码。

该模型返回 3 个输出,包括类分数、嵌入(我们将用于迁移学习)和对数梅尔谱图。

YAMNet 的一个特定用途是作为高级特征提取器 - 1,024 维嵌入输出。我们将使用基础 (YAMNet) 模型的输入特征,并将它们输入由一个隐藏tf.keras.layers.Dense层组成的较浅层模型。然后,我们将使用少量数据训练网络以进行音频分类,而无需大量标记数据和端到端训练。

首先,我们将测试模型并查看对音频进行分类的结果。然后,我们将构建数据预处理管道。

要求:加载并使用 YAMNet 模型进行推理。 使用 YAMNet 嵌入构建一个新模型来对环境音进行分类。 评估并导出您的模型。

二、任务目标

1、学习TF Hub使用
2、学习YAMNet网络
3、学习tf模型推理

三、任务环境

1、jupyter开发环境
2、python3.6
3、tensorflow2.4

四、任务实施过程

1、导入 TensorFlow 和其他库

这里我们要载入tensorflow_io,帮助我们轻松地从磁盘加载音频文件。

import osfrom IPython import display
import matplotlib.pyplot as plt
import numpy as np
import pandas as pdimport tensorflow as tf
import tensorflow_hub as hub
import tensorflow_io as tfio

2、从 TensorFlow Hub 加载 YAMNet

使用来自Tensorflow Hub的预训练 YAMNet 从声音文件中提取嵌入。

从 TensorFlow Hub 加载模型很简单:选择模型,复制其 URL,然后使用load函数。

yamnet_model_handle = 'https://tfhub.dev/google/yamnet/1'
yamnet_model = hub.load(yamnet_model_handle)

当然,这会涉及到网络下载,需要联网,并能顺利访问对应网址。为了避免不稳定的情况发生,我们下载好了模型,存放在/home/jovyan/datas/yamnet中,然后使用离线方式加载模型,这与上述在线方式并没有什么不同。

yamnet_model_handle = '/home/jovyan/datas/yamnet'
yamnet_model = hub.load(yamnet_model_handle)

加载示例文件

testing_wav_file_name = '/home/jovyan/datas/miaow_16k.wav'

现在我们还需要一个函数来加载音频文件,稍后在处理训练数据时也会用到它。

# 定义函数,加载音频文件,并确保采样率是正确的@tf.function
def load_wav_16k_mono(filename):""" 加载一个WAV文件,将其转换为浮点tensor,重新采样到16khz单通道音频 """file_contents = tf.io.read_file(filename)wav, sample_rate = tf.audio.decode_wav(file_contents,desired_channels=1)wav = tf.squeeze(wav, axis=-1)sample_rate = tf.cast(sample_rate, dtype=tf.int64)wav = tfio.audio.resample(wav, rate_in=sample_rate, rate_out=16000)return wav
testing_wav_data = load_wav_16k_mono(testing_wav_file_name)_ = plt.plot(testing_wav_data)display.Audio(testing_wav_data,rate=16000)

在这里插入图片描述
这是我们读取的样本之一,以上展示了声音内容及对应的波形图。

3、加载类映射

加载 YAMNet 能够识别的类名很重要。映射文件yamnet_model.class_map_path()以 CSV 格式存在。

class_map_path = yamnet_model.class_map_path().numpy().decode('utf-8')
class_names =list(pd.read_csv(class_map_path)['display_name'])for name in class_names[:20]:print(name)
print('...')
Speech
Child speech, kid speaking
Conversation
Narration, monologue
Babbling
Speech synthesizer
Shout
Bellow
Whoop
Yell
Children shouting
Screaming
Whispering
Laughter
Baby laughter
Giggle
Snicker
Belly laugh
Chuckle, chortle
Crying, sobbing
...

4、运行推理

YAMNet 提供帧级别的类分数(即每帧 521 分)。为了确定剪辑级别的预测,可以跨帧按类别聚合分数(例如,使用平均值或最大聚合)。这是由下面完成的scores_np.mean(axis=0)。最后,要在剪辑级别找到得分最高的类,我们需要取 521 个汇总分数中的最大值。

scores, embeddings, spectrogram = yamnet_model(testing_wav_data)
class_scores = tf.reduce_mean(scores, axis=0)
top_class = tf.argmax(class_scores)
inferred_class = class_names[top_class]print(f'The main sound is: {inferred_class}')
print(f'The embeddings shape: {embeddings.shape}')
The main sound is: Animal
The embeddings shape: (13, 1024)

五、任务小结

本实验完成学习使用TF Hub预训练模型相关内容,通过本实验我们学习到了加载并使用 YAMNet 模型进行推理相关知识,需要掌握以下知识点:

  • tfhub的使用方法
  • YAMNet网络的调用方法
  • 模型的加载和使用方法
  • 模型评估方法

–end–

说明

本实验(项目)/论文若有需要,请后台私信或【文末】个人微信公众号联系我

相关文章:

语音识别--使用YAMNet识别环境音

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号&#xf…...

前端JS必用工具【js-tool-big-box】,邮箱,手机,身份证号,ip地址等正则验证方法学习

这一小节,我们针对前端npm包 js-tool-big-box 的使用做一些讲解,主要是针对项目中,邮箱,手机号,身份证号,ip地址,url格式,邮政编码等验证的方法使用。 目录 1 安装和引入 2 邮箱验…...

notepad++安装 hex-editor插件

打开notepad 点击插件 搜索 hex-editor,点击右侧 安装install 安装成功后,在已安装插件中就有显示了...

Ubuntu18.04设置SSH密钥登录

我们一般使用 VSCode 、MobaXterm、PuTTY等 SSH 客户端来远程管理 Linux 服务器。但是,一般的密码方式登录,容易有密码被暴力破解的问题。所以,一般我们会将 SSH 的端口设置为默认的 22 以外的端口,或者禁用 root 账户登录。但是即…...

自动化运维管理工具----------Ansible模块详细解读

目录 一、自动化运维工具有哪些? 1.1Chef 1.2puppet 1.3Saltstack 二、Ansible介绍 2.1Ansible简介 2.2Ansible特点 2.3Ansible工作原理及流程 2.3.1内部流程 2.3.2外部流程 三、Ansible部署 3.1环境准备 3.2管理端安装 ansible 3.3Ansible相关文件 …...

零基础代码随想录【Day27】|| 39. 组合总和,40.组合总和II, 131.分割回文串

目录 DAY27 39. 组合总和 解题思路&代码 40.组合总和II 解题思路&代码 131.分割回文串 解题思路&代码 DAY27 39. 组合总和 力扣题目链接(opens new window) 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有…...

实验15 MVC

二、实验项目内容&#xff08;实验题目&#xff09; 编写代码&#xff0c;掌握MVC的用法。 三、源代码以及执行结果截图&#xff1a; inputMenu.jsp&#xff1a; <% page contentType"text/html" %> <% page pageEncoding "utf-8" %> &…...

《Python编程从入门到实践》day21

# 昨日知识点回顾 设置背景颜色 在屏幕中央绘制飞船 # 今日知识点学习 12.5 重构&#xff1a;方法_check_events()和_update_screen() 12.5.1 方法_check_events() import sys import pygame from Settings import Settings from Ship import Shipclass AlienInvasion:"…...

上位机图像处理和嵌入式模块部署(树莓派4b镜像烧录经验总结)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 陆陆续续也烧录了好多次树莓派的镜像了&#xff0c;这里面有的时候很快&#xff0c;有的时候很慢。特别是烧录慢的时候&#xff0c;也不知道是自己…...

简单数据加解密,JS和JAVA同时实现

前端Vue调用Java后端接口中的数据进行加密&#xff0c;以避免敏感数据泄露。 现在实现一个高性能加密方法&#xff0c;用来对数据进行加密后传输。算法包括JS的加密和解密方法&#xff0c;也包括Java的加密解密方法。 可以在前端加密&#xff0c;后端解密。也可以在后端加密&…...

Android Framework中PackageManagerService的深度剖析

摘要 Android操作系统的核心服务之一——PackageManagerService(PMS)&#xff0c;扮演着至关重要的角色&#xff0c;负责维护系统中所有应用程序的生命周期管理。本文旨在全面探讨PMS的功能特性、工作流程、实际应用场景&#xff0c;并对其进行优劣分析&#xff0c;以期为开发者…...

(AI Web、ChatGPT Native、Ai Loading、AI Tools、知豆AI)

目录 1、AI Web 2、ChatGPT Native 3、Ai Loading 4、AI Tools 5、知豆AI 1、AI Web...

VBA 批量处理Excel文件

目录 一. 批量创建Excel文件1.1 VBA的方式1.2 Powershell方式 二. 批量删除文件三. 批量重命名文件四. 合并多个Excel数据到一个Excel文件中 一. 批量创建Excel文件 1.1 VBA的方式 Sub CreateFiles()Dim strPath As String, strFileName As StringDim i As Long, rDim pathSe…...

PG实例连接访问控制

实例访问控制可以控制来自于不同主机&#xff0c;不同用户是否允许访问指定的数据库&#xff0c;以及验证方式。 与oracle中的连接管理器的功能相同&#xff0c;之前有写过一篇oracleCMAN连接管理器的配置实操&#xff1a; 配置oracle连接管理器&#xff08;cman&#xff09;…...

2024-05-07 商业分析-如何在社会层面做一个更好的工具人-记录

摘要: 2024-05-07 商业分析-如何成为一个靠谱的工具人 如何在社会层面做一个更好的工具人 那么今天讲的这个主题呢&#xff0c;对吧&#xff1f;你们一看啊&#xff0c;就觉得这个就不应该我讲是吧啊&#xff0c;但是呢这个逻辑呢我还得跟你们讲一下啊&#xff0c;就是如何成为…...

C++设计模式-创建型设计模式

设计模式 设计模式是什么 设计模式是指在软件开发中&#xff0c;经过验证的&#xff0c;用于解决在特定环境下&#xff0c;重复出现的&#xff0c;特定问题的解决方案&#xff1b;其实就是解决问题的固定套路。但是要慎用设计模式&#xff0c;有一定的工程代码量之后用它比较…...

code-server容器webpack的ws无法连接解决方法

TLDR 通过指定client的wsrul去连接ws devServer.client.webSocketURL ‘wss://<Forwarded uri>/ws’ 拓扑 1、code-server: 用于编写代码、启动webpack dev-server 服务&#xff1b;[https://<domain>:8001] 2、webpack: 用于浏览dev-server服务&#xff1b;[ht…...

leetcode47-Permutations II

分析 给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,2] 输出&#xff1a; [[1,1,2], [1,2,1], [2,1,1]] 题目 由于元素是重复的&#xff0c;要求返回不重复的&#xff0c;所以一定会有…...

246 基于matlab的交流电机动态方程

基于matlab的交流电机动态方程&#xff0c;用于交流电机动态分析。输入电机的额定功率(kW)、电机的额定转速(r/min)、转子外径(m)、铁心长(m)转子槽数、电机极对数 等参数&#xff0c;输出转速变化、力矩变化等结果。程序已调通&#xff0c;可直接运行。 246 交流电机动态 转速…...

7天入门Android开发之第2天——四大组件之活动

一、活动是什么 活动&#xff08;Activity&#xff09;是 Android 应用程序中的一个重要组件&#xff0c;它代表用户界面上的单个窗口&#xff0c;通常会填充整个屏幕。通过活动&#xff0c;可以创建各种各样的用户界面&#xff0c;并控制界面的行为。活动可以包含各种 UI 元素…...

NotebookLM权限颗粒度管控实战:从入门到精通的7步精准授权法(含Google内部RBAC配置模板)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM权限控制设置概览 NotebookLM 是 Google 推出的基于用户自有文档构建个性化 AI 助手的实验性工具&#xff0c;其权限模型聚焦于数据主权与最小化访问原则。默认状态下&#xff0c;所有上传文…...

企业自建内部知识库,最容易死在这8个问题上(管理+技术双维度)

很多企业想做内部知识库&#xff1a;把经验、图纸、方案、流程、故障案例沉淀下来&#xff0c;避免人员流失就丢技术、避免重复踩坑。但真正落地后&#xff0c;90%都变成了“僵尸文档库”——要么没人用、没人更&#xff0c;要么技术层面跟不上需求&#xff0c;AI模式形同虚设。…...

图解RDMA内存安全:从L_Key/R_Key到Memory Window的钥匙与门禁

图解RDMA内存安全&#xff1a;钥匙与门禁的权限艺术 在数据中心的高速网络世界里&#xff0c;远程直接内存访问&#xff08;RDMA&#xff09;技术如同一位隐形的快递员&#xff0c;能够在服务器之间直接投递数据包裹&#xff0c;完全绕过CPU的繁琐签收流程。而确保这位"快…...

Trae日志占用很大解决方法(Windows)Trae日志占用、Trae logs删除、Trae缓存清理、Trae占用C盘、Trae AppData 清理

Trae日志占用很大解决方法&#xff08;Windows&#xff09; 关键词&#xff1a;Trae日志占用、Trae logs删除、Trae缓存清理、Trae占用C盘、Trae AppData 清理最近清理电脑磁盘时&#xff0c;发现 C 盘莫名其妙少了十几个 G。作为长期写代码的人&#xff0c;我第一反应就是&…...

【信息科学与工程学】【物理/化学科学和工程技术】知识体系 第四十一篇 数据中心基础设施领域中的力学知识 01

编号:001 类别 结构力学 (静力学与动力学) 领域 计算基础设施 / 机房设施 力学模型配方 将服务器机架简化为一个底部固定、顶部自由的悬臂梁模型。在地震激励下,该模型转化为一个单自由度阻尼受迫振动系统。主要考虑水平方向的地震力作用。 数学分析 通过建立运动微分…...

从一次Keycloak弱口令通报说起:微服务架构下的密码管理‘避坑’全指南(附Docker Compose配置)

微服务架构下的密码安全实践&#xff1a;从Keycloak弱口令到全局防护体系 1. 当安全工具成为攻击入口&#xff1a;一次真实事件复盘 去年某科技公司的运维团队收到了一份来自监管部门的网络安全通报——部署在公有云上的Keycloak服务遭到境外IP爆破攻击。攻击者仅用"admin…...

从Educoder到真实项目:新手用Python处理用户输入的3个避坑点与最佳实践

从Educoder到真实项目&#xff1a;Python用户输入处理的3个避坑指南与工程实践 当你在Educoder上完美运行input()函数时&#xff0c;是否思考过这段代码在真实项目中可能引发的灾难&#xff1f;教学平台的理想环境与真实世界的复杂输入之间存在巨大鸿沟。本文将揭示那些在线练习…...

实测对比:百度OCR车牌识别在夜间、侧拍、模糊场景下的效果到底怎么样?

百度OCR车牌识别实战评测&#xff1a;夜间、侧拍与模糊场景下的真实表现 当停车场道闸自动抬起&#xff0c;交通卡口违章记录自动生成&#xff0c;这些看似简单的场景背后都依赖一项关键技术——车牌识别。作为计算机视觉领域的经典应用&#xff0c;车牌识别技术已经从实验室走…...

【软考高级架构】论文范文20——论软件设计方法及其应用

论软件设计方法及其应用 摘要 软件设计是将需求分析结果转换为软件体系结构和内部实现细节的关键活动,设计方法的选择直接影响系统的可维护性、可扩展性和开发效率。结构化设计、面向对象设计、数据驱动设计等经典方法各有侧重,在不同场景下展现出独特的优势。本文以笔者主…...

Honey Select 2汉化补丁:3分钟快速安装与完整功能指南

Honey Select 2汉化补丁&#xff1a;3分钟快速安装与完整功能指南 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为Honey Select 2的日文界面而烦恼吗&…...