Tensorflow音频分类
tensorflow
https://www.tensorflow.org/lite/examples/audio_classification/overview?hl=zh-cn

官方有移动端demo

前端不会 就只能找找有没有java支持



注意版本



注意JDK版本
package com.example.demo17.controller;import org.tensorflow.*;
import org.tensorflow.ndarray.*;
import org.tensorflow.ndarray.impl.dense.FloatDenseNdArray;
import org.tensorflow.proto.framework.DataType;
import org.tensorflow.proto.framework.MetaGraphDef;
import org.tensorflow.proto.framework.SignatureDef;
import org.tensorflow.proto.framework.TensorInfo;
import org.tensorflow.types.TFloat32;
import org.tensorflow.types.TInt64;import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.xml.transform.Result;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;public class Test {private static FloatNdArray t1() {
// String audioFilePath = "D:\\ai\\cat.wav";String audioFilePath = "C:\\Users\\user\\Downloads\\output_Wo9KJb-5zuz1_2.wav";
// String audioFilePath = "D:\\ai\\111\\111.wav";// YAMNet期望的采样率int sampleRate = 16000;// YAMNet帧大小,0.96秒int frameSizeInMs = 96;// YAMNet帧步长,0.48秒int hopSizeInMs = 48;try (AudioInputStream audioStream = AudioSystem.getAudioInputStream(Paths.get(audioFilePath).toFile())) {AudioFormat format = audioStream.getFormat();if (format.getSampleRate() != sampleRate || format.getChannels() != 1) {System.out.println("Warning: Audio must be 16kHz mono. Consider preprocessing.");}int frameSize = (int) (sampleRate * frameSizeInMs / 1000);int hopSize = (int) (sampleRate * hopSizeInMs / 1000);byte[] buffer = new byte[frameSize * format.getFrameSize()];short[] audioSamples = new short[frameSize];// 存储每个帧的音频数据List<Float> floatList = new ArrayList<>();while (true) {int bytesRead = audioStream.read(buffer);if (bytesRead == -1) {break;}// 将读取的字节转换为short数组(假设16位精度)for (int i = 0; i < bytesRead / format.getFrameSize(); i++) {audioSamples[i] = (short) ((buffer[i * 2] & 0xFF) | (buffer[i * 2 + 1] << 8));}// 对当前帧进行处理(例如,归一化和准备送入模型)float[] floats = processFrame(audioSamples);for (float aFloat : floats) {floatList.add(aFloat);}// 移动到下一个帧System.arraycopy(audioSamples, hopSize, audioSamples, 0, frameSize - hopSize);}// 将List<Float>转换为float[]float[] floatArray = new float[floatList.size()];for (int i = 0; i < floatList.size(); i++) {floatArray[i] = floatList.get(i);}return StdArrays.ndCopyOf(floatArray);} catch (UnsupportedAudioFileException | IOException e) {e.printStackTrace();}return null;}private static float[] processFrame(short[] frame) {// 示例:归一化音频数据到[-1.0, 1.0]float[] normalizedFrame = new float[frame.length];for (int i = 0; i < frame.length; i++) {// short的最大值为32767,故除以32768得到[-1.0, 1.0]normalizedFrame[i] = frame[i] / 32768f;}return normalizedFrame;}static Map<String,String> map=new ConcurrentHashMap<>();public static void main(String[] args) throws Exception {FloatNdArray floatNdArray = t1();TFloat32 tFloat32 = TFloat32.tensorOf(floatNdArray);//SavedModelBundle savedModelBundle = SavedModelBundle.load("D:\\saved_model", "serve");SavedModelBundle savedModelBundle = SavedModelBundle.load("C:\\Users\\user\\Downloads\\archive", "serve");Map<String, SignatureDef> signatureDefMap = MetaGraphDef.parseFrom(savedModelBundle.metaGraphDef().toByteArray()).getSignatureDefMap();/*** 获取基本定义信息*/SignatureDef modelSig = signatureDefMap.get("serving_default");String inputTensorName = modelSig.getInputsMap().get("waveform").getName();String outputTensorName = modelSig.getOutputsMap().get("output_0").getName();savedModelBundle.graph();try (Session session = savedModelBundle.session()) {/*JDK 17*/
// Result run = session.runner()
// .feed(inputTensorName, tFloat32)
// .fetch(outputTensorName)
// .run();
// Tensor out = run.get(0);
// Shape shape = out.shape();
//
// System.out.println(shape);/*JDK 8*/List<Tensor> run = session.runner().feed(inputTensorName, tFloat32).fetch(outputTensorName).run();Tensor tensor = run.get(0);Shape shape = tensor.shape();System.out.println(shape.asArray());String l=String.valueOf(shape.asArray()[0]);//读取CSV文件String csvFile = "C:\\Users\\user\\Downloads\\archive\\assets\\yamnet_class_map.csv";try {List<String> lines = Files.readAllLines(Paths.get(csvFile));for (String line : lines) {String[] values = line.split(",");map.put(values[0], values[2]);}} catch (IOException e) {e.printStackTrace();}String s = map.get(l);System.out.println(s);}}
}
相关文章:
Tensorflow音频分类
tensorflow https://www.tensorflow.org/lite/examples/audio_classification/overview?hlzh-cn 官方有移动端demo 前端不会 就只能找找有没有java支持 注意版本 注意JDK版本 package com.example.demo17.controller;import org.tensorflow.*; import org.tensorflow.ndarra…...
mqtt-emqx:keepAlive机制测试
mqtt keepAlive原理详见【https://www.emqx.com/zh/blog/mqtt-keep-alive】 # 下面开始写测试代码 【pom.xml】 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2…...
C++基础7:STL六大组件
目录 一、标准容器 1、顺序容器 vector 编辑 deque list 容器适配器 stack queue prority_queue: 关联容器 有序关联容器set、mutiset、map、mutimap 增删查O(log n) 无序关联容 unordered_set、unordered_mutiset、unordered_map、unordered_mutimap 增删…...
特别名词Test Paper1
特别名词Test Paper1 ability 能力abstract 摘要accountant 会计accuracy 准确度acid 酸action 行动activity 活动actor 男演员adult 成人adventure 冒险advertisements 广告,宣传advertising 广告advice 建议age 年龄agency 代理机构,中介agreement 同…...
每日题库:Huawe数通HCIA——全部【813道】
1.关于ARP报文的说法错误的是?单选 A.ARP报文不能被转发到其他广播域 B.ARP应答报文是单播方发送的 C.任何链路层协议都需要ARP协议辅助获取数据链路层标识 DARP请求报文是广播发送的 答案:C 解析: STP协议不需要ARP辅助 2.园区网络搭建时,使用以下哪种协议可以避免出现二层…...
#04 Stable Diffusion与其他AI图像生成技术的比较
文章目录 前言1. Stable Diffusion2. DALL-E3. GAN(生成对抗网络)4. VQ-VAE比较总结 前言 随着人工智能技术的飞速发展,AI图像生成技术已成为创意产业和科研领域的热点。Stable Diffusion作为其中的佼佼者,其性能和应用广受关注。…...
不确定性+电动汽车!含高比例新能源和多类型电动汽车的配电网能量管理程序代码!
前言 能源供应的可持续性和清洁性是当今世界共同关注的议题,配电网与可再生能源发电相结合,通过多能互补和梯级利用,在不同时空取长补短,提高能源利用率,减少温室气体排放,是解决能源短缺和环境问题的有效…...
准确-K8s系列文章-修改containerd 默认数据目录
修改 Kubernetes 集群中 containerd 默认数据目录为 /data/containerd 前言 本文档适用于 Kubernetes 1.24 及以上版本的集群,介绍如何将 containerd 默认的数据目录从 /var/lib/containerd 修改为 /data/containerd。 步骤 1. 停止 containerd 服务(…...
深入探索Linux命令:`aulastlog`
深入探索Linux命令:aulastlog 在Linux系统中,安全管理一直是管理员和用户关注的焦点。aulastlog是一个非常有用的工具,用于显示用户最近登录的日志。它通过分析/var/log/lastlog文件来提供这些信息,这个文件记录了系统上所有用户…...
Debezium日常分享系列之:Debezium 2.6.2.Final发布
Debezium日常分享系列之:Debezium 2.6.2.Final发布 一、新功能和改进1.Oracle 数据库查询过滤超过 1000 个表 二、修复和稳定性改进1.PostgreSQL 偏移刷新竞争条件2.Avro 兼容性 一、新功能和改进 1.Oracle 数据库查询过滤超过 1000 个表 Debezium Oracle 连接器允…...
PHP质量工具系列之phpmd
PHPMD PHP Mess Detector 它是PHP Depend的一个衍生项目,用于测量的原始指标。 PHPMD所做的是,扫描项目中可能出现的问题如: 可能的bug次优码过于复杂的表达式未使用的参数、方法、属性 PHPMD是一个成熟的项目,它提供了一组不同的…...
【java】速度搭建一个springboot项目
使用软件:IDEA,mysql 使用框架:springboot mybatis-plus druid 坑点 使用IDEA搭建一个springboot项目的时候,需要考虑一下IDEA版本支持的JDK版本以及maven版本。否则再构建项目,引入pom的时候就会报错。 需要检查…...
SystemVerilog测试框架示例
这里是一个完整的SystemVerilog测试框架示例,包括随机化测试和详细注释。 顶层模块 (Top Module) module top;// 信号声明logic clk;logic rst_n;// 接口实例化dut_if dut_if_inst(.clk(clk), .rst_n(rst_n));// DUT实例化 (假设DUT模块名为dut)dut u_dut(.clk(du…...
每天一个数据分析题(三百五十六)-图表决策树
图表决策树中将图表分成四类,分别是? A. 比较类 B. 序列类 C. 构成类 D. 描述类 数据分析认证考试介绍:点击进入 题目来源于CDA模拟题库 点击此处获取答案...
Prism 入门06,发布订阅(入门完结)
本章节介绍使用 Prism 框架的消息聚合器 IEventAggregator ,实现如何进行消息发布,订阅,取消订阅的功能 继续使用上一章节使用的 Prism WPF 空模板项目 BlankApp1 1.首先,在使用 Prism 框架当中,进行事件消息的发布和订阅之前,需要定义发布事件的事件消息模型。如下所示:…...
2. pytorch环境安装
概述 本文提供基于Anaconda环境Windows11操作系统的Pytorch深度学习环境的配置。深度学习环境分为GPU和CPU两大部分。使用GPU进行环境配置,需要保证电脑配有独立显卡,并且显卡驱动安装正常,详情见前文。 1. 创建新的虚拟环境用来配置Pyt…...
力扣爆刷第148天之贪心算法五连刷(区间合并)
力扣爆刷第148天之贪心算法五连刷(区间合并) 文章目录 力扣爆刷第148天之贪心算法五连刷(区间合并)一、406. 根据身高重建队列二、452. 用最少数量的箭引爆气球三、435. 无重叠区间四、763. 划分字母区间五、56. 合并区间六、738.…...
JSON及Python操作JSON相关
JSON及Python操作JSON相关 Json简介及Python操作Json相关示例。 1. JSON概念及支持的数据类型 1.1 什么是 JSON? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解…...
[ 网络通信基础 ]——网络的传输介质(双绞线,光纤,标准,线序)
🏡作者主页:点击! 🤖网络通信基础TCP/IP专栏:点击! ⏰️创作时间:2024年6月8日14点23分 🀄️文章质量:94分 前言—— 在现代通信网络中,传输介质是数据传…...
Android 高德地图API(新版)
新版高德地图 前言正文一、创建应用① 获取PackageName② 获取调试版安全码SHA1③ 获取发布版安全码SHA1 二、配置项目① 导入SDK② 配置AndroidManifest.xml 三、获取当前定位信息① ViewBinding使用和导包② 隐私合规设置③ 权限请求④ 初始化定位⑤ 获取定位信息 四、显示地…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...
