Skip to content

Tool tự động gán nhãn dựa trên VAD, sử dụng cho bài tập thu âm và gán nhãn lớp học phần INT3411

Notifications You must be signed in to change notification settings

thanhtvt/auto-labeling-tool-int3411

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Auto labeling tool

Đây là tool gán nhãn tự động dựa trên mô hình VAD cho bài tập thu âm và gán nhãn, lớp học phần INT3411.

Miễn trừ trách nhiệm: Đây là mini project cho những ai lười (như mình) và không đảm bảo sự chính xác tuyệt đối. Cần cẩn trọng khi sử dụng.

Installation

Chuẩn bị môi trường Python 3.6+ (khuyến khích sử dụng virtualenv hoặc conda), chạy các câu lệnh sau:

pip install webrtcvad
pip install unidecode       # Optional, only for normalizing text label
pip install vietnam-number  # Optional, only for normalizing number label

git clone https://github.com/thanhtvt/auto-labeling-tool-int3411.git

Usage

Di chuyển đến src/ và chạy lệnh

python3 label_generator.py [-a <aggressive>] [-s] <input_wavs> <input_labels>  

Trong đó:

  • aggressive: độ "chặt" của thuật toán xác định vùng có tiếng nói (0 - 3). Càng cao thì thuật toán càng chặt chẽ (Mặc định là 3). Khuyến khích nên đặt giá trị bằng 2
  • -s: sử dụng flag này để label cả những đoạn sil.
  • input_wavs: directory chứa các file audio .wav cần gán nhãn (hỗ trợ cả với 1 file audio duy nhất).
  • input_labels: file .txt chứa các label cần gán nhãn.

Ví dụ: python3 label_generator.py ../example ../example/label.txt

Output là các file text, môi file text chứa label của audio tương ứng theo format:

3.090000	4.140000	xuong
4.350000	5.430000	trai
5.610000	6.720000	trai
7.140000	8.160000	A
8.520000	9.570000	B
10.050000	11.040000	nhay
11.490000	12.390000	phai
12.870000	13.860000	A
14.220000	15.210000	A
15.690000	16.590000	phai

Demo kết quả:
demo

Notes

  1. Script không detect tốt các âm gió (như âm "ph" trong từ "phải" hay âm "x" trong từ "xuống"), các bạn sử dụng có thể custom lại code của hàm save_to_file(...) trong file label_generator.py hoặc đơn giản hơn là giảm aggressive của thuật toán xuống 2 hoặc 1.

  2. Mô hình VAD chỉ nhận các audio có giá trị sample rate là một trong các số [8000, 16000, 32000, 48000]. Vậy nên, khi thu âm cần thu âm với tần số là 1 trong 4 số kia (lớn hơn số yêu cầu) và downsample sau đó (không được thu âm với tần số nhỏ hơn rồi upsample vì theo định lý Nyquist-Shannon). Ví dụ, nếu yêu cầu thu âm với tần số 22050 Hz thì ta thu 32000 Hz rồi sau sẽ downsample xuống.

  3. Có thể chạy lệnh sau để resample về đúng tần số yêu cầu. Trong đó <inp_sr> là sample rate ban đầu, <out_sr> là sample rate đầu ra, <data> có thể là folder chứa tập các audio input hoặc 1 audio.

python3 resample.py <inp_sr> <out_sr> <data> 

Ví dụ: python3 resample.py 32000 22050 ../example

Lưu ý: cần tải sox về để chạy script (link tải cho Windows, Linux & MacOS)

  1. Khi thu âm, cần thu trong môi trường yên tĩnh, mỗi từ nói ra cần ngắt một khoảng nhất định rồi mới nói tiếp. Phát âm to, rõ ràng, ít nhiễu sẽ đẩy độ chính xác lên mức tốt nhất. Ví dụ như hình dưới, câu trên do không ngắt đủ dài nên gán 2 từ thành 1, dẫn đến lệch các từ sau.
    img

  2. Tips cho các bạn không thể thu âm trong môi trường yên tĩnh hoàn toàn. Audacity có hỗ trợ tính năng noise reduction. Cụ thể cách sử dụng tham khảo ở đây. Thực tế cho thấy mình kết hợp với chức năng này của Audacity giúp sai lệch của tool chỉ là 6/100 file tại lần thu đầu tiên và fix hết tại lần thu thứ 2.

  3. Nên test với một vài audio để tìm ra cách đọc, ngắt nghỉ để phù hợp với tool trước khi chạy hết với toàn bộ tập dữ liệu.

  4. Chú ý khi đặt tên audio: Nên đặt theo dạng 001.wav, 002.wav, ... Miễn làm sao cho thứ tự khi sắp xếp tăng dần của chúng trùng với thứ tự label tương ứng trong file text chứa nhãn.

Credits

  1. https://github.com/wiseman/py-webrtcvad

About

Tool tự động gán nhãn dựa trên VAD, sử dụng cho bài tập thu âm và gán nhãn lớp học phần INT3411

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages