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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

睡眠音频分割及识别问题(十二)--基于IOS的YAMNet音频识别(总结)

發(fā)布時(shí)間:2024/8/23 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 睡眠音频分割及识别问题(十二)--基于IOS的YAMNet音频识别(总结) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1 結(jié)構(gòu)體

此部分定義了兩個(gè)結(jié)構(gòu)體用于存儲(chǔ)音頻信息:

  • AudioFragment:用于存儲(chǔ)單個(gè)音頻片段(0.975s, 16000Hz)的標(biāo)簽評(píng)分信息;
  • AudioInfo:用于存儲(chǔ)整個(gè)音頻信息,包含音頻文件名、時(shí)間等基礎(chǔ)信息,同時(shí)包含每個(gè)時(shí)間段的標(biāo)簽評(píng)分信息,即AudioFragment數(shù)組。

1.1 AudioFragment 結(jié)構(gòu)體

  • 屬性 snoring : Float; 存儲(chǔ)打鼾對(duì)應(yīng)的預(yù)測(cè)評(píng)分,例如 0.9821
  • 屬性 sneeze : Float; 存儲(chǔ)打噴嚏對(duì)應(yīng)的預(yù)測(cè)評(píng)分,例如 0.0
  • 屬性 cough : Float; 存儲(chǔ)咳嗽對(duì)應(yīng)的預(yù)測(cè)評(píng)分,例如 0.0
  • 屬性 topN : Array<(label: String, score: Float)>; 存儲(chǔ)N個(gè)標(biāo)簽與對(duì)應(yīng)評(píng)分信息,例如存一個(gè)標(biāo)簽: [(label: “Snoring”, score: 0.9821)]
  • 方法init(topN:Array<(label: String, score: Float)>, cough: Float, sneeze: Float, snoring: Float); 有參構(gòu)造函數(shù),實(shí)現(xiàn)對(duì)結(jié)構(gòu)體屬性的賦值。

1.2 AudioInfo 結(jié)構(gòu)體

  • 屬性 fileName : String; 存儲(chǔ)音頻文件名,不包括擴(kuò)展名,例如"audio"
  • 屬性 audioTime : Float; 存儲(chǔ)音頻對(duì)應(yīng)時(shí)間,例如 10.0
  • 屬性 audioChannel : Int; 存儲(chǔ)音頻通道數(shù),例如 1
  • 屬性 audioSampleRate : Int; 存儲(chǔ)音頻采樣率,例如 8000
  • 屬性 audioSampleBit : Int; 存儲(chǔ)音頻采樣深度,例如 16
  • 屬性 audioFragemnts : [AudioFragemnt]; 存儲(chǔ)音頻中包含的音頻片段信息,每 0.975s 為一個(gè)音頻片段
  • 方法 mutating func setValue (fileName: String, audioTime: Float, audioChannel: Int, audioSampleRate: Int, audioSampleBit: Int, audiofragments: [AudioFragment]) -> (); 賦值函數(shù),實(shí)現(xiàn)對(duì)結(jié)構(gòu)體屬性的賦值。

2 WavReader 類

該類實(shí)現(xiàn)對(duì)音頻文件的加載、頭文件解析、采樣點(diǎn)數(shù)據(jù)讀取等功能。以下為類中的所有方法。

  • 方法 init (fileName: String, fileExtention: String);初始化函數(shù),需給定目標(biāo)音頻文件名與其擴(kuò)展名
  • 方法 private func getURLAndDataByStr (fileName: String);根據(jù)提供的目標(biāo)文件名,加載URL資源并解析,獲取音頻的NSData類型數(shù)據(jù)數(shù)組
  • 方法 private func readHead(data: NSData); 根據(jù)獲取的NSData解析文件頭,解析為特定的文件頭信息
  • 方法 private func readAudioData(data: NSData);根據(jù)獲取的NSData解析音頻采樣點(diǎn)信息,解析為特定的Uint16數(shù)組
  • 方法 private func utilsReadData(data: NSData, startIndex: Int, dataSize: Int, bitDeep: Int) throws -> [Int16];wav文件以chunk塊存儲(chǔ)數(shù)據(jù),該方法主要通過下標(biāo)實(shí)現(xiàn)讀取單個(gè)chunk塊的數(shù)據(jù)內(nèi)容
  • 方法 func process();指定各個(gè)方法的執(zhí)行順序,對(duì)方法進(jìn)行封裝,對(duì)外暴露 process() 方法。

3 AudioProcesser類

該類實(shí)現(xiàn)對(duì)Yamnet模型文件的加載、執(zhí)行預(yù)測(cè)、不同類型數(shù)據(jù)的轉(zhuǎn)換、對(duì)音頻文件的解析進(jìn)行調(diào)用,以及對(duì)解析到的數(shù)據(jù)進(jìn)行結(jié)構(gòu)化操作。

  • 方法 init (fileName: String);初始化函數(shù),需給定目標(biāo)處理音頻文件的文件名(不包含擴(kuò)展名,默認(rèn)為 .wav)
  • 方法 private func setupInterpreter();初始化 Tensorflow Lite 解釋器
  • 方法 private func int16ArrayToData(_ buffer: [Int16]) -> Data;將 [Int16] 轉(zhuǎn)換為 Data 類型數(shù)據(jù),模型接收輸入為 Data 類型
  • 方法 private func dataToFloatArray(_ data: Data) -> [Float];將Data數(shù)據(jù)類型轉(zhuǎn)換為 [Float] 類型數(shù)據(jù),將模型輸出轉(zhuǎn)換為浮點(diǎn)數(shù)組
  • 方法 public func start(inputBuffer: [Int16]) -> [Float];調(diào)用模型執(zhí)行預(yù)測(cè),并返回模型預(yù)測(cè)結(jié)果
  • 方法 func sortByScore(scores: [Float], top: Int) -> Array<(label: String, score: Float)>;將模型輸出的標(biāo)簽評(píng)分結(jié)果排序
  • 方法 func convertSampleData2Audiofragment(wavReader: WavReader, top: Int);傳入一個(gè)WavReader對(duì)象,該方法會(huì)根據(jù)該對(duì)象中解析到的音頻采樣信息調(diào)用yamnet 進(jìn)行預(yù)測(cè),預(yù)測(cè)后包裝成 AudioFragmen t數(shù)組對(duì)象,存儲(chǔ)在 AudioInfo 結(jié)構(gòu)體中
  • 方法 func predict ( );對(duì)文件解析、模型預(yù)測(cè)等方法進(jìn)行封裝,對(duì)外只需要調(diào)用predict()方法
  • 方法 func isCough(audioFragment: AudioFragment) -> Bool;傳入一個(gè)AudioFragment結(jié)構(gòu)體,通過其評(píng)分信息判斷是否為咳嗽音頻(通過判斷其topN屬性中是否包含Cough標(biāo)簽)
  • 方法 func isSneeze(audioFragment: AudioFragment) -> Bool;傳入一個(gè)AudioFragment結(jié)構(gòu)體,通過其評(píng)分信息判斷是否為打噴嚏音頻(通過判斷其topN屬性中是否包含Sneeze標(biāo)簽)
  • 方法 func isSnoring(audioFragment: AudioFragment) -> Bool;傳入一個(gè)AudioFragment結(jié)構(gòu)體,通過其評(píng)分信息判斷是否為打鼾音頻(通過判斷其topN屬性中是否包含Snoring標(biāo)簽)

總結(jié)

以上是生活随笔為你收集整理的睡眠音频分割及识别问题(十二)--基于IOS的YAMNet音频识别(总结)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。