# 浏览器音频分类器 (背景噪音分离增强版)

## 简介

这个项目是一个基于浏览器的音频分类器，它利用 TensorFlow.js 和 Speech Commands 模型，可以识别用户自定义的声音类别。**与传统音频分类器不同的是，此版本特别强调了背景噪音的分离和处理，从而提升分类准确率。**

此应用允许用户：

1.  **录制背景噪音样本：**  用于训练模型，区分目标声音和环境噪音。
2.  **添加自定义声音类别：**  例如 "拍手"、"响指"、"警告音" 等。
3.  **录制自定义声音样本：**  用于训练模型，识别特定声音。
4.  **训练模型：**  使用录制的背景噪音和自定义声音数据，训练分类模型。
5.  **实时识别：**  使用训练好的模型，实时识别麦克风输入的声音类别。


## 特性

*   **背景噪音分离：** 通过录制和学习背景噪音，提高分类器在嘈杂环境中的准确性。
*   **自定义类别：** 用户可以根据自己的需求添加和训练任意声音类别。
*   **实时识别：**  模型训练完成后，可以立即进行实时声音识别。
*   **浏览器端运行：**  所有处理都在浏览器端完成，无需服务器支持。
*   **用户友好的界面：**  简单直观的界面，易于操作和使用。

## 技术栈

*   **TensorFlow.js:**  用于在浏览器端运行机器学习模型。
*   **Speech Commands Model:**  TensorFlow.js 提供的预训练语音命令模型，用于迁移学习。

## 快速上手

建议使用live server插件开启本地服务器，并访问voice.html文件。

**注：直接打开index.html文件会需要重复授权麦克风权限，请使用live server插件开启本地服务器可以解决**


## 提取主要功能
audioClassifier.js文件中主要实现了以下功能：

*   录制背景噪音样本：通过录制音频文件，将其转换成频谱图，并传入模型进行训练。
*   训练模型：将背景噪音样本和自定义声音样本合并，并训练模型。
*   实时识别：实时从麦克风输入音频，将其转换成频谱图，并传入模型进行识别。

## 目录结构

```
.
├── README.md
├── script.js
├── voice.html
├── audioClassifier.js
├── speech-commands(js文件仓库,不需要关注)
│   └── ...
└──
```




## 音频切片
TODO

需要查看speech-commands接口实现传入`collectExample`

.\speech-commands\src\browser_fft_recognizer.ts
  667,9:   async collectExample(word: string, options?: ExampleCollectionOptions):

现在实现的方法是调用`collectExample`方法，传入`word`参数，然后会自动录制音频文件，统一码率，生成频谱图，传入模型，并没有给出可以直接传入音频接口。

**如果需要实现一次性录制，需要实现手动将音频文件转换成频谱图，传入模型。**

目录下speech-commands文件夹是导入的`https://cdn.jsdelivr.net/npm/@tensorflow-models/speech-commands@latest/dist/speech-commands.min.js`js文件仓库