1.Hãy xây dựng/sưu tầm một bộ dữ liệu gồm ít nhất ...

Tạo vào: 7 tháng 5, 2026

Trả lời bằng GPT-5.5 Thinking bởi Chat01

Câu hỏi

train_metadata.csv
search_birds.py
build_db.py
data.py

1.Hãy xây dựng/sưu tầm một bộ dữ liệu gồm ít nhất 500 files âm thanh về tiếng chim, các file có độ dài phù hợp để trích xuất các đặc trưng của tiếng chim (SV tùy chọn định dạng file âm thanh).
2.Hãy xây dựng một bộ thuộc tính để nhận diện tiếng chim hót của các file âm thanh khác nhau từ bộ dữ liệu đã thu thập. Trình bày cụ thể về lý do lựa chọn và giá trị thông tin của các thuộc tính này.
3. Xây dựng hệ CSDL để quản trị các siêu dữ liệu và trình bày cơ chế tìm kiếm tiếng chim hót dựa trên các siêu dữ liệu này.
4. Xây dựng hệ thống tìm kiếm tiếng chim với đầu vào là một file âm thanh mới của một loài chim nào đó (loài đã có và không có trong dữ liệu), đầu ra là 5 files giống nhất, xếp thứ tự giảm dần về độ tương đồng với âm thanh đầu vào.
a.Trình bày sơ đồ khối của hệ thống và quy trình thực hiện yêu cầu của đề bài.
b.Trình bày Các kết quả trung gian của quá trình tìm kiếm tiếng chim.
5.Demo hệ thống và đánh giá kết quả đã đạt được.
đây là yêu cầu của giảng viên
hãy đọc các file trong dự án của tôi và tổng quan lại dự án, nếu ra tôi làm được những gì và bây giờ cần thêm gì, nhiệm vụ trong nhóm của tôi là phần 4b và 5

Python

python
import pandas as pd, os, json, textwrap, numpy as np path='/mnt/data/train_metadata.csv' df=pd.read_csv(path) df.shape, df.columns.tolist(), df.head(3).to_dict('records')[:1] ((24459, 12), ['primary_label', 'secondary_labels', 'type', 'latitude', 'longitude', 'scientific_name', 'common_name', 'author', 'license', 'rating', 'url', 'filename'], [{'primary_label': 'asbfly', 'secondary_labels': '[]', 'type': "['call']", 'latitude': 39.2297, 'longitude': 118.1987, 'scientific_name': 'Muscicapa dauurica', 'common_name': 'Asian Brown Flycatcher', 'author': 'Matt Slaymaker', 'license': 'Creative Commons Attribution-NonCommercial-ShareAlike 3.0', 'rating': 5.0, 'url': 'https://www.xeno-canto.org/134896', 'filename': 'asbfly/XC134896.ogg'}])

Python

python
stats = { "rows": len(df), "unique_primary_labels": df['primary_label'].nunique(), "unique_common_names": df['common_name'].nunique(), "rating_min": df['rating'].min(), "rating_max": df['rating'].max(), "rating_mean": df['rating'].mean(), "top_labels": df['primary_label'].value_counts().head(10).to_dict() } stats {'rows': 24459, 'unique_primary_labels': 182, 'unique_common_names': 182, 'rating_min': np.float64(0.0), 'rating_max': np.float64(5.0), 'rating_mean': np.float64(3.8434931926898073), 'top_labels': {'bcnher': 500, 'barswa': 500, 'bkwsti': 500, 'blrwar1': 500, 'comsan': 500, 'comgre': 500, 'eaywag1': 500, 'commoo3': 500, 'comkin1': 500, 'comros': 500}}

Python

