From 1ce7d6fc588b730ff77bef63e34c7a6d533c996b Mon Sep 17 00:00:00 2001 From: 51hhh Date: Fri, 29 Aug 2025 14:13:04 +0800 Subject: [PATCH] =?UTF-8?q?[MF]=E4=BF=AE=E6=94=B9=E4=B8=8D=E4=BD=BF?= =?UTF-8?q?=E7=94=A8CDN=E5=8A=A0=E8=BD=BD=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + doc/音频检测/READMENEW.md | 120 ++++++++++++++++++++++++++++++ doc/音频检测/音频模型训练界面.png | Bin 0 -> 68992 bytes game/贪吃蛇/snake_game.html | 79 ++++++++++---------- 4 files changed, 160 insertions(+), 40 deletions(-) create mode 100644 .gitignore create mode 100644 doc/音频检测/READMENEW.md create mode 100644 doc/音频检测/音频模型训练界面.png diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a53d962 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.mp4 \ No newline at end of file diff --git a/doc/音频检测/READMENEW.md b/doc/音频检测/READMENEW.md new file mode 100644 index 0000000..9d172bb --- /dev/null +++ b/doc/音频检测/READMENEW.md @@ -0,0 +1,120 @@ +# **音频模型训练:声音分类器** 👂🎤 + +你好!欢迎来到这篇音频模型训练教程。在本教程中,我将手把手带你创建一个机器学习模型,用来识别不同的声音。你可以将其应用于任何需要区分特定声音的场景。 + +## 如何训练模型:从零开始构建你的分类器 + +### **步骤1:了解声音分类模型** + +在开始训练之前,我们需要了解声音分类模型的基本原理。模型的工作原理类似于人类学习识别声音:当听到一种声音时,我们会记住它的特征,并在下次听到类似声音时进行匹配。 + +#### **1.1 声音特征提取** + +当声音进入麦克风,它会转化为数字信号。我们的AI通过处理这些信号,生成**频谱图**(Spectrogram)。声谱图是声音的视觉表示,它通过颜色和图案展示了声音的音高、响度、持续时间等关键信息。AI通过识别声谱图上的独特模式来区分不同的声音。 + +#### **1.2 迁移学习与预训练模型** + +为了提高训练效率,我们采用**迁移学习**。这意味着我们不会从零开始训练模型,而是利用一个已经在大规模音频数据集上进行过预训练的“听音教授”——**Speech Commands 模型**。 +这个预训练模型已经学会了识别日常声音和口令词,并特别内置了对**“背景噪音” (`_background_noise_`)** 的理解。因此,训练过程的关键在于: + +* **识别背景噪音:** 首先让模型学习你所在环境的背景噪音,以便它能区分目标声音和环境杂音。 +* **识别自定义声音:** 在预训练模型的基础上,向它提供你想要识别的特定声音样本,模型将快速学习并区分这些新声音。 + +#### **1.3 KNN分类** + +在提取出声音的特征后,模型使用**K-近邻算法(KNN)**进行分类。它会将当前接收到的声音特征与所有已学习的特征进行比较,找到最相似的匹配项,从而判断当前声音的类别。 + +### **步骤2:创建项目与收集学习样本** + +现在,让我们开始在网站上操作,创建并训练你的声音分类模型。 + +音频模型训练界面 + + +在页面上,你会看到几个主要区域:**状态信息**、**背景噪音录制**、**自定义类别管理**、**模型控制**和**预测结果显示**。 + +#### **2.1 录制背景噪音** + +这是非常关键的第一步。为了让模型更好地识别目标声音,它需要先学习你所处环境的“无意义”声音。 + +* 找到“**🤫 1. 录制背景噪音**”区域。 +* 保持周围环境安静,不要发出你计划训练的特定声音。 +* 点击“**录制样本**”按钮(背景噪音的按钮通常是红色或特别标记的)。 +* 系统会自动为你录制几段背景噪音。你会看到“样本数量”在增加。 + + + +* _小贴士:_ 确保录制时不要发出目标声音。建议录制 5-10 个样本以获得更好的效果。 + +#### **2.2 录制自定义声音类别样本** + +接下来,为模型提供你想要识别的自定义声音样本。 + +* **添加新类别:** 在“**🗣️ 2. 录制您要分类的声音**”下方的输入框中,输入你想要识别的声音的名称(例如“拍手”、“吹口哨”、“开始”、“停止”)。然后点击“**添加类别**”按钮。 +* 一个新的类别块将会出现,其中包含“样本数量”和“录制样本”按钮。 +* **为每个类别录制样本:** + * 选择一个你刚创建的类别。 + * 每次点击“**录制样本**”按钮,发出该类别的声音一次。例如,如果你创建了“拍手”类别,就对着麦克风拍一次手。 + * 系统会自动帮你录制多段样本。你会看到对应类别的“样本数量”在增加。 + + +* _小贴士:_ 尝试从不同强度、不同方式发出同一个声音,让模型学习到更丰富的特征。每个类别至少录制 5-10 个样本效果最好。 +* 重复以上步骤,添加并录制所有你想要识别的声音类别。 + +### **步骤3:训练模型** + +当所有类别的样本(包括背景噪音)都准备好后,即可开始模型训练。 + +* 点击“**🚀 3. 训练模型**”按钮。 +* “状态”区域将显示模型的训练进度(例如“训练 Epoch 1/50”)。此过程可能需要一些时间,具体取决于样本数量和网络速度。 + + + +* 请耐心等待。当“状态”显示“模型训练完成!”时,表示模型已完成训练。 + +### **步骤4:开始识别并测试模型** + +训练完成后,你可以立即测试模型的效果。 + +* 点击“**👂 4. 开始识别**”按钮。 +* 对着麦克风发出你训练过的声音,或者保持安静(让它识别背景噪音)。 +* 模型会即时显示识别结果,包括识别到的声音类别和置信度(例如:“预测结果:拍手 (置信度: 98%)”)。 + + +* 测试完成后,点击“**⏸️ 停止识别**”按钮暂停识别。 + +## 值得尝试的事:探索模型的局限性 + +现在模型可以工作了,你可以测试它的效果——更有趣的是,去**找到它无法正常工作的边界**。尝试找到机器学习的极限所在! + +**思考一下:** 对于计算机来说,声音只是一堆数字信号的排列组合。所以,你并没有真正教会计算机什么是“拍手”,你只是教会了它:这个特定频率、特定时长的声音(在某个背景下)被标记为“拍手”——对计算机来说,它看到的仅仅是声谱图的像素而已。 + +### **案例1:模型识别错误怎么办?** + +* 如果模型判断错误,这可能意味着采集的样本不足、不够清晰或不够多样化。 +* **尝试:** 重新选择判断错误的类别,补充更多样本,特别是那些与易混淆声音相似的样本。 + +### **案例2:样本数量对模型性能的影响** + +* **思考题:** 如果我只为每个声音类别采集一个样本,模型能学会吗?(答案:通常很难。模型需要多样的样本来学习其泛化能力。) +* **你可以尝试:** 分别使用少量(例如每个类别 3-5 个)和大量(例如每个类别 20-30 个)样本训练模型,并对比它们的识别准确率。你可能会发现一个有趣的规律。 + +### **案例3:尝试不同的场景和声音变化** + + +* **测试:** 尝试用不同的口音、语速或距离对着麦克风发出指令,观察模型识别的稳定性。 +* **环境噪声:** 在嘈杂的环境下测试模型,看它是否还能准确区分你的指令。 +* **“欺骗”模型:** 尝试播放一段与你训练的声音相似但并非你训练过的录音,看看模型如何反应。思考如何训练它,使其不会混淆。 + +## 你能用它做什么? + +你可以导出你训练好的模型,用它来做一些有趣的事情! + +我制作了一个[实时分类器](https://dev-daily.goood.space/),你可以把自己训练的模型导入来进行实时预测,看看它的实际应用效果! + +## 现在做什么? + +* **立刻开始创建你自己的声音识别模型吧!** 探索人工智能的奥秘! +* 或者,你也可以阅读我们的其他教程: + * [如何制作图像模型教程]() + * [如何制作姿势模型教程]() \ No newline at end of file diff --git a/doc/音频检测/音频模型训练界面.png b/doc/音频检测/音频模型训练界面.png new file mode 100644 index 0000000000000000000000000000000000000000..efa3d7354a07898250c0e59e818c23f4c0e8f01e GIT binary patch literal 68992 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óbHz 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

