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

1 结构体

此部分定义了两个结构体用于存储音频信息:

  • AudioFragment:用于存储单个音频片段(0.975s, 16000Hz)的标签评分信息;
  • AudioInfo:用于存储整个音频信息,包含音频文件名、时间等基础信息,同时包含每个时间段的标签评分信息,即AudioFragment数组。
    在这里插入图片描述

1.1 AudioFragment 结构体

  • 属性 snoring : Float; 存储打鼾对应的预测评分,例如 0.9821
  • 属性 sneeze : Float; 存储打喷嚏对应的预测评分,例如 0.0
  • 属性 cough : Float; 存储咳嗽对应的预测评分,例如 0.0
  • 属性 topN : Array<(label: String, score: Float)>; 存储N个标签与对应评分信息,例如存一个标签: [(label: “Snoring”, score: 0.9821)]
  • 方法init(topN:Array<(label: String, score: Float)>, cough: Float, sneeze: Float, snoring: Float); 有参构造函数,实现对结构体属性的赋值。

1.2 AudioInfo 结构体

  • 属性 fileName : String; 存储音频文件名,不包括扩展名,例如"audio"
  • 属性 audioTime : Float; 存储音频对应时间,例如 10.0
  • 属性 audioChannel : Int; 存储音频通道数,例如 1
  • 属性 audioSampleRate : Int; 存储音频采样率,例如 8000
  • 属性 audioSampleBit : Int; 存储音频采样深度,例如 16
  • 属性 audioFragemnts : [AudioFragemnt]; 存储音频中包含的音频片段信息,每 0.975s 为一个音频片段
  • 方法 mutating func setValue (fileName: String, audioTime: Float, audioChannel: Int, audioSampleRate: Int, audioSampleBit: Int, audiofragments: [AudioFragment]) -> (); 赋值函数,实现对结构体属性的赋值。

2 WavReader 类

在这里插入图片描述

该类实现对音频文件的加载、头文件解析、采样点数据读取等功能。以下为类中的所有方法。

  • 方法 init (fileName: String, fileExtention: String);初始化函数,需给定目标音频文件名与其扩展名
  • 方法 private func getURLAndDataByStr (fileName: String);根据提供的目标文件名,加载URL资源并解析,获取音频的NSData类型数据数组
  • 方法 private func readHead(data: NSData); 根据获取的NSData解析文件头,解析为特定的文件头信息
  • 方法 private func readAudioData(data: NSData);根据获取的NSData解析音频采样点信息,解析为特定的Uint16数组
  • 方法 private func utilsReadData(data: NSData, startIndex: Int, dataSize: Int, bitDeep: Int) throws -> [Int16];wav文件以chunk块存储数据,该方法主要通过下标实现读取单个chunk块的数据内容
  • 方法 func process();指定各个方法的执行顺序,对方法进行封装,对外暴露 process() 方法。

3 AudioProcesser类

在这里插入图片描述

该类实现对Yamnet模型文件的加载、执行预测、不同类型数据的转换、对音频文件的解析进行调用,以及对解析到的数据进行结构化操作。

  • 方法 init (fileName: String);初始化函数,需给定目标处理音频文件的文件名(不包含扩展名,默认为 .wav)
  • 方法 private func setupInterpreter();初始化 Tensorflow Lite 解释器
  • 方法 private func int16ArrayToData(_ buffer: [Int16]) -> Data;将 [Int16] 转换为 Data 类型数据,模型接收输入为 Data 类型
  • 方法 private func dataToFloatArray(_ data: Data) -> [Float];将Data数据类型转换为 [Float] 类型数据,将模型输出转换为浮点数组
  • 方法 public func start(inputBuffer: [Int16]) -> [Float];调用模型执行预测,并返回模型预测结果
  • 方法 func sortByScore(scores: [Float], top: Int) -> Array<(label: String, score: Float)>;将模型输出的标签评分结果排序
  • 方法 func convertSampleData2Audiofragment(wavReader: WavReader, top: Int);传入一个WavReader对象,该方法会根据该对象中解析到的音频采样信息调用yamnet 进行预测,预测后包装成 AudioFragmen t数组对象,存储在 AudioInfo 结构体中
  • 方法 func predict ( );对文件解析、模型预测等方法进行封装,对外只需要调用predict()方法
  • 方法 func isCough(audioFragment: AudioFragment) -> Bool;传入一个AudioFragment结构体,通过其评分信息判断是否为咳嗽音频(通过判断其topN属性中是否包含Cough标签)
  • 方法 func isSneeze(audioFragment: AudioFragment) -> Bool;传入一个AudioFragment结构体,通过其评分信息判断是否为打喷嚏音频(通过判断其topN属性中是否包含Sneeze标签)
  • 方法 func isSnoring(audioFragment: AudioFragment) -> Bool;传入一个AudioFragment结构体,通过其评分信息判断是否为打鼾音频(通过判断其topN属性中是否包含Snoring标签)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507668.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js 字符串替换_正则精要:玩转JS正则表达式,也许只需这一篇(建议收藏)

