Phân loại âm thanh đơn giản bằng Python là một bài toán hay trong lĩnh vực AI, giúp chúng ta phân biệt các loại âm thanh môi trường như tiếng còi xe, chó sủa, khoan… Mô hình này rất hữu ích cho các ứng dụng như giám sát môi trường hoặc hệ thống cảnh báo tự động.
Nếu bạn từng học về phát hiện tiếng nói bất thường bằng AI hay tách người khỏi ảnh nền, thì việc phân loại âm thanh đơn giản sẽ mở rộng kiến thức của bạn sang lĩnh vực xử lý tín hiệu âm thanh, nơi bạn sẽ học cách trích xuất đặc trưng từ file .wav và nhận diện âm thanh chỉ bằng vài dòng Python.
Tập dữ liệu sử dụng
Chúng ta sẽ dùng dataset UrbanSound8K, gồm 8732 clip âm thanh ≤4s thuộc 10 lớp như car_horn, dog_bark, siren, drilling… Đây là bộ dữ liệu chuẩn để thực hành phân loại âm thanh đơn giản.
📥 Link chính xác tải dataset: UrbanSound8K – Kaggle
Dataset gốc: https://urbansounddataset.weebly.com/urbansound8k.html
Nạp dữ liệu và trích xuất đặc trưng
Để phân loại âm thanh, chúng ta cần chuyển file .wav thành tập đặc trưng số học. MFCC (Mel‑frequency cepstral coefficients) là thuật toán phổ biến giúp trích xuất thông tin tần số quan trọng từ một đoạn âm. Phương pháp này đơn giản và hiệu quả cho phân loại âm thanh đơn giản bằng Python.
Dữ liệu sẽ được đọc và tiền xử lý lần lượt qua từng file, biến mỗi clip thành một vector đặc trưng dễ sử dụng cho mô hình học máy.
import os, librosa, numpy as np, pandas as pd
from sklearn.model_selection import train_test_split
metadata = pd.read_csv('UrbanSound8K/metadata/UrbanSound8K.csv')
X, y = [], []
for _, row in metadata.iterrows():
path = os.path.join('UrbanSound8K/audio', f"fold{row['fold']}", row['slice_file_name'])
try:
audio, sr = librosa.load(path, duration=4)
mfcc = librosa.feature.mfcc(y=audio, sr=sr, n_mfcc=40)
X.append(np.mean(mfcc.T, axis=0))
y.append(row['classID'])
except:
continue
X, y = np.array(X), np.array(y)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Xây dựng mô hình phân loại âm thanh
Chúng ta sẽ dùng mạng nơ‑ron MLP để phân loại âm thanh. Với 40 đặc trưng MFCC đầu vào và 10 lớp đầu ra, mô hình đơn giản nhưng đủ mạnh để phân loại âm thanh cơ bản. Việc thêm dropout giúp giảm overfitting, đặc biệt khi dữ liệu đa dạng như UrbanSound8K.
Mô hình này phù hợp cho các bài tập phân loại âm thanh đơn giản bằng Python mà không cần dùng đến mạng CNN phức tạp.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout
model = Sequential([
Dense(256, activation='relu', input_shape=(40,)),
Dropout(0.3),
Dense(128, activation='relu'),
Dropout(0.3),
Dense(10, activation='softmax')
])
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.summary()
Huấn luyện và đánh giá mô hình
Huấn luyện mô hình trên tập huấn luyện và kiểm tra trên tập kiểm tra sẽ cho bạn biết độ chính xác thực tế. Việc theo dõi quá trình qua biểu đồ accuracy/validation giúp bạn nhận biết sớm các vấn đề như overfitting hoặc underfitting.
Điều này rất quan trọng khi xây dựng hệ thống phân loại âm thanh đơn giản bằng Python – bạn cần kiểm tra kỹ càng hiệu quả và độ ổn định của mô hình.
history = model.fit(X_train, y_train, epochs=30, batch_size=32, validation_data=(X_test, y_test))
loss, acc = model.evaluate(X_test, y_test)
print(f"Accuracy trên tập test: {acc*100:.2f}%")
Dự đoán âm thanh mới
Nhập một file âm thanh mới, trích xuất MFCC và cho vào mô hình để xem dự đoán. Đây là bước quan trọng để kiểm tra mô hình trong điều kiện thực tế và cũng là cách bạn thử nghiệm thuật toán phân loại âm thanh đơn giản bằng Python ngay trên máy của mình.
Ví dụ, bạn có thể thử phân loại tiếng còi xe hoặc người vỗ tay từ clip tự quay để kiểm tra hiệu quả mô hình.
def predict_audio(file_path):
audio, sr = librosa.load(file_path, duration=4)
mfcc = librosa.feature.mfcc(y=audio, sr=sr, n_mfcc=40)
vec = np.mean(mfcc.T, axis=0).reshape(1, -1)
pred = np.argmax(model.predict(vec))
label = metadata.loc[metadata['classID'] == pred, 'class'].values[0]
print("Dự đoán:", label)
predict_audio('test_clip.wav')
Kết luận
Bạn vừa hoàn thiện một hệ thống phân loại âm thanh đơn giản bằng Python: từ xử lý MFCC đến huấn luyện mô hình TensorFlow. Đây là cơ sở để bạn mở rộng về nhận diện giọng nói, phát hiện tiếng la hét, hoặc ứng dụng AI trong môi trường thực.
Bạn có thể nâng cấp bằng cách dùng CNN xử lý spectrogram, hoặc chuyển sang RNN để phân tích âm thanh dài hơn cho bài toán phức tạp.

