当前位置: 首页 > news >正文

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

相关文章:

  • 使用Python创建Word文档
  • AI绘画中的图像格式技术
  • 轻松连接远程服务器SecureCRT for Mac/Windows
  • 计算机视觉与深度学习实战,Python工具,多尺度形态学提取眼前节
  • ethercat igh可能出现的两个bug
  • 使用 Docker Compose 编排 Django 应用
  • 文件属性与目录
  • Word忘记保存?请使用Word隐藏备份文件
  • 四十二、openlayers官网示例Flight Animation扩展——在地图上绘制飞机航线、飞机随航线飞行效果
  • 【C++进阶】深入STL之list:模拟实现深入理解List与迭代器
  • 【高频】什么是索引的下推和覆盖
  • 什么是Docker ?
  • Oracle作业调度器Job Scheduler
  • 【纯血鸿蒙】——响应式布局如何实现?
  • C++多线程同步总结
  • angular组件开发
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • ES6系列(二)变量的解构赋值
  • javascript 总结(常用工具类的封装)
  • js对象的深浅拷贝
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • node入门
  • 诡异!React stopPropagation失灵
  • 简单易用的leetcode开发测试工具(npm)
  • 如何胜任知名企业的商业数据分析师?
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #1015 : KMP算法
  • #define 用法
  • (10)ATF MMU转换表
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (3)llvm ir转换过程
  • (vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (四)linux文件内容查看
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (算法设计与分析)第一章算法概述-习题
  • (小白学Java)Java简介和基本配置
  • (学习总结)STM32CubeMX HAL库 学习笔记撰写心得
  • (一)VirtualBox安装增强功能
  • (原)本想说脏话,奈何已放下
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .NET Reactor简单使用教程
  • .NET 读取 JSON格式的数据
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)