猿でもわかるAIプログラミングシリーズ 🐵💻 音声認識AIで「こんにちは」を判定する


## 1. はじめに：音声の世界に飛び込もう

最近、スマートスピーカーやチャットボットなど、音声で操作できるデバイスが急増しています。「OK Google」や「Hey Siri」に慣れている私たちですが、**それらの裏側にある技術がどうやって音声を理解しているのか**、気になったことはありませんか？

本記事では、Pythonとオープンソースライブラリを使って、**音声から「こんにちは」という単語を検出するAIモデル**を一から構築してみます。

> 「えっ、難しそう...」と思った方もご安心を。
> コード付き・画像付きで解説していきますので、**初心者エンジニアでも“今すぐ”試せます！**

---

## 2. 音声認識AIとは？簡単に背景をつかむ

音声認識（Speech Recognition）とは、人間の音声をデジタル信号として受け取り、それをテキストに変換する技術です。

### ざっくりフロー：

```
マイク入力 → 音声波形 → 特徴量抽出（MFCCなど） → モデル推論 → テキスト出力
```

### 今回使う主な技術・ライブラリ：

| ライブラリ                | 用途               |
| -------------------- | ---------------- |
| `speech_recognition` | 音声入力の処理          |
| `pyaudio`            | マイクからリアルタイムで音声取得 |
| `scikit-learn`       | モデル学習・分類         |
| `librosa`            | 音声前処理・特徴量抽出      |

---

## 3. 実装ステップ：「こんにちは」を聞き分けるAIを構築

### 📦 3.1 必要ライブラリのインストール

```bash
pip install speechrecognition pyaudio librosa scikit-learn numpy matplotlib
```

※ `pyaudio`がインストールできない場合は、[こちらの手順](https://qiita.com/yuji38kwmt/items/76b9c97108b28b1c3c23)を参照ください。

---

### 🎙️ 3.2 音声データの収集

まず、`「こんにちは」`と`「それ以外」`の音声データを録音してフォルダに保存します。

```python
import sounddevice as sd
from scipy.io.wavfile import write

def record_voice(filename, duration=3, fs=16000):
    print("Recording...")
    recording = sd.rec(int(duration * fs), samplerate=fs, channels=1)
    sd.wait()
    write(filename, fs, recording)
    print(f"Saved: {filename}")

# 例: record_voice("hello.wav")
```

---

### 🔍 3.3 特徴量抽出（MFCC）

```python
import librosa
import numpy as np

def extract_mfcc(file_path):
    y, sr = librosa.load(file_path)
    mfcc = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=13)
    return np.mean(mfcc.T, axis=0)
```

---

### 🤖 3.4 モデル学習（SVM）

```python
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 音声ファイルとラベルの準備
files = ['data/konnichiwa_1.wav', 'data/other_1.wav', ...]
labels = [1, 0, ...]  # 1: こんにちは, 0: その他

X = [extract_mfcc(f) for f in files]
y = labels

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
model = SVC(kernel='linear')
model.fit(X_train, y_train)

print("Accuracy:", accuracy_score(y_test, model.predict(X_test)))
```

---

### 🎧 3.5 実際に判定してみよう

```python
def predict_file(file_path, model):
    feature = extract_mfcc(file_path).reshape(1, -1)
    pred = model.predict(feature)
    return "こんにちはです！" if pred[0] == 1 else "違います。"

# 使用例:
print(predict_file("your_voice.wav", model))
```

---

## 4. 実践TIPS：ハマりポイントと回避法

### ❌ よくあるトラブルとその対策

| 問題         | 原因            | 対処法                |
| ---------- | ------------- | ------------------ |
| 音声が認識されない  | ノイズ多い / 音量小さい | 静かな環境で録音、録音時間を長くする |
| 学習精度が低い    | データ数不足 / 偏り   | できるだけ多様な話者・発音で録音する |
| SVMモデルが過学習 | 特徴量が多すぎ       | PCAで次元削減する、正則化を試す  |

---

## 5. 応用編：「こんにちは」だけじゃない！

本記事では「こんにちは」の検出だけを扱いましたが、同じ手法で以下の応用も可能です：

* 音声コマンドで家電操作（「電気つけて」など）
* 感情認識（怒ってる？楽しそう？）
* キーワード検出（Wake word detection）
* 音声データをクラウドに送信 → AI推論 → Webで可視化

また、ディープラーニングを活用するなら`TensorFlow`や`HuggingFace Transformers`と組み合わせた高度な音声モデルも構築可能です。

---

## 6. まとめ：音声認識AIは意外と身近！

### ✅ 本記事のまとめ：

* 音声認識の基礎と処理の流れを学んだ
* Pythonで「こんにちは」を判定する簡易AIを作成
* 現場で使えるTipsや応用展開も紹介

音声処理は「ややこしそう」に見えるかもしれませんが、**一度触れてみると意外とシンプル**です。そして、業務への応用範囲も広く、UX改善や業務自動化にもつながります。

> **ぜひこの週末、マイク片手に「こんにちはAI」を作ってみてください！🎤🐵**

---

## 🔗 付録：参考リンク

* [librosa documentation](https://librosa.org/)
* [scikit-learn公式サイト](https://scikit-learn.org/)
* [音声処理の基礎まとめ（Qiita）](https://qiita.com/tags/音声認識)