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);}}
}

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

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

相关文章

2024年5月文章一览

2024年5月编程人总共更新了7篇文章&#xff1a; 1.2024年4月文章一览 2.《自动机理论、语言和计算导论》阅读笔记&#xff1a;p215-p351 3.《自动机理论、语言和计算导论》阅读笔记&#xff1a;p352-P401 4.《自动机理论、语言和计算导论》阅读笔记&#xff1a;p402-p427 …

2013.8.5-2024.5.10碳排放权交易明细数据

2013.8.5-2024.5.10碳排放权交易明细数据 1、时间&#xff1a;2013.8.5-2024.5.10 2、来源&#xff1a;各碳排放交易所 3、范围&#xff1a;各交易所城市 4、指标&#xff1a;行政区划代码、地区、所属省份、交易日期、交易品种、开盘价_元、最高价_元、最低价_元、成交均价…

【机器学习基础】Python编程08:五个实用练习题的解析与总结

Python是一种广泛使用的高级编程语言,它在机器学习领域中的重要性主要体现在以下几个方面: 简洁易学:Python语法简洁清晰,易于学习,使得初学者能够快速上手机器学习项目。 丰富的库支持:Python拥有大量的机器学习库,如scikit-learn、TensorFlow、Keras和PyTorch等,这些…

在线OJ项目测试(selenium+Junit5)

目录 在线OJ项目测试的思维导图 在线OJ的UI自动化测试 测试一&#xff1a;检查未登录时的页面访问以及一些未登录时的非法操作 测试二&#xff1a;测试注册界面 测试三&#xff1a;测试登录界面 测试四&#xff1a;测试题目列表界面 测试五&#xff1a;测试题目详情界面…

【python】unindent does not match any outer indentation level错误的解决办法

【Python】"unindent does not match any outer indentation level"错误的解决办法 在Python编程中&#xff0c;缩进是定义代码块的关键。与其它编程语言使用花括号或特定关键字不同&#xff0c;Python完全依赖缩进来区分代码结构。如果你在编码时遇到了错误信息unin…

【C++进阶】深入STL之list:模拟实现深入理解List与迭代器

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;初步了解 list &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀STL之list &#x1f4d2;1. list…

源码、反码和补码

对于有符号数而言&#xff0c;原码就是一个数的二进制表示。二进制的最高位是符号位&#xff0c;0 表示正数&#xff0c;1 表示负数。 计算机用数的原码进行显示&#xff0c;数的计算和存储是用补码进行的。 正数的原码&#xff0c;反码和补码都一样&#xff0c;即正数三码合…

nomachine使用记录以及录包

录包命令&#xff1a; rosbag record 话题名字&#xff08;可以是原相机话题和执行程序的话题&#xff09;rosbag play 包名&#xff08;可以离线播放包的数据&#xff09; rqt_image_view 话题可视化

FileZilla:不安全的服务器,不支持 FTP over TLS 原因与解决方法

今天在用FileZilla Client连接某个主机的FTP的时候&#xff0c;主机地址、账号、密码、端口确定百分之百正确的情况下&#xff0c;结果报错如下&#xff1a; 状态: 正在解析 x.x.x 的地址 状态: 正在连接 x.x.x.x:21... 状态: 连接建立&#xff0c;等待欢迎消息... 状态: 不安全…

RHEL - 订阅、注册系统和 Yum Repository(新版界面)

《OpenShift / RHEL / DevSecOps 汇总目录》 演示环境说明 本文需要有 redhat.com 账号以及包含 RHEL 的有效订阅。 演示环境使用了通过 minimal 方式安装的 RHEL 7.6 环境&#xff0c;RHEL 可以访问互联网。 红帽网站 access.redhat.com 针对新用户提供了新版界面&#xff0…

建构信任基石:揭秘Web3的去中心化信任体系

在传统的互联网时代&#xff0c;信任往往建立在中心化的机构和第三方平台之上&#xff0c;而这种中心化的信任体系往往面临着数据泄露、信息滥用等问题。然而&#xff0c;随着区块链技术的发展&#xff0c;Web3时代正在向我们展示一种全新的信任体系&#xff0c;即去中心化的信…

离散数学---树

目录 1.基本概念及其相关运用 2.生成树 3.有向树 4.最优树 5.前缀码 1.基本概念及其相关运用 &#xff08;1&#xff09;无向树&#xff1a;连通而且没有回路的无向图就是无向树&#xff1b; 森林就是有多个连通分支&#xff0c;每个连通分支都是树的无连通的无向图&…

给Mac添加右键菜单「使用 VSCode 打开」的方法

用 macOS 系统的苹果电脑用户都知道&#xff0c;macOS 某些地方确实没 Windows 方便&#xff0c;比如右键菜单&#xff0c;没有复制粘贴之类的菜单&#xff0c;刚开始还有点使用不方便&#xff0c;今天我介绍两种方法来实现一个用右键通过 VSCode 打开文件和文件夹的方法&#…

day40--Redis(二)实战篇

实战篇Redis 开篇导读 亲爱的小伙伴们大家好&#xff0c;马上咱们就开始实战篇的内容了&#xff0c;相信通过本章的学习&#xff0c;小伙伴们就能理解各种redis的使用啦&#xff0c;接下来咱们来一起看看实战篇我们要学习一些什么样的内容 短信登录 这一块我们会使用redis共…

php探针代码怎么写

创建php文件并输入代码&#xff0c;访问文件查看php版本、环境和系统配置信息&#xff0c;可使用ini_set()函数定制输出&#xff0c;但注意在生产环境中使用时要注重安全&#xff0c;因为它会泄露敏感信息。 PHP探针代码撰写指南 PHP探针代码是一种脚本&#xff0c;可提供关于…

Qt/C++音视频开发76-获取本地有哪些摄像头名称/ffmpeg内置函数方式

一、前言 上一篇文章是写的用Qt的内置函数方式获取本地摄像头名称集合&#xff0c;但是有几个缺点&#xff0c;比如要求Qt5&#xff0c;或者至少要求安装了多媒体组件multimedia&#xff0c;如果没有安装呢&#xff0c;或者安装的是个空的呢&#xff0c;比如很多嵌入式板子&am…

C语言小例程10/100

题目&#xff1a;要求输出国际象棋棋盘。 程序分析&#xff1a;国际象棋棋盘由64个黑白相间的格子组成&#xff0c;分为8行*8列。用i控制行&#xff0c;j来控制列&#xff0c;根据ij的和的变化来控制输出黑方格&#xff0c;还是白方格。 #include<stdio.h>int main() {…

SAP 服务提供者 (Services Provider)接口测试笔记

文章目录 SAP 服务提供者 &#xff08;Services Provider&#xff09;接口测试笔记设置Content-Type授权SAP接口测试-SoapUI参数配置 SAP 服务提供者 &#xff08;Services Provider&#xff09;接口测试笔记 现在我在SAP里面公布了一些查询接口&#xff0c;现在就是要用SoapU…

【AIGC+CAD】革新建筑、室内设计与建模领域的GenAI产品

一、产品定位 Augrade,一款专为建筑、室内设计和建模行业打造的AI CAD自动化工具。它凭借先进的AI技术,将2D蓝图迅速转化为精确的3D CAD模型,同时提供设计、成本分析的自动化以及全面的文档生成服务。Augrade致力于简化设计流程,确保技术可行性,并促进跨团队、跨工具的协…

Java Web学习笔记19——Ajax介绍

Ajax: 概念&#xff1a;Asynchronous JavaScript And XML 异步的JavaScript和XML。 作用&#xff1a; 1&#xff09;数据交换&#xff1a;通过Ajax可以给服务器发送请求&#xff0c;并获得服务器的响应数据。 2&#xff09;异步交互&#xff1a;可以在不重新加载页面的情况…