【大学毕设全纪录】鸟类的声音识别·一
简介与目的
我的毕设项目主要是关于用鸟的声音来判断鸟的种类。研究鸟类鸣声有利于人们掌握其繁殖行为和生活习性等生命活动规律,从而更好地开发和利用经济鸟类,更有效保护濒危珍稀类。同时,鸟鸣声在野生动物监测、农林渔业驱赶害鸟、航空鸟撞以及旅游等方面也具有十分广阔的前景。此外,鸣声的研究还能用来解决鸟类的分类学问题,如对同一种的不同类群及不同种的亲缘关系进行分析和比较,并探讨新种形成的种系发生历史。(鸟类鸣声初探_吕琳娜)
鸟声识别的难点主要在于:一,音频中干扰过多,比如风雨声和其他鸟类的声音等;二,鸟与鸟种类之间的鸣声差别极其微小,人耳尚不能分别,对于计算机来说就更加困难了。
我做这个项目主要是想要比较神经网络的各种参数对鸟声识别准确度的影响,并不仅仅着眼于提高准确度,而在于分析为什么准确度会随着参数而改变,试图发觉神经网络的“潜力”。
项目计划
我将课题分为两部分,音频处理和神经网络。音频处理主要负责1.统一数据格式,2.降噪,尽可能的将音频中的无关信息剔除,如设备产生的噪音和背景噪音等,将无鸟声的部分从音频中减掉,并分片,统计从网站上下载下来的音频时长,确定初步训练集的大小, 3.提取音频特征,将音频转换为最大程度保留鸟声特征的图像,如频谱图(spectrogram)等,人工分析估计图像的效果。
一.音频处理
- 收集数据
这里是我的数据来源: Xeno-canto.这是一个收集全球各地的鸟鸣声的网站,因为有提供api所以不需要爬虫。(数据是可以免费使用的)当然我还是写了一个菜的一批的脚本来下载文件,但太菜了我就不打在这儿了。
因为Xeno是外网,国外的鸟鸣声比较多,所以我选择全英国的鸟类作为研究范围。(如果有时间我来看看中国的)全英国的鸟鸣声大概三万多条。我首先下载了一千多条做实验,最后拿准确率最高的神经网络来对三万条做测试。
这里是音频较多且清晰度较高的20种鸟类:
鸟名 |
---|
Willow Warbler |
Common Chaffinch |
Great Tit |
Eurasian Blue Tit |
Common Blackbird |
Eurasian Tree Sparrow |
Corn Bunting |
Common Whitethroat |
Yellowhammer |
Common Chiffchaff |
Eurasian Wren |
Song Thrush |
European Robin |
Lesser Whitethroat |
Dunnock |
Eurasian Blackcap |
Barn Swallow |
Tawny Owl |
Common Cuckoo |
Little Owl |
统一格式
①音频格式
这里我在考虑用mp3还是WAV,因为从官网下载下来的数据就是mp3,mp3是有损压缩,即使转换成WAV也无济于事,而且WAV占据的内存要远大于mp3。所以我打算在画图表时转换成WAV画图,存储还是用mp3存。
②图表格式
频谱图(spectrogram)是一种很好的将声音转化为图像的方法。声音是波的一种,你可以想象声音的三重维度:频率,振幅和时间。
下图是一个人的语音的波形图,它显示了振幅随着时间的变化,但是我们却很难从中清晰地看出频率的变化。
在频谱图视图中,垂直轴以赫兹为单位显示频率,水平轴以时间为单位(就像波形图一样),振幅以亮度表示。黑色背景是寂静,而明亮的橙色曲线是正弦波在音调中向上移动。这使我们可以查看一个频率范围(最低的显示在底部,最高的显示在顶部)以及不同频率下的声音有多响。大声的事件将显示为明亮,而安静的事件将显示为黑暗。(此为正弦波)
它将声音的频率,振幅和时间直观地显示出来,方便我们之后通过图像处理对鸟类的鸣声进行分类。What is a spectrogram?在背景调查的过程中,我发现不少论文都通过梅尔频率倒谱系数(Mel Frequency Cepstrum Coefficient, MFCC)进行声音的特征提取,并取得不错的效果,计划之后有时间来研究一下。
统一之后的格式:
• 存储格式:MP3
• 频谱图输入:WAV
• Bit depth: 16-bits
• Sample rate: 48000Hz (至少质量为A的音频是这个sample rate)
• Audio Channels: Mono(单声道)
import wave
from pydub import AudioSegment
sound1 = AudioSegment.from_mp3("test.mp3")
sound1.export('test.wav',format='wav') #mp3取得参数较难,所以转换成wav
f=wave.open('test.wav','rb')
params=f.getparams()
#Returns a tuple (nchannels, sampwidth, framerate, nframes, comptype, compname), equivalent to output of the get*() methods.
nchannels,sampwidth,framerate,nframes=params[:4]
- 分片
步骤1:因为如果数据很大,神经网络就会很慢,而音频中没有鸟声音的段落占了整体的很大一部分,所以我决定根据基于声音间隙将声音切割为片段。
步骤2:将长短不一的音频分成10秒钟的片段,10秒钟包含了识别鸟类所需要的足够信息,之后会尝试将其分成5秒钟(似乎是一般鸟鸣叫的平均时长?)和1秒钟(这样的话这一秒钟之内不容易包含其他鸟类的声音)去做实验。但显而易见,先分成十秒钟还可以再分,但分短了就没法合起来啦。所以就分成十秒钟。
吐槽:我没有想到这一步花费了我无比长的时间,因为我没有进一步优化代码导致代码效率极低。执行步骤一的顺序如下:读取音频文件-确定切割时间-分段写入新的音频文件。问题在第三步,我的代码竟然是一帧一帧写的吗,巨慢……于是我把问题分成了两步。一:确定分割区间将其存储为.data文件;二:根据切割区间生成新的音频片段,亲身经历是:第一步跑了整整一天都没跑出来……这一步我是这么做的先算出一个“平均值”,然后响度在“平均值”以下的全部删除。因为删除是一帧一帧删除所以很慢。第二步在我不再一帧一帧写之后就变快了。不过还有问题……我是先按照鸟叫的声音(也就是删除无声的片段,然后按照间隙切割)切割,这样切完了之后就不一定是多长时间了,又长又短,长的可以切短,短的……感觉补全有点浪费(比如一秒钟补成五秒)不过暂时只能这样啦,这一步已经超级超时了! - 清洗
- 绘制频谱图
【大学毕设全纪录】鸟类的声音识别·一相关推荐
- swagger 返回json字符串_Net Core微服务入门全纪录(完结)——Ocelot与Swagger
前言 上一篇[.Net Core微服务入门全纪录(八)--Docker Compose与容器网络]完成了docker-compose.yml文件的编写,最后使用docker compose的一个up指 ...
- .net core ocelot 获取路由的mothed_Net Core微服务入门全纪录(四)Ocelot网关(上)
上一篇[.Net Core微服务入门全纪录(三)--Consul-服务注册与发现(下)]已经使用Consul完成了服务的注册与发现,实际中光有服务注册与发现往往是不够的,我们需要一个统一的入口来连接客 ...
- .Net Core微服务入门全纪录(完结)——Ocelot与Swagger
点击上方蓝字"小黑在哪里"关注我吧 前言 上一篇[.Net Core微服务入门全纪录(八)--Docker Compose与容器网络]完成了docker-compose.yml文件 ...
- 更换内存条、固态硬盘、双系统配置全纪录
联想IdeaPad 310S更换内存条.固态硬盘.双系统配置全纪录 一.更换内存条 二.更换固态 三.重装windows10系统 1.准备工作 2.注意事项 3.制作启动盘 四.加装ubuntu16. ...
- RHEL 5.4 下安装和使用 ntop 全纪录(ntop:Linux下可通过Web访问的网络流量监控工具)...
RHEL 5.4 下安装和使用 ntop 全纪录 1. ntop介绍 Ntop是一种监控网络流量工具,用ntop显示网络的使用情况比其他一些网络管理软件更加直观.详细.Ntop甚至可以列出每个节点计算 ...
- 【AI作画】当梵高遇上东方明珠——梵高画风迁移全纪录
[AI作画]当梵高遇上东方明珠--梵高画风迁移全纪录 视频: [AI作画]当梵高遇上东方明珠--梵高画风迁移全纪录 梵高出生于1853年3月30日荷兰乡村津德尔特的一个新教牧师家庭,早年的他做过职员和 ...
- 双非计算机全奖博士,录取捷报|双非本科背景拿下普渡大学药理学全奖博士
录取院校: 普渡大学 博士全奖(专排7) 密歇根大学硕士(专排3) 明尼苏达大学硕士(专排3) 录取专业:药化药理/药剂 成绩背景:GPA3.6+ TOFEL95+ GRE315+ 指导老师: 曾易林 ...
- 大学计算机技术知识大全,大学计算机全章节重点基础知识归纳大全.doc
大学计算机全章节重点基础知识归纳大全 PAGE \* MERGEFORMAT 18 大学计算机基础重点归纳 第一章:计算机概论 19646年,第一台计算机,ENIAC 计算机分类(6):巨型,小巨型, ...
- 究极丐版客制化机械键盘制作全纪录(下:程序下载)
究极丐版客制化机械键盘制作全纪录(下:程序下载) 前排提示:由于键盘制作时间距离写文章的时间比较久远所以不对分享文件的正确性保证!!!! 在比较久之前写了个上篇,当时比较有时间为了简单的记录自己做键盘 ...
最新文章
- 测试一下你对IP地址的掌握水平(网管面试时会用到)
- 小强升职记思维导图_你学会用 “思维导图” 学英语了吗?
- 电脑删除的文件怎么恢复?你要找的方案
- Visual Studio 2005中一个需要小改进的地方
- 万稞pw80线切割编程软件_常用 CNC编程软件
- 当当(Elastic-job)分布式定时任务
- 趣学Python-教孩子学编程--第三章
- Java生成桌面快捷方式(字节流生成)
- __raw_writel, writel_relaxed 和 writel的区别
- shader编程-三维场景下SDF建模,对模型进行扭曲、弯曲、裁剪、掏空操作(WebGL-Shader开发基础12)
- 中冠百年|怎样才能提高个人理财的执行力
- RNNoise: Learning Noise Suppression(深度学习噪声抑制)(2)
- 第1课-OC对象原理基础
- svn主从备份以及开机启动脚本
- char类型和varchar的区别和选用
- 抖音私信规则分析丨抖音企业号私信规则解读
- windows,ubuntu,代码三种方式制作Android开机动画 bootanimation.zip
- python比较两个list之间的差异、相同(差集、交集、并集)
- 浅析防雷型TVS管的特性及应用
- 数字信号处理matlab实验报告,数字信号处理,matlab实验报告