姿态控制说明

    -
  • 向上: 双手举过头顶 (分类0)
  • -
  • 向下: 双手放在身体两侧或下垂 (分类1)
  • -
  • 向左: 左手平举 (分类2)
  • -
  • 向右: 右手平举 (分类3)
  • -
  • 静止: 无特定动作 (游戏开始前/结束后姿态)
  • +
  • 向上: 双手举过头顶 (class1)
  • +
  • 向下: 双手两侧下垂 (class2)
  • +
  • 向左: 左手平举 (class3)
  • +
  • 向右: 右手平举 (class4)

(确保在摄像头画面中能清晰识别全身)

@@ -565,31 +564,31 @@ - // 自动加载模型 - const cdnModelJsonUrl = 'https://goood-space-assets.oss-cn-beijing.aliyuncs.com/public/models/pose-knn-model.json'; + // // 自动加载模型 + // const cdnModelJsonUrl = 'https://goood-space-assets.oss-cn-beijing.aliyuncs.com/public/models/pose-knn-model.json'; - try { - await loadKNNModelData(null, cdnModelJsonUrl); // 传入 CDN URL, file 为 null - statusDisplay.textContent = 'CDN 姿态识别模型加载成功!可以开始游戏了。'; - isModelLoaded = true; // 标记模型已加载 - startBtn.disabled = false; // 启用开始游戏按钮 - updateGameStatus('ready'); // 更新游戏状态 - } catch (cdnError) { - console.warn('CDN KNN 模型数据自动加载失败:', cdnError); - statusDisplay.textContent = `CDN 模型加载失败: ${cdnError.message}。请手动导入模型。`; - isModelLoaded = false; // 标记模型未加载 - startBtn.disabled = true; // 模型未加载,开始按钮仍禁用 - importModelBtn.disabled = false; // 允许手动导入 - updateGameStatus('initial'); // 保持初始状态 - } - // --- 结束 CDN 自动加载 --- + // try { + // await loadKNNModelData(null, cdnModelJsonUrl); // 传入 CDN URL, file 为 null + // statusDisplay.textContent = 'CDN 姿态识别模型加载成功!可以开始游戏了。'; + // isModelLoaded = true; // 标记模型已加载 + // startBtn.disabled = false; // 启用开始游戏按钮 + // updateGameStatus('ready'); // 更新游戏状态 + // } catch (cdnError) { + // console.warn('CDN KNN 模型数据自动加载失败:', cdnError); + // statusDisplay.textContent = `CDN 模型加载失败: ${cdnError.message}。请手动导入模型。`; + // isModelLoaded = false; // 标记模型未加载 + // startBtn.disabled = true; // 模型未加载,开始按钮仍禁用 + // importModelBtn.disabled = false; // 允许手动导入 + // updateGameStatus('initial'); // 保持初始状态 + // } + // // --- 结束 CDN 自动加载 --- updateGameUI(); // 确保 UI 在初始化结束时更新一次 } catch (error) { console.error("应用初始化失败:", error); statusDisplay.textContent = `初始化失败: ${error.message}`; - alert(`应用初始化失败: ${error.message}\n请检查摄像头权限、网络连接或刷新页面。`); + // alert(`应用初始化失败: ${error.message}\n请检查摄像头权限、网络连接或刷新页面。`); updateGameStatus('initial'); } } @@ -618,7 +617,7 @@ resolve(); }).catch(reject); }; - setTimeout(() => reject(new Error('摄像头元数据加载或播放超时')), 10000); + // setTimeout(() => reject(new Error('摄像头元数据加载或播放超时')), 10000); }); } catch (error) { if (error.name === 'NotAllowedError') { @@ -842,22 +841,22 @@ // 更新页面上的映射显示,如果需要的话。 // 确保 instructions 中的分类名称与 importedClassNames 保持一致 - const instructionListItems = document.querySelectorAll('.instructions li'); - instructionListItems.forEach((item, index) => { - const classId = String(index); // 假定指令顺序与分类ID一致 - const classNameFromModel = importedClassNames[classId] || '未定义'; - let controlDesc = ''; - switch(classId) { - case '0': controlDesc = '双手举过头顶'; break; - case '1': controlDesc = '双手放在身体两侧或下垂'; break; - case '2': controlDesc = '左手平举'; break; - case '3': controlDesc = '右手平举'; break; - default: controlDesc = '未知动作'; - } - item.querySelector('span').innerHTML = `${controlDesc} (分类${classId}: ${classNameFromModel})`; - // 如果你的 instructions 区域已经有预设的文字,并且你只希望更新 Classification ID, - // 可以根据 HTML 结构微调这里的更新逻辑。 - }); + // const instructionListItems = document.querySelectorAll('.instructions li'); + // instructionListItems.forEach((item, index) => { + // const classId = String(index); // 假定指令顺序与分类ID一致 + // const classNameFromModel = importedClassNames[classId] || '未定义'; + // let controlDesc = ''; + // switch(classId) { + // case '0': controlDesc = '双手举过头顶'; break; + // case '1': controlDesc = '双手放在身体两侧或下垂'; break; + // case '2': controlDesc = '左手平举'; break; + // case '3': controlDesc = '右手平举'; break; + // default: controlDesc = '未知动作'; + // } + // item.querySelector('span').innerHTML = `${controlDesc} (分类${classId}: ${classNameFromModel})`; + // // 如果你的 instructions 区域已经有预设的文字,并且你只希望更新 Classification ID, + // // 可以根据 HTML 结构微调这里的更新逻辑。 + // }); statusDisplay.textContent = '姿态模型导入成功!可以开始游戏了。';