0.导引在正文开始前&#xff0c;先说说正则表达式是什么&#xff0c;为什么要用正则表达式&#xff1f;正则表达式在我个人看来就是一个程序可以识别的规则&#xff0c;有了这个规则&#xff0c;程序就可以帮我们判断某些字符是否符合我们的要求。但是&#xff0c;我们为什么要…

小米平板android最新版本,想要翻身还需努力 小米平板2安卓版评测

1依旧发烧&#xff1f;小米平板2评测如今的平板市场虽不能用日薄西山来形容&#xff0c;但各大厂商费尽心机惨淡经营也无力阻止平板电脑市场的衰落&#xff0c;iPad Air和Mini系列的销量下滑迫使苹果不得不用寄希望于iPad Pro打开一片新天地&#xff0c;而在手机行业风生水起了…

国内计算机类APP相关竞赛总结

中国高校计算机大赛–移动应用创新赛 http://www.appcontest.net/ 中国高校计算机大赛—移动应用创新赛”旨在促进高校计算机课程教学内容和教学方法改革&#xff0c;激发学生创新意识&#xff0c;提升学生利用计算机分析问题、解决问题的能力&#xff0c;特别是移动应用的设计…

flink 写kafka_flink消费kafka的offset与checkpoint

生产环境有个作业&#xff0c;逻辑很简单&#xff0c;读取kafka的数据&#xff0c;然后使用hive catalog&#xff0c;实时写入hbase&#xff0c;hive&#xff0c;redis。使用的flink版本为1.11.1。为了防止写入hive的文件数量过多&#xff0c;我设置了checkpoint为30分钟。env.…

论文阅读:超高分辨率图像中快速、准确的条码检测

摘要 由于目标对象的尺度不同&#xff0c;超高分辨率 (UHR) 图像中的对象检测长期以来一直是计算机视觉中的一个具有挑战性的问题。在条码检测方面&#xff0c;将 UHR 输入图像调整为更小的尺寸通常会导致相关信息的丢失&#xff0c;而直接处理它们的效率很高且计算成本很高。…

android 多线程 场景,精选Android初中级面试题 (三): 深探Handler,多线程,Bitmap

码个蛋(codeegg) 第 930 次推文作者&#xff1a;Focusing链接&#xff1a;https://juejin.im/post/5c85cead5188257c6703af47Handler1、谈谈消息机制Handler作用 &#xff1f;有哪些要素 &#xff1f;流程是怎样的 &#xff1f;参考回答&#xff1a;负责跨线程通信&#xff0c;…

通过超分辨率重构来提高二维码的对比度

1 问题描述 &#xff08;1&#xff09;图像分辨率小。例如一些嵌入在海报&#xff08;如图1&#xff09;或远距离拍摄的码&#xff0c;其分辨率远小于通常情况下的码图像。 图1.海报中的二维码占比很小 &#xff08;2&#xff09;图像质量较低。有很多是经过了多次的压缩和转…

android web 访问数据库,Web下的JDBC访问数据库的基本步骤

Web下的JDBC访问数据库的基本步骤(2012-06-02 12:09:33)在Java程序中连接数据库的一般步骤分为一下几部分&#xff0c;我摘录出来&#xff0c;跟大家分享。(1)将数据库的JABC驱动加载到classpath中&#xff0c;在基于JavaEE的Web应用开发过程中&#xff0c;通常把JDBC驱动放在W…

linux 磁盘扩容_记录一次ESXi Linux在线扩容,不重启系统

因为工作需要&#xff0c;需要将运行在ESXi主机上面的一台Centos 里面的一个LV卷进行扩容&#xff0c;下面记录了此次扩展的详细过程&#xff0c;整个过程&#xff0c;不需要重启服务器。1. 首先通过df-h 查看当前磁盘结构如下&#xff1a;我们此次的最终目标&#xff0c;就是将…

android item三种,Android RecyclerView中的ItemDecoration的几种绘制方法