python
from pathlib import Path for fn in ['data.py','build_db.py','search_birds.py']: print('---',fn) lines=Path('/mnt/data/'+fn).read_text(encoding='utf-8').splitlines() for i,l in enumerate(lines,1): if any(s in l for s in ['BASE_DIR', 'TOTAL_REQUIRED', 'def get_balanced_file_list', 'drop_duplicates', 'process_and_save', 'librosa.effects.trim', 'sf.write', 'new_name', 'HOÀN TẤT YÊU CẦU 1', 'AUDIO_DIR', 'DB_PATH', 'N_SEGMENTS', 'def extract_features_for_db', 'CREATE TABLE', 'INSERT INTO', 'def calculate_combined_similarity', 'StandardScaler', 'if query_matrix', 'diff =', 'similarity =', 'def search_similar_birds', 'cursor.execute', 'top_indices', 'select_audio_file', "

Suy nghĩ

Mình đã thấy dự án của bạn đã có đủ “xương sống”: tạo 500 file chuẩn, xây SQLite, trích xuất đặc trưng, và tìm top 5. Điểm thiếu chính nằm ở phần báo cáo/demo: cần ghi lại kết quả trung gian, có kịch bản test rõ ràng và số liệu đánh giá.

Thought for 52s

Trả lời

Dưới đây là tổng quan dự án của bạn theo đúng 5 yêu cầu của giảng viên, rồi mình tách riêng phần 4b5 là nhiệm vụ của bạn.

1. Dự án của bạn hiện đã làm được gì?

Yêu cầu 1: Thu thập/tạo bộ dữ liệu ít nhất 500 file âm thanh

Bạn đã có phần xử lý yêu cầu 1 trong data.py.

File này đặt mục tiêu TOTAL_REQUIRED = 500, chuẩn hóa sample rate SR = 22050, chuẩn hóa độ dài mỗi file về 10 giây, và lưu ra thư mục bird_prepared_500. (data.py)

Quy trình chọn dữ liệu cũng khá hợp lý: đọc train_metadata.csv, loại trùng theo author, latitude, longitude, primary_label, rồi chọn tương đối cân bằng theo từng loài. (data.py)

Phần tiền xử lý âm thanh đã có: load file .ogg, loại khoảng lặng bằng librosa.effects.trim, cắt hoặc padding về 10 giây, rồi lưu sang .wav. (data.py)

Kết luận: yêu cầu 1 cơ bản đã làm được. Cần kiểm tra lại trên máy bạn xem thư mục bird_prepared_500 có đủ đúng 500 file .wav hay chưa.


Yêu cầu 2: Xây dựng bộ thuộc tính nhận diện tiếng chim

Bạn đã làm phần trích xuất đặc trưng trong cả build_db.pysearch_birds.py.

Mỗi file được chia thành 10 đoạn, mỗi đoạn trích xuất 18 thuộc tính gồm:

Nhóm thuộc tínhSố chiềuÝ nghĩa
MFCC13Biểu diễn hình dạng phổ âm, rất quan trọng cho âm sắc tiếng chim
Spectral Centroid1Cho biết âm thanh sáng/cao hay trầm
ZCR1Phản ánh mức dao động nhanh/chậm của tín hiệu
Silence Ratio1Tỷ lệ khoảng lặng trong đoạn
Spectral Bandwidth1Độ rộng phổ tần
Pitch/F01Độ cao cơ bản của tiếng chim

Trong code, các đặc trưng này được gộp thành vector 18 chiều cho từng đoạn, tức mỗi file có ma trận đặc trưng kích thước 10 × 18. (build_db.py)

Kết luận: yêu cầu 2 đã làm được về mặt kỹ thuật. Khi viết báo cáo, cần bổ sung phần giải thích “lý do chọn” và “giá trị thông tin” của từng thuộc tính.


Yêu cầu 3: Xây dựng CSDL quản trị siêu dữ liệu

Bạn đã xây dựng CSDL SQLite trong build_db.py.

CSDL có bảng bird_metadata gồm các trường: id, file_name, xc_id, common_name, scientific_name, author, file_path, feature_vector, duration_seconds, sample_rate. (build_db.py)

Sau đó chương trình duyệt các file .wav trong bird_prepared_500, trích xuất đặc trưng, lấy thông tin metadata từ train_metadata.csv, rồi insert vào bảng bird_metadata. (build_db.py)

Kết luận: yêu cầu 3 đã làm được. Tuy nhiên, phần “cơ chế tìm kiếm dựa trên metadata” vẫn cần viết rõ hơn trong báo cáo, ví dụ tìm theo tên loài, tác giả, sample rate, độ dài, hoặc lọc theo common_name/scientific_name.


Yêu cầu 4a: Sơ đồ khối và quy trình hệ thống

Bạn đã có quy trình xử lý đầy đủ trong code, chỉ cần vẽ lại thành sơ đồ khối.

Quy trình hiện tại là:

text
File âm thanh đầu vào Tiền xử lý: trim silence, chuẩn hóa 10s, SR = 22050 Chia file thành 10 đoạn Trích xuất đặc trưng 18 chiều / đoạn Tạo ma trận query 10 × 18 Đọc feature_vector từ SQLite Chuẩn hóa Z-score Lọc đoạn quá im lặng Tính khoảng cách Euclidean có trọng số Đổi khoảng cách thành độ tương đồng Sắp xếp giảm dần Trả về top 5 file giống nhất

Trong search_birds.py, hệ thống trích xuất đặc trưng từ query, load toàn bộ vector từ SQLite, tính điểm tương đồng, rồi lấy top 5 kết quả. (search_birds.py)


2. Phần bạn phụ trách: 4b và 5

4b. Trình bày các kết quả trung gian của quá trình tìm kiếm tiếng chim

Hiện tại code đã có các bước trung gian, nhưng chưa in/ghi lại đầy đủ để đưa vào báo cáo.

Các kết quả trung gian bạn nên trình bày gồm:

Bước 1: File đầu vào

Ví dụ:

text
File query: bird_001_asbfly_XC134896.wav Định dạng: wav Sample rate sau chuẩn hóa: 22050 Hz Độ dài sau chuẩn hóa: 10 giây

Trong code, người dùng có thể chọn file từ database hoặc chọn file mới từ máy tính. (search_birds.py)


Bước 2: Kết quả tiền xử lý

Nên ghi:

text
- Đã loại bỏ khoảng lặng đầu/cuối file. - File được cắt hoặc padding về 10 giây. - File được chia thành 10 đoạn, mỗi đoạn dài 1 giây.

Trong search_birds.py, query được trim silence, chuẩn hóa về 10 giây và chia thành N_SEGMENTS = 10. (search_birds.py) (search_birds.py)


Bước 3: Ma trận đặc trưng của file query

Đây là phần rất quan trọng cho 4b. Bạn nên trình bày dạng bảng rút gọn:

SegmentMFCC_meanCentroidZCRSilence RatioBandwidthPitch
1..................
2..................
.....................
10..................

Không cần trình bày đủ 13 hệ số MFCC trong slide, vì sẽ quá dài. Bạn có thể ghi:

text
Mỗi segment có vector 18 chiều: [MFCC1…MFCC13, Centroid, ZCR, Silence Ratio, Bandwidth, Pitch]

Code hiện tại tạo đúng vector này. (search_birds.py)


Bước 4: Chuẩn hóa dữ liệu

Bạn nên ghi:

text
Toàn bộ ma trận đặc trưng của file query và các file trong database được chuẩn hóa bằng Z-score để đưa các thuộc tính về cùng thang đo.

Trong code, bạn dùng StandardScaler để chuẩn hóa query và database trước khi tính khoảng cách. (search_birds.py)


Bước 5: Lọc đoạn im lặng

Bạn nên trình bày:

text
Nếu một đoạn có Silence Ratio > 0.95 thì đoạn đó được xem là không có nhiều thông tin tiếng chim và bị bỏ qua khi tính độ tương đồng.

Trong code, điều kiện lọc là query_matrix[k][SILENCE_IDX] <= 0.95db_original[k][SILENCE_IDX] <= 0.95. (search_birds.py)


Bước 6: Tính khoảng cách và điểm tương đồng

Công thức bạn đang dùng có thể trình bày như sau:

text
Với từng đoạn hợp lệ: distance = sqrt(sum(((query_feature - db_feature) * weight)^2)) Sau đó: similarity = exp(-average_distance)

Code hiện tại dùng khoảng cách Euclidean có trọng số, sau đó chuyển sang điểm tương đồng bằng hàm exp(-avg_dist). (search_birds.py)


Bước 7: Kết quả top 5

Bạn đã có phần in ra bảng kết quả gồm Rank, Độ Tương Tự, Loài Chim, Tên File. (search_birds.py)

Nên trình bày trong báo cáo như bảng:

RankFile kết quảLoàiSimilarity
1......0.xxx
2......0.xxx
3......0.xxx
4......0.xxx
5......0.xxx

3. Phần 5: Demo hệ thống và đánh giá kết quả

Phần demo hiện tại đã có giao diện dòng lệnh, chưa có giao diện web/app. Khi chạy search_birds.py, chương trình cho chọn:

text
1. Chọn file từ database (bird_prepared_500) 2. Chọn file mới từ máy tính

Sau đó hệ thống chạy tìm kiếm và trả về 5 file giống nhất. (search_birds.py)

Demo nên trình bày theo kịch bản này

Demo 1: File query thuộc loài đã có trong database

Mục tiêu: kiểm tra hệ thống có tìm lại được file cùng loài hay không.

Kịch bản:

text
Input: một file trong bird_prepared_500 Output: top 5 file giống nhất Kỳ vọng: top 5 nên có nhiều file cùng primary_label hoặc cùng loài gần giống.

Cách đánh giá:

text
Top-1 đúng loài hay không? Trong top 5 có bao nhiêu file đúng loài?

Ví dụ bảng đánh giá:

Query fileLoài thậtTop-1 đúng?Số file đúng trong Top-5
query_01.wavasbfly4/5
query_02.wavbarswa3/5
query_03.wavcomkin1Không2/5

Demo 2: File query mới nhưng loài đã có trong database

Mục tiêu: kiểm tra khả năng nhận diện file bên ngoài database.

Kịch bản:

text
Input: file tiếng chim mới tải từ bên ngoài, nhưng thuộc loài có trong database. Output: top 5 file giống nhất. Kỳ vọng: các kết quả đầu có cùng loài hoặc loài âm thanh gần giống.

Đánh giá:

text
Nếu top 1 hoặc top 5 có file cùng loài thì hệ thống hoạt động tốt.

Demo 3: File query thuộc loài chưa có trong database

Đây là phần giảng viên có nhắc: “loài đã có và không có trong dữ liệu”.

Kịch bản:

text
Input: file tiếng chim của loài không nằm trong 500 file. Output: hệ thống vẫn trả về 5 file giống nhất. Kỳ vọng: không thể nhận diện đúng loài, nhưng có thể trả về các file có đặc trưng âm thanh gần nhất.

Bạn nên nói rõ:

text
Với loài chưa có trong CSDL, hệ thống không kết luận tên loài chính xác, mà chỉ thực hiện truy vấn tương đồng âm thanh. Do đó đầu ra là 5 file gần nhất về mặt đặc trưng âm học.

Câu này rất quan trọng để tránh bị hỏi “sao loài chưa có mà vẫn trả về kết quả”.


4. Những gì cần bổ sung ngay cho phần của bạn

Cần thêm cho 4b

Bạn nên bổ sung chức năng in/log các kết quả trung gian:

text
- Tên file query - Shape ma trận đặc trưng: 10 × 18 - Một vài giá trị đặc trưng của query - Số file được load từ database - Số segment hợp lệ sau khi lọc silence - Điểm similarity của top 5

Hiện tại code chỉ trả kết quả cuối, chưa in rõ các bước trung gian. Đây là thiếu sót chính của phần 4b.


Cần thêm cho 5

Bạn cần có bảng đánh giá, tối thiểu khoảng 10–20 file test.

Nên làm bảng:

STTQueryLoài thậtTop-1Top-1 đúng?Số đúng trong Top-5Nhận xét
1file Aasbflyasbfly4/5Tốt
2file Bbarswabarswa3/5Tốt
3file Cloài ngoài CSDLKhông áp dụngTrả về loài gần âm nhất

Sau đó tính:

text
Top-1 Accuracy = số query có top-1 đúng loài / tổng số query đã có loài trong CSDL Top-5 Accuracy = số query có ít nhất 1 kết quả đúng loài trong top 5 / tổng số query đã có loài trong CSDL Precision@5 = tổng số kết quả đúng trong top 5 / tổng số kết quả top 5

5. Một số điểm cần sửa/cải thiện trong code

  1. Đường dẫn trong data.py đang hard-code theo máy Windows của một bạn khác
python
BASE_DIR = r"C:\Users\hoang\OneDrive\Desktop\CSDLDPT"

Nên đổi thành đường dẫn tương đối để máy nào cũng chạy được, ví dụ:

python
BASE_DIR = os.getcwd()

Dòng hard-code này nằm trong phần cấu hình của data.py. (data.py)

  1. Cần lưu đúng common_name trong database

Hiện tại common_name đang lưu species_label, tức mã loài như asbfly, chứ chưa phải tên phổ thông như “Asian Brown Flycatcher”. Trong build_db.py, bạn đang lấy scientific_nameauthor, nhưng chưa lấy common_name thật từ CSV. (build_db.py)

  1. Cần tránh query tự trả về chính nó khi chọn file từ database

Nếu demo chọn một file có sẵn trong database, top 1 có thể là chính file đó. Khi đánh giá, nên loại file query khỏi danh sách kết quả nếu file_path trùng với query.

  1. Cần thêm kết quả trung gian để phục vụ phần 4b

Hiện tại hàm search_similar_birds() chỉ trả về top 5, chưa trả về ma trận đặc trưng query, số segment hợp lệ, điểm từng file, hoặc bảng so sánh chi tiết. (search_birds.py)


6. Kết luận ngắn để bạn đưa vào báo cáo

Bạn có thể viết như sau:

Dự án đã xây dựng được hệ thống tìm kiếm tiếng chim dựa trên đặc trưng âm thanh. Dữ liệu âm thanh được chuẩn hóa về cùng sample rate 22050 Hz và độ dài 10 giây. Mỗi file được chia thành 10 đoạn, mỗi đoạn trích xuất vector 18 chiều gồm MFCC, Spectral Centroid, Zero Crossing Rate, Silence Ratio, Spectral Bandwidth và Pitch. Các vector đặc trưng cùng metadata được lưu trong CSDL SQLite. Khi có file âm thanh đầu vào, hệ thống trích xuất đặc trưng tương tự, chuẩn hóa Z-score, lọc các đoạn im lặng, tính khoảng cách Euclidean có trọng số và trả về 5 file có độ tương đồng cao nhất.

Với nhiệm vụ của bạn, phần đã có là hệ thống tìm kiếm top 5. Phần cần bổ sung là bảng kết quả trung gian cho 4bbảng demo/đánh giá định lượng cho phần 5.

Câu hỏi

CSDLDPT báo cáo (2).pdf
[D22- Lớp 4] Nhóm 6.pdf

dựa vào file mẫu csdldpt tôi muốn hoàn thiện báo cáo của nhóm mình là nhóm 6, hướng dẫn tôi thực hiện hoàn thiện đầy đủ báo cáo của nhóm mình

Suy nghĩ

Creating format for report completion

I need to finalize a structure for the report. I’ll suggest a template where the user shouldn't copy modules directly but use the sample as a guide. The report should include sections like dataset, features, and workflow, which the sample has but the current draft is only three pages. I’ll suggest a detailed checklist and chapter-by-chapter guidance, adding specific steps for sections 4b and 5, like logging and a table for features and similarity scoring.

Thought for 56s

Trả lời

Dưới đây là cách bạn nên hoàn thiện báo cáo nhóm 6 dựa trên file mẫu CSDLDPT và các file dự án hiện có.

1. Nhận xét nhanh về báo cáo nhóm 6 hiện tại

Báo cáo nhóm 6 hiện mới có khoảng 3 trang, gồm: bìa, đề bài, phần mở đầu, mục tiêu cụ thể và công nghệ chính. Nội dung hiện đã nêu đúng đề tài “xây dựng hệ CSDL lưu trữ và tìm kiếm tiếng chim hót”, yêu cầu trả về 5 file giống nhất, và có nhắc đến SQLite, Librosa, Soundfile, Scikit-learn. ([D22- Lớp 4] Nhóm 6.pdf)

File mẫu có cấu trúc đầy đủ hơn: mở đầu, mục tiêu, công nghệ, xây dựng dataset, bộ thuộc tính, nguyên lý trích rút đặc trưng, sơ đồ khối, mô tả quy trình, lưu trữ, tìm kiếm và phần thực nghiệm/kết quả trung gian. (CSDLDPT báo cáo (2).pdf)

Vì vậy, nhóm bạn không cần viết lại từ đầu. Bạn nên dùng file mẫu làm khung báo cáo, nhưng phải đổi toàn bộ nội dung từ “tìm kiếm nội dung file âm thanh/giọng nói” sang “tìm kiếm tiếng chim hót”.


2. Cấu trúc báo cáo nhóm 6 nên hoàn thiện

Bạn nên làm báo cáo theo bố cục sau:

text
TRANG BÌA ĐỀ BÀI MỤC LỤC I. MỞ ĐẦU 1. Bối cảnh 2. Mục tiêu cụ thể 3. Công nghệ sử dụng II. XÂY DỰNG DATASET 1. Nguồn dữ liệu 2. Tiêu chí chọn file 3. Tiền xử lý âm thanh 4. Kết quả dataset sau xử lý III. XÂY DỰNG BỘ THUỘC TÍNH ĐẶC TRƯNG 1. Các thuộc tính metadata 2. Các thuộc tính đặc trưng âm thanh 3. Lý do lựa chọn từng thuộc tính 4. Cấu trúc vector đặc trưng IV. XÂY DỰNG CƠ SỞ DỮ LIỆU 1. Thiết kế bảng bird_metadata 2. Quy trình lưu metadata và feature vector 3. Cơ chế tìm kiếm dựa trên metadata V. HỆ THỐNG TÌM KIẾM TIẾNG CHIM 1. Sơ đồ khối hệ thống 2. Quy trình tìm kiếm 3. Công thức tính độ tương đồng 4. Kết quả trung gian của quá trình tìm kiếm VI. DEMO HỆ THỐNG VÀ ĐÁNH GIÁ 1. Môi trường chạy demo 2. Kịch bản demo 3. Kết quả demo 4. Đánh giá kết quả 5. Hạn chế và hướng phát triển VII. KẾT LUẬN PHỤ LỤC: Code chính

Phần V.4VI là phần của bạn: 4b và 5.


3. Hoàn thiện từng phần báo cáo

I. Mở đầu

Phần này nhóm bạn đã có rồi, chỉ cần mở rộng thêm một chút. Nội dung nên nhấn mạnh:

  • Tiếng chim là dữ liệu âm thanh tự nhiên.
  • Việc nhận diện thủ công mất thời gian.
  • Hệ CSDL đa phương tiện giúp lưu trữ, trích xuất đặc trưng và tìm kiếm tự động.
  • Hệ thống không nhất thiết “phân loại chính xác loài”, mà tìm 5 âm thanh giống nhất theo đặc trưng âm học.

Bạn có thể viết thêm đoạn này:

Trong bài toán tiếng chim hót, mỗi file âm thanh không chỉ được quản lý bằng tên file hay tên loài, mà còn được biểu diễn bằng các đặc trưng âm học như MFCC, cao độ, trọng tâm phổ, băng thông phổ và tỷ lệ khoảng lặng. Nhờ đó, hệ thống có thể tìm kiếm các file có tiếng hót tương đồng với file truy vấn, kể cả khi file đầu vào thuộc loài chưa có trong cơ sở dữ liệu.


II. Xây dựng Dataset

Dựa vào data.py, nhóm bạn đã có quy trình tạo dataset tương đối đầy đủ. Code đặt mục tiêu TOTAL_REQUIRED = 500, sample rate SR = 22050, độ dài chuẩn DURATION = 10 giây và thư mục lưu kết quả là bird_prepared_500. (data.py)

Phần này nên trình bày theo 4 ý:

1. Nguồn dữ liệu

Viết:

Dữ liệu được lấy từ tập dữ liệu tiếng chim trên Kaggle, gồm các file âm thanh gốc và file metadata train_metadata.csv. Metadata cung cấp các thông tin như tên file, mã loài, tên khoa học, tác giả, vị trí thu âm.

2. Tiêu chí chọn file

Dựa vào code, bạn đang loại trùng theo author, latitude, longitude, primary_label, sau đó chọn một số file đại diện cho từng loài để đảm bảo cân bằng. (data.py)

Viết:

Để tránh dữ liệu bị lệch về một loài hoặc một nguồn thu âm, hệ thống loại bỏ các bản ghi trùng lặp theo tác giả, vị trí và mã loài. Sau đó, chương trình chọn số lượng file tương đối cân bằng giữa các loài cho đến khi đủ 500 file.

3. Tiền xử lý âm thanh

Trong code, mỗi file được load bằng Librosa, loại bỏ khoảng lặng bằng librosa.effects.trim, cắt hoặc padding về 10 giây, sau đó lưu thành .wav. (data.py)

Viết:

Các file âm thanh gốc được chuẩn hóa về cùng tần số lấy mẫu 22050 Hz, loại bỏ khoảng lặng ở đầu/cuối file, sau đó cắt hoặc thêm padding để đạt độ dài 10 giây. Việc chuẩn hóa này giúp các file có cùng kích thước tín hiệu, thuận lợi cho quá trình chia đoạn và trích xuất đặc trưng.

4. Kết quả dataset

Cần chèn ảnh minh họa:

  • Ảnh thư mục bird_prepared_500.
  • Ảnh terminal sau khi chạy data.py.
  • Bảng mô tả dataset.

Bảng nên có dạng:

Thuộc tínhGiá trị
Số lượng file500
Định dạng sau xử lýWAV
Sample rate22050 Hz
Độ dài mỗi file10 giây
Thư mục lưubird_prepared_500
Nguồn metadatatrain_metadata.csv

III. Xây dựng bộ thuộc tính đặc trưng

Phần này rất quan trọng vì yêu cầu 2 của giảng viên bắt trình bày lý do lựa chọn và giá trị thông tin của thuộc tính.

Trong code, mỗi file được chia thành 10 phân đoạn, mỗi phân đoạn trích xuất vector 18 chiều, gồm 13 MFCC và 5 đặc trưng bổ sung: Spectral Centroid, ZCR, Silence Ratio, Spectral Bandwidth, Pitch. (build_db.py)

Bạn nên trình bày bảng này:

Thuộc tínhSố chiềuÝ nghĩaLý do chọn
MFCC13Biểu diễn đặc trưng phổ/âm sắcTiếng chim khác nhau có cấu trúc phổ khác nhau
Spectral Centroid1Trọng tâm phổ tần sốPhân biệt âm sáng/cao với âm trầm
Zero Crossing Rate1Tốc độ đổi dấu tín hiệuPhản ánh mức dao động nhanh/chậm
Silence Ratio1Tỷ lệ khoảng lặngLoại bỏ đoạn ít thông tin
Spectral Bandwidth1Độ rộng phổPhân biệt tiếng hót hẹp/rộng dải tần
Pitch/F01Cao độ cơ bảnTiếng chim thường khác nhau rõ ở cao độ

Đoạn giải thích có thể viết:

Mỗi file âm thanh được chuẩn hóa về 10 giây và chia thành 10 đoạn, mỗi đoạn dài khoảng 1 giây. Với mỗi đoạn, hệ thống trích xuất 18 đặc trưng âm học. Cách biểu diễn theo phân đoạn giúp giữ lại sự thay đổi theo thời gian của tiếng chim thay vì chỉ lấy một vector trung bình cho toàn bộ file. Như vậy, mỗi file được biểu diễn bằng ma trận đặc trưng kích thước 10 × 18.


IV. Xây dựng CSDL

Phần này dựa vào build_db.py.

CSDL của bạn dùng SQLite, bảng chính là bird_metadata, gồm các trường: id, file_name, xc_id, common_name, scientific_name, author, file_path, feature_vector, duration_seconds, sample_rate. (build_db.py)

Bạn nên chèn bảng thiết kế CSDL:

Tên trườngKiểu dữ liệuÝ nghĩa
idINTEGERKhóa chính
file_nameTEXTTên file âm thanh
xc_idTEXTMã file gốc
common_nameTEXTMã/tên loài
scientific_nameTEXTTên khoa học
authorTEXTNgười thu âm/tác giả
file_pathTEXTĐường dẫn file
feature_vectorTEXTVector đặc trưng dạng JSON
duration_secondsREALThời lượng file
sample_rateINTEGERTần số lấy mẫu

Đoạn mô tả:

Khi xây dựng CSDL, hệ thống duyệt toàn bộ file .wav trong thư mục bird_prepared_500, trích xuất ma trận đặc trưng 10 × 18, chuyển ma trận này sang dạng JSON và lưu vào trường feature_vector. Đồng thời, hệ thống lấy thêm thông tin từ train_metadata.csv như tên khoa học và tác giả để lưu cùng metadata. (build_db.py)

Phần “cơ chế tìm kiếm dựa trên metadata” nên viết thêm:

Ngoài tìm kiếm theo nội dung âm thanh, CSDL còn hỗ trợ truy vấn metadata như tìm theo tên file, mã loài, tên khoa học, tác giả, thời lượng hoặc sample rate. Các truy vấn này được thực hiện bằng SQL trên bảng bird_metadata, giúp người dùng lọc nhanh dữ liệu trước hoặc sau khi tìm kiếm tương đồng âm thanh.


4. Phần của bạn: 4b — Kết quả trung gian của quá trình tìm kiếm

Hiện tại search_birds.py đã có quy trình tìm kiếm: trích xuất đặc trưng query, đọc feature_vector từ SQLite, tính độ tương đồng, sắp xếp và trả về top 5. (search_birds.py)

Nhưng báo cáo cần kết quả trung gian, không chỉ kết quả cuối. Bạn nên trình bày theo 6 bước sau.


Bước 1: Thông tin file truy vấn

Trong báo cáo, tạo bảng:

Thuộc tínhGiá trị ví dụ
File querybird_001_xxx.wav
Định dạngWAV
Sample rate22050 Hz
Độ dài sau chuẩn hóa10 giây
Số đoạn10
Số đặc trưng mỗi đoạn18
Kích thước ma trận query10 × 18

Chèn ảnh terminal lúc chương trình in:

text
File query: ... Bắt đầu tìm kiếm...

Bước 2: Kết quả tiền xử lý

Viết:

File truy vấn được load bằng Librosa với sample rate 22050 Hz. Sau đó hệ thống loại bỏ khoảng lặng bằng librosa.effects.trim, chuẩn hóa độ dài về 10 giây, rồi chia thành 10 đoạn bằng nhau để trích xuất đặc trưng.

Phần này đúng với hàm extract_features_segmented() trong search_birds.py. (search_birds.py)


Bước 3: Ma trận đặc trưng query

Bạn không nên đưa đủ 18 cột vì quá dài. Chỉ cần đưa bảng rút gọn:

SegmentMFCC_meanCentroidZCRSilence RatioBandwidthPitch
1..................
2..................
3..................
.....................
10..................

Đoạn mô tả:

Mỗi đoạn âm thanh được biểu diễn bởi vector gồm 18 giá trị: 13 hệ số MFCC và 5 đặc trưng bổ sung gồm Spectral Centroid, ZCR, Silence Ratio, Spectral Bandwidth và Pitch. (search_birds.py)


Bước 4: Chuẩn hóa Z-score

Trong code, dữ liệu query và database được gom lại rồi chuẩn hóa bằng StandardScaler. (search_birds.py)

Viết:

Do các đặc trưng có đơn vị và thang đo khác nhau, ví dụ Pitch có giá trị theo Hz còn ZCR thường nằm trong khoảng nhỏ, hệ thống chuẩn hóa toàn bộ dữ liệu bằng Z-score trước khi tính khoảng cách. Việc chuẩn hóa giúp các thuộc tính đóng góp công bằng hơn vào điểm tương đồng.


Bước 5: Lọc khoảng lặng

Trong code, các segment có Silence Ratio > 0.95 bị bỏ qua khi tính tương đồng. (search_birds.py)

Bảng nên có:

SegmentSilence Ratio QueryTrạng thái
10.12Giữ lại
20.97Bỏ qua
30.21Giữ lại

Đoạn mô tả:

Các đoạn có tỷ lệ khoảng lặng quá cao không chứa nhiều thông tin tiếng chim, do đó được bỏ qua để tránh làm sai lệch độ tương đồng.


Bước 6: Tính điểm và xếp hạng top 5

Công thức bạn đang dùng:

text
distance = sqrt(sum(((query_feature - db_feature) * weight)^2)) similarity = exp(-average_distance)

Trong báo cáo, ghi:

Sau khi chuẩn hóa và lọc các đoạn không hợp lệ, hệ thống tính khoảng cách Euclidean có trọng số giữa từng đoạn của file truy vấn và file trong CSDL. Khoảng cách trung bình được chuyển thành điểm tương đồng bằng hàm mũ exp(-avg_dist). Điểm càng gần 1 thì hai file càng giống nhau.

Bảng kết quả trung gian nên có:

File so sánhSố segment hợp lệAvg distanceSimilarity
bird_001_xxx.wav90.4210.656
bird_123_xxx.wav80.5380.584
bird_312_xxx.wav100.6920.500

Sau đó mới đưa bảng top 5:

RankFile kết quảLoàiSimilarity
1.........
2.........
3.........
4.........
5.........

5. Phần của bạn: 5 — Demo hệ thống và đánh giá

Trong search_birds.py, hệ thống đã có demo dòng lệnh: người dùng chọn file trong database hoặc chọn file mới từ máy tính, sau đó chương trình in bảng top 5 kết quả. (search_birds.py)

Bạn nên hoàn thiện phần demo theo 3 kịch bản.


Demo 1: File query đã có trong CSDL

Mục tiêu: kiểm tra hệ thống có tìm được các file cùng loài hoặc gần giống không.

Cách làm:

text
python search_birds.py Chọn 1: Chọn file từ database Chọn một file bất kỳ Ghi lại top 5 kết quả

Lưu ý quan trọng: nếu query là file có sẵn trong database, top 1 có thể chính là nó. Khi đánh giá nghiêm túc, nên loại file query ra khỏi kết quả để tránh “ăn gian”.

Bảng báo cáo:

Query fileLoài queryRank 1Rank 2Rank 3Rank 4Rank 5Nhận xét
bird_001_xxx.wavasbfly...............Có nhiều file cùng loài

Demo 2: File mới, loài đã có trong CSDL

Mục tiêu: kiểm tra hệ thống với file bên ngoài.

Cách làm:

  • Lấy một file tiếng chim cùng loài với loài đã có trong dataset.
  • Không đưa file đó vào database.
  • Chạy lựa chọn số 2 trong chương trình.
  • Ghi lại top 5.

Bảng:

Query ngoài CSDLLoài thậtTop 1Top 5 có cùng loài không?Nhận xét
test_asbfly.wavasbfly...Có/Không...

Demo 3: File mới, loài chưa có trong CSDL

Mục tiêu: chứng minh hệ thống vẫn trả về 5 file gần nhất, nhưng không khẳng định nhận diện đúng loài.

Đoạn nên viết trong báo cáo:

Với file truy vấn thuộc loài chưa có trong CSDL, hệ thống không thể trả về đúng tên loài vì dữ liệu huấn luyện không chứa loài đó. Tuy nhiên, hệ thống vẫn thực hiện tìm kiếm tương đồng âm học và trả về 5 file có đặc trưng gần nhất trong CSDL.

Bảng:

QueryLoài thậtCó trong CSDL?Top 1Top 5Nhận xét
unknown_bird.wavloài ngoài CSDLKhông......Trả về âm thanh gần nhất

6. Chỉ số đánh giá nên dùng

Bạn nên đánh giá tối thiểu bằng 3 chỉ số:

1. Top-1 Accuracy

text
Top-1 Accuracy = Số query có kết quả rank 1 đúng loài / Tổng số query test

2. Top-5 Accuracy

text
Top-5 Accuracy = Số query có ít nhất 1 file đúng loài trong top 5 / Tổng số query test

3. Precision@5

text
Precision@5 = Tổng số file đúng loài trong top 5 / Tổng số file được trả về

Ví dụ bảng tổng hợp:

Số lượng query testTop-1 AccuracyTop-5 AccuracyPrecision@5Thời gian tìm kiếm TB
1060%80%52%1.2s

Nếu chưa kịp test nhiều, dùng tối thiểu 5 query trong CSDL + 2 query ngoài CSDL + 1 query loài chưa có.


7. Những ảnh cần chụp để đưa vào báo cáo

Bạn nên chuẩn bị các ảnh sau:

ẢnhĐưa vào phần nào
Thư mục bird_prepared_500 có 500 fileII. Dataset
Terminal chạy data.py thành côngII. Dataset
Terminal chạy build_db.py thành côngIV. CSDL
Ảnh DB Browser for SQLite mở bảng bird_metadataIV. CSDL
Ảnh chạy search_birds.py chọn file queryV/VI
Ảnh bảng top 5 kết quảVI. Demo
Ảnh file âm thanh query và file kết quả nếu có giao diện phát lạiVI. Demo

8. Sơ đồ khối nên vẽ cho nhóm 6

File mẫu có sơ đồ khối ở trang 12, gồm input, tiền xử lý, trích xuất đặc trưng, lưu trữ, tìm kiếm và trả kết quả. (CSDLDPT báo cáo (2).pdf)

Với nhóm 6, sơ đồ nên sửa thành:

text
File tiếng chim đầu vào Tiền xử lý âm thanh Resample 22050 Hz, trim silence, chuẩn hóa 10s Chia thành 10 segment Trích xuất đặc trưng MFCC, Centroid, ZCR, Silence Ratio, Bandwidth, Pitch Ma trận đặc trưng 10 × 18 Lưu vào SQLite Metadata + Feature Vector JSON File query mới Trích xuất đặc trưng query Chuẩn hóa Z-score Lọc segment im lặng Tính Weighted Euclidean Distance Tính Similarity = exp(-distance) Sắp xếp giảm dần Trả về Top 5 file giống nhất

Bạn có thể vẽ bằng PowerPoint, Word SmartArt hoặc draw.io.


9. Nội dung cần sửa trong báo cáo hiện tại

Trong báo cáo nhóm 6, phần công nghệ đang dừng ở dòng “(giao diện)”. ([D22- Lớp 4] Nhóm 6.pdf) Nên sửa thành:

text
- Librosa: Dùng để load audio, loại bỏ khoảng lặng và trích xuất các đặc trưng âm học như MFCC, Spectral Centroid, ZCR, Spectral Bandwidth, Pitch. - Soundfile: Dùng để lưu các file âm thanh sau khi chuẩn hóa về định dạng WAV. - SQLite: Dùng để lưu metadata và vector đặc trưng dưới dạng JSON. - Pandas: Dùng để đọc file train_metadata.csv và lấy thông tin metadata. - NumPy: Dùng để xử lý vector, ma trận đặc trưng và tính toán khoảng cách. - Scikit-learn: Dùng StandardScaler để chuẩn hóa Z-score. - Tkinter: Dùng để tạo hộp thoại chọn file âm thanh khi demo.

10. Việc cần làm ngay theo thứ tự

Làm theo thứ tự này là báo cáo sẽ đầy đủ:

  1. Chỉnh phần mở đầu và công nghệ trong file nhóm 6.
  2. Thêm chương II Dataset dựa vào data.py.
  3. Thêm chương III Bộ thuộc tính với bảng MFCC, Centroid, ZCR, Silence Ratio, Bandwidth, Pitch.
  4. Thêm chương IV CSDL với bảng bird_metadata.
  5. Vẽ sơ đồ khối theo luồng tìm kiếm tiếng chim.
  6. Bổ sung phần 4b của bạn: bảng kết quả trung gian gồm query info, ma trận đặc trưng, chuẩn hóa, lọc silence, similarity, top 5.
  7. Chạy demo ít nhất 8–10 file query và ghi bảng đánh giá.
  8. Thêm kết luận, hạn chế, hướng phát triển.

Phần quan trọng nhất của bạn là không chỉ chụp kết quả top 5, mà phải chứng minh quá trình tìm kiếm đi qua các bước trung gian: query → ma trận 10×18 → chuẩn hóa → lọc silence → tính khoảng cách → similarity → top 5.

Chia sẻ Q&A này