基于PaddleSpeech的婴儿啼哭识别(上)
2022-12-31 249 发布于吉林
版权
举报
版权声明:
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议》和 《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
简介: 基于PaddleSpeech的婴儿啼哭识别(上)
一、基于PaddleSpeech的婴儿啼哭识别
1.项目背景
对婴儿来说,啼哭声是一种通讯的方式,一个非常有限的,但类似成年人进行交流的方式。它也是一种生物报警器,向外界传达着婴儿生理和心理的需求。基于啼哭声声波携带的信息,婴儿的身体状况才能被确定,疾病才能被检测出来。因此,有效辨识啼哭声,成功地将婴儿啼哭声“翻译”成“成人语言”,让我们能够读懂啼哭声的含义,有重大的实际意义。
2.数据说明:
1.训练数据集包含六类哭声,已人工添加噪声。A:awake(苏醒)
B:diaper(换尿布)
C:hug(要抱抱)
D:hungry(饥饿)
E:sleepy(困乏)
F:uncomfortable(不舒服)
2.噪声数据来源Noisex-92标准数据库。二、PaddleSpeech环境准备
# 环境准备:安装paddlespeech和paddleaudio !python -m pip install -q -U pip --user !pip install paddlespeech paddleaudio -U -q
import warnings warnings.filterwarnings("ignore") import IPython import numpy as np import matplotlib.pyplot as plt import paddle %matplotlib inline
三、数据预处理
1.数据解压缩
# !unzip -qoa data/data41960/dddd.zip
2.查看声音文件
from paddleaudio import load data, sr = load(file='train/awake/awake_0.wav', mono=True, dtype='float32') # 单通道,float32音频样本点 print('wav shape: {}'.format(data.shape)) print('sample rate: {}'.format(sr)) # 展示音频波形 plt.figure() plt.plot(data) plt.show()
from paddleaudio import load data, sr = load(file='train/diaper/diaper_0.wav', mono=True, dtype='float32') # 单通道,float32音频样本点 print('wav shape: {}'.format(data.shape)) print('sample rate: {}'.format(sr)) # 展示音频波形 plt.figure() plt.plot(data) plt.show()
!paddlespeech cls --input train/awake/awake_0.wav
3.音频文件长度处理
# 查音频长度 import contextlib import wave def get_sound_len(file_path): with contextlib.closing(wave.open(file_path, 'r')) as f: frames = f.getnframes() rate = f.getframerate() wav_length = frames / float(rate) return wav_length
# 编译wav文件 import glob sound_files=glob.glob('train/*/*.wav') print(sound_files[0]) print(len(sound_files))
# 统计最长、最短音频 sounds_len=[] for sound in sound_files: sounds_len.append(get_sound_len(sound)) print("音频最大长度:",max(sounds_len),"秒") print("音频最小长度:",min(sounds_len),"秒")
!cp train/hungry/hungry_0.wav ~/
# 音频信息查看 import math import soundfile as sf import numpy as np import librosa data, samplerate = sf.read('hungry_0.wav') channels = len(data.shape) length_s = len(data)/float(samplerate) format_rate=16000 print(f"channels: {channels}") print(f"length_s: {length_s}") print(f"samplerate: {samplerate}")
# 统一到34s from pydub import AudioSegment audio = AudioSegment.from_wav('hungry_0.wav') print(str(audio.duration_seconds)) i = 1 padded = audio while padded.duration_seconds * 1000 < 34000: padded = audio * i i = i + 1 padded[0:34000].set_frame_rate(16000).export('padded-file.wav', format='wav')
import math import soundfile as sf import numpy as np import librosa data, samplerate = sf.read('padded-file.wav') channels = len(data.shape) length_s = len(data)/float(samplerate) format_rate=16000 print(f"channels: {channels}") print(f"length_s: {length_s}") print(f"samplerate: {samplerate}")
# 定义函数,如未达到最大长度,则重复填充,最终从超过34s的音频中截取 from pydub import AudioSegment def convert_sound_len(filename): audio = AudioSegment.from_wav(filename) i = 1 padded = audio*i while padded.duration_seconds * 1000 < 34000: i = i + 1 padded = audio * i padded[0:34000].set_frame_rate(16000).export(filename, format='wav')
# 统一所有音频到定长 for sound in sound_files: convert_sound_len(sound)
3.自定义数据集
import os from paddlespeech.audio.datasets.dataset import AudioClassificationDataset class CustomDataset(AudioClassificationDataset): # List all the class labels label_list = [ 'awake', 'diaper', 'hug', 'hungry', 'sleepy', 'uncomfortable' ] train_data_dir='./train/' def __init__(self, **kwargs): files, labels = self._get_data() super(CustomDataset, self).__init__( files=files, labels=labels, feat_type='raw', **kwargs) # 返回音频文件、label值 def _get_data(self): ''' This method offer information of wave files and labels. ''' files = [] labels = [] for i in range(len(self.label_list)): single_class_path=os.path.join(self.train_data_dir, self.label_list[i]) for sound in os.listdir(single_class_path): # print(sound) if 'wav' in sound: sound=os.path.join(single_class_path, sound) files.append(sound) labels.append(i) return files, labels
# 定义dataloader import paddle from paddlespeech.audio.features import LogMelSpectrogram # Feature config should be align with pretrained model sample_rate = 16000 feat_conf = { 'sr': sample_rate, 'n_fft': 1024, 'hop_length': 320, 'window': 'hann', 'win_length': 1024, 'f_min': 50.0, 'f_max': 14000.0, 'n_mels': 64, } train_ds = CustomDataset(sample_rate=sample_rate) feature_extractor = LogMelSpectrogram(**feat_conf) train_sampler = paddle.io.DistributedBatchSampler( train_ds, batch_size=64, shuffle=True, drop_last=False) train_loader = paddle.io.DataLoader( train_ds, batch_sampler=train_sampler, return_list=True, use_buffer_reader=True)
相关文章
牙龈口腔病症识别
本文介绍了利用机器学习和深度学习技术进行牙龈病症检测的方法,重点探讨了卷积神经网络(CNN)在医学影像分析中的应用。通过数据准备、模型构建、数据增强及训练评估等步骤,展示了如何实现牙龈病症的自动化诊断,旨在提高诊断效率和准确性,助力口腔健康的早期干预。
基于反光衣和检测算法的应用探索
本文探讨了利用机器学习和计算机视觉技术进行反光衣检测的方法,涵盖图像预处理、目标检测与分类、特征提取等关键技术。通过YOLOv5等模型的训练与优化,展示了实现高效反光衣识别的完整流程,旨在提升智能检测系统的性能,应用于交通安全、工地监控等领域。
目录
一、基于PaddleSpeech的婴儿啼哭识别 1.项目背景 2.数据说明: 二、PaddleSpeech环境准备 三、数据预处理 1.数据解压缩 2.查看声音文件 3.音频文件长度处理 3.自定义数据集相关知识
婴儿的喂养知识大全 婴儿护理健康
婴幼儿语言发育规律
婴儿游泳知识大全
婴儿游泳好吗?婴儿游泳的好处以及坏处分别是什么?
5种因素导致宝宝夜啼 中医哪些方法能治疗
婴儿游泳的坏处是什么
母婴护理知识大全
婴儿游泳好不好
中医如何外治小儿夜啼
《婴幼儿营养喂哺与健康成长》【价格 目录 书评 正版】
网址: 基于PaddleSpeech的婴儿啼哭识别(上) https://www.trfsz.com/newsview112643.html
推荐资讯
- 1男女激情后不宜做哪些事 4181
- 2从出汗看健康 出汗透露你的健 3839
- 3早上怎么喝水最健康? 3633
- 4习惯造就健康 影响健康的习惯 3283
- 5五大原因危害女性健康 如何保 3187
- 6连花清瘟、布洛芬等多款感冒药 2957
- 7男子喝水喉咙里像放了刀子一样 2455
- 810人混检核酸几天出结果?1 2225
- 9第二轮新冠疫情要来了?疾控中 2219
- 10转阴多久没有传染性?满足四个 2163