如题&#xff0c;我们使用recyclerview的时候&#xff0c;如果没有设置显示条目的margin&#xff0c;或者padding的话&#xff0c;是没有分割线效果的。那么除去使用margin或padding,其余的方法是用itemdecoration绘制分割线我们绘制分割线的时候通常会使用drawable去绘制&…

上传文件和提交textfield_0基础掌握Django框架(37)文件上传

为了更好的学习效果&#xff0c;请搭配视频教程一起学习&#xff1a;Django零基础到项目实战 - 网易云课堂​study.163.com文件上传&#xff1a;文件上传是网站开发中非常常见的功能。这里详细讲述如何在Django中实现文件的上传功能。前端HTML代码实现&#xff1a;在前端中&…

华为p10刷原生android,华为p10怎么刷机 华为p10刷机方法【详细介绍】

喜欢折腾手机的用户一定对于手机root权限获取不陌生&#xff0c;root后虽然不能享受官方联保服务但同时带来的好处不用小编多说。前面给大家介绍了 华为p10 刷入第三方recovery教程&#xff0c;现在华为p10刷机包已经放出来&#xff0c;小编给大家带来华为p10刷机权限获取教程。…

使用container的嵌套_ElementUI 技术揭秘(4)— Container 布局容器组件的设计与实现。...

前言上一篇文章我们分析了 Layout 布局组件的设计和实现&#xff0c;它的应用场景通常是局部布局。对于整个页面的布局&#xff0c;element-ui 提供了 Container 布局容器组件&#xff0c;专门用于 PC 管理后台页面的整体布局。需求分析我们先通过几幅图看一下页面的常见布局。…

宝马屏幕共享android,宝马屏幕共享功能怎么用

【太平洋汽车网】使用宝马屏幕共享要先打开车载电脑多媒体功能&#xff0c;再选择屏幕共享手机投屏&#xff0c;勾掉宝马互联选项&#xff0c;然后再打开手机wifi&#xff0c;选择BMW输入密码即可使用屏幕共享。车手机互联映射即车机互联&#xff0c;就是将手机投屏到车载显示器…

“用于无监督图像生成解耦的正交雅可比正则化”论文解读

Tikhonov regularization terms https://blog.csdn.net/jiejinquanil/article/details/50411617 本文是对博客https://baijiahao.baidu.com/s?id1710942953471566583&wfrspider&forpc的重写。 1 简介 本文是对发表于计算机视觉和模式识别领域的顶级会议 ICCV 2021 的…

html带正方形项目列表,5种简单实用的css列表样式实例,可以直接用到项目中。...

谁不希望有一个好看而又干净的列表&#xff1f;这篇文章中我们给出几个实用的例子&#xff0c;你可以把他们直接用到自己的工作中。我们从一个带有动画效果的垂直列表开始&#xff0c;接着是一个图文混排的例子&#xff0c;然后是一个只有图片的list例子跟一个水平菜单的例子&a…

pb 打印html页面,用PB开发WEB应用

用PB开发WEB应用用PB开发WEB应用烟台教育学院网络中心 孙连三一、PB Window plug &#xff0d;in 的用途PowerBuilder Window plug &#xff0d;in 的用途是在HTML 页面中插入PowerBuilder 中定义的窗口对象&#xff0c;此窗口对象上定义的功能在浏览器中一样被执行&#xff0…

html加上百度统计,vue单页面应用加入百度统计

版权声明&#xff1a;本文为CSDN博主「钟文辉」的原创文章&#xff0c;遵循CC 4.0 by-sa版权协议&#xff0c;转载请附上原文出处链接及本声明。原文链接&#xff1a;https://blog.csdn.net/qq_39753974/article/details/80322643在单页面中&#xff0c;要是只加在head中的话那…

推荐系统:猜你喜欢

0 简介 网络的迅速发展带来了信息超载&#xff08;information overload&#xff09;问题。解决信息超载问题一个非常有潜力的办法是推荐系统&#xff0c;它根据用户的信息需求、兴趣等&#xff0c;将用户感兴趣的信息、产品等推荐给用户。推荐系统最典型应用领域是电子商务领…

量子计算机九章能否预测未来,张礼立 : 中国 “九章”量子计算机到底厉害在哪?...

原标题&#xff1a;张礼立 &#xff1a; 中国 “九章”量子计算机到底厉害在哪&#xff1f;【背景信息】12月4日&#xff0c;《科学》杂志公布了 中国 “九章” 的重大突破。 这台由中国科学技术大学潘建伟、陆朝阳等学者研制的76个光子的量子计算原型机&#xff0c;推动全球量…