Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Trang Chủ Hướng Dẫn Đồ Án Phân loại âm thanh đơn giản bằng Python
Hướng Dẫn Đồ ÁnLập Trình AI

Phân loại âm thanh đơn giản bằng Python

Chia sẻ
Chia sẻ

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.

Tham Gia Nhóm – Hỗ Trợ Lập Trình

Hỗ Trợ Đồ Án – ThueDoAn.vn

Liên quan
Hướng Dẫn Đồ Án

Checklist 10 bước kiểm tra cuối cùng trước khi nhấn nút nộp đồ án

Thời điểm chuẩn bị nhấn nút nộp đồ án luôn mang lại...

Hướng Dẫn Đồ Án

Tuyệt chiêu đối phó với những giảng viên hướng dẫn ‘khó tính’ nhất

Giai đoạn làm đồ án tốt nghiệp luôn đi kèm với vô...

Hướng Dẫn Đồ Án

Tại sao việc quản lý Source Code bằng Git lại quan trọng hơn bạn nghĩ?

Trong thế giới lập trình hiện đại, mã nguồn chính là linh...

Hướng Dẫn Đồ Án

Những chức năng ‘thừa’ khiến bạn tốn thời gian mà không được cộng điểm

Làm đồ án tốt nghiệp là một cuộc đua thực thụ với...

Hướng Dẫn Đồ Án

Cách xử lý khi đề tài bị trùng lặp ý tưởng với các khóa trước quá nhiều

Lựa chọn đề tài đồ án luôn là bước khởi đầu đầy...

Hướng Dẫn Đồ Án

Làm sao để giải trình với giảng viên khi code bị nghi ngờ là đi chép?

Trong quá trình thực hiện đồ án, việc tham khảo mã nguồn...

Hướng Dẫn Đồ Án

Cảnh báo: Những nguồn share code ‘rác’ trên mạng cần tuyệt đối tránh

Trong quá trình làm đồ án, việc tìm kiếm sự hỗ trợ...

Hướng Dẫn Đồ Án

Sai lầm khi chọn công nghệ quá khó so với năng lực thực tế của bản thân

Chọn đề tài và công nghệ cho đồ án luôn là bước...

Liên Hệ
Liên hệ để được tư vấn & hỗ trợ đồ án CNTT nhé bạn!