iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0
AI & Data

感知你的動作與情緒:深度學習在人機互動的應用系列 第 6

Day 6 | 語音辨識控制開關燈實作:用 CNN 讓燈光聽懂你的話

  • 分享至 

  • xImage
  •  

前言

當我們說出「開燈」的瞬間,腦中其實已經構築了一個期望 —— 我希望燈亮起來,而不是只是被「聽見」。

這正是語音互動設計的核心:語音不只是輸入,還必須驅動回應。

今天,我們就來實作一個最小可行語音互動系統(MVP)
👉🏻 使用 CNN 模型辨識「開燈」和「關燈」語音指令,並用 print() 模擬控制燈光的行為!


系統架構與流程

模組 功能說明
語音輸入 使用 Google Speech Commands 的 on / off 指令
音訊處理 將語音波形轉為梅爾頻譜圖(MelSpectrogram)
CNN 模型 分類語音為 onoff
控制邏輯 使用 print() 輸出「燈亮起來了!」或「燈熄滅了...」

語音資料來源

本專案採用 Google 開源的 Speech Commands Dataset

  • 包含數十種語音指令(如:yes, no, stop, go, on, off 等)
  • 每筆資料為 1 秒 .wav 聲音檔,採樣率 16kHz
  • 多人錄音,增加泛化能力

我們將挑選其中的 onoff ,分別代表「開燈」與「關燈」指令。


特徵工程

CNN 模型對圖像敏感,因此我們會將聲音波形轉換成 梅爾頻譜圖(Mel Spectrogram),讓聲音變成一張圖片:

如下圖所示:

import torchaudio
import matplotlib.pyplot as plt

waveform, sr = torchaudio.load("on.wav")
mel = torchaudio.transforms.MelSpectrogram()(waveform)

plt.figure(figsize=(10, 4))
plt.imshow(mel.log2()[0].numpy(), cmap='viridis', aspect='auto')
plt.title("Mel Spectrogram of 'on'")
plt.xlabel("Time")
plt.ylabel("Mel Frequency")
plt.colorbar()
plt.show()

CNN 模型設計與訓練

以下為模型架構,經資料增強後進行訓練,最終在測試集達到 94.45% 的準確率:

import torch.nn as nn

class CNNClassifier(nn.Module):
    def __init__(self):
        super().__init__()
        self.net = nn.Sequential(
            nn.Conv2d(1, 16, kernel_size=3),
            nn.ReLU(),
            nn.MaxPool2d(2),
            nn.Conv2d(16, 32, kernel_size=3),
            nn.ReLU(),
            nn.MaxPool2d(2),
            nn.Flatten(),
            nn.Linear(32 * 14 * 14, 64),
            nn.ReLU(),
            nn.Linear(64, 2) 
        )

    def forward(self, x):
        return self.net(x)

控制邏輯模擬(print 實作)

def control_light(pred_label):
    if pred_label == 1:
        print("燈亮起來了!")
    elif pred_label == 0:
        print("燈熄滅了...")
    else:
        print("無法辨識的指令")

y_pred = model(mel_tensor.unsqueeze(0).to(device))
pred_label = torch.argmax(y_pred, dim=1).item()
control_light(pred_label)

輸出:
https://ithelp.ithome.com.tw/upload/images/20250908/20178436IHJ0WTifpS.png

成效評估

模型訓練後的測試結果:

✅ Test Accuracy:94.45%
✅ 混淆矩陣如下:
Confusion Matrix:
[[374 6]
[ 20 300]]

✅ 分類報告:

precision recall f1-score support
off 0.94 0.96 0.95 165
on 0.94 0.92 0.93 207
accuracy 0.94 372

結語

這是一個從 語音資料 → CNN 模型 → 控制回應 簡單的 print() 語音控制開關燈的實作,雖然只是 HCI × Deep Learning 世界中的一個小實驗,卻象徵著智慧互動將不再侷限於滑鼠與螢幕,而是更貼近我們的語言與感官。

你是否也開始想像,下一個用語音控制的對象會是什麼?


上一篇
Day 5 | 打造語音助理第一步:LSTM 處理語音序列
系列文
感知你的動作與情緒:深度學習在人機互動的應用6
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言