日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【大学毕设全纪录】鸟类的声音识别·一

發布時間:2023/12/8 编程问答 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【大学毕设全纪录】鸟类的声音识别·一 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介與目的

我的畢設項目主要是關于用鳥的聲音來判斷鳥的種類。研究鳥類鳴聲有利于人們掌握其繁殖行為和生活習性等生命活動規律,從而更好地開發和利用經濟鳥類,更有效保護瀕危珍稀類。同時,鳥鳴聲在野生動物監測、農林漁業驅趕害鳥、航空鳥撞以及旅游等方面也具有十分廣闊的前景。此外,鳴聲的研究還能用來解決鳥類的分類學問題,如對同一種的不同類群及不同種的親緣關系進行分析和比較,并探討新種形成的種系發生歷史。(鳥類鳴聲初探_呂琳娜)
鳥聲識別的難點主要在于:一,音頻中干擾過多,比如風雨聲和其他鳥類的聲音等;二,鳥與鳥種類之間的鳴聲差別極其微小,人耳尚不能分別,對于計算機來說就更加困難了。
我做這個項目主要是想要比較神經網絡的各種參數對鳥聲識別準確度的影響,并不僅僅著眼于提高準確度,而在于分析為什么準確度會隨著參數而改變,試圖發覺神經網絡的“潛力”。

項目計劃

我將課題分為兩部分,音頻處理和神經網絡。音頻處理主要負責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文件;二:根據切割區間生成新的音頻片段,親身經歷是:第一步跑了整整一天都沒跑出來……這一步我是這么做的先算出一個“平均值”,然后響度在“平均值”以下的全部刪除。因為刪除是一幀一幀刪除所以很慢。第二步在我不再一幀一幀寫之后就變快了。不過還有問題……我是先按照鳥叫的聲音(也就是刪除無聲的片段,然后按照間隙切割)切割,這樣切完了之后就不一定是多長時間了,又長又短,長的可以切短,短的……感覺補全有點浪費(比如一秒鐘補成五秒)不過暫時只能這樣啦,這一步已經超級超時了!
  • 清洗
  • 繪制頻譜圖
  • 總結

    以上是生活随笔為你收集整理的【大学毕设全纪录】鸟类的声音识别·一的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。