Chương III Phát triển ứngdụng truy tìm âm thanh trên cơ sở nội dung
3.1. Yêu cầu hệ thống
3.1.1. Yêu cầu phần cứng
Chƣơng trình yêu cầu phần cứng có cấu hình tối thiểu nhƣ sau: - Pentium IV 500+ MHz
- 512MB RAM - 20 GB Harddisk
3.1.2. Yêu cầu phần mềm
Chƣơng trình có thể chạy trên các hệ điều hành sau đây: - Microsoft ® Windows™ Server 2003
- Microsoft ® Windows ® XP - Microsoft ® Windows ® 2000 - Microsoft ® Windows ® NT4.0 - Microsoft ® Windows 98 ® - Microsoft ® Windows ME ®
ACTNow API đƣợc thiết kế riêng để làm việc với CoolRec API và các kỹ thuật khác của Compure. Chƣơng trình cần phải hỗ trợ các định dạng âm
- PCM 16kHz 16Bit Mono hoặc Stereo: ngƣời dùng có thể ghi âm trực tiếp thông qua microphone.
- PCM 8kHz 16Bit Mono hoặc Stereo: ngƣời dùng có thể ghi âm trực tiếp thông qua telephone.
3.2.GIỚI THIỆU THƢ VIỆN CHƢƠNG TRÌNH ACT NOW C/C++
Tất cả các hàm và mã lỗi đã đƣợc định nghĩa trong phần đầu của tệp ACTNow.h.
Mỗi một hàm của giao diện lập trình ứng dụng ACTNow có một tên bắt đầu là AN_ (ví dụ: AN_xxxCreate). Nó đảm bảo cho việc dễ dàng nhận dạng tất cả các hàm của ACT và tránh đƣợc việc xung đột tên với các hàm khác trong mã.
1. Create/Delete
Trƣớc khi sử dụng, ta phải khởi tạo đối tƣợng thông qua hàm AN_xxxxCREATE, thƣờng thì hàm sẽ trả lại một handle ứng với đối tƣợng đó. Ta cũng có thể khởi tạo nhiều đối tƣợng cùng một lúc.
Sau khi đã kết thúc công việc, có thể loại bỏ đối tƣợng thông qua hàm AN_xxxDelete để tránh lãng phí tài nguyên không cần thiết.
2. Error Code
Mỗi hàm đều trả về một mã đƣợc định nghĩa trong tệp ACTNowAPI.h. Nếu hàm thực hiện thành công sẽ trả về mã AN_OK.
3. Handle
Mỗi lời gọi hàm AN_xxxxCreate sẽ trả về một handle mới ứng với đối tƣợng vừa đƣợc tạo ra. Điều này cho phép ta làm việc với nhiều đối tƣợng một lúc (ví dụ: dùng nhiều bộ phân tích có thể nhận dạng nhiều đối tƣợng trên cùng một dữ liệu âm thanh).
4. Phrase
Ta có thể huấn luyện cho hệ thống nhận dạng bất kỳ một cụm từ trong đoạn âm thanh nào, sau đó hệ thống có thể phát hiện ra nó từ các đoạn âm thanh khác bởi đối tƣợng Item Detector. Ví dụ, khi ta đƣa một đoạn âm thanh trong đó nội dung của nó thể hiện cụm từ "khủng bố", hệ thống sau đó đƣợc huấn luyện và có thể phát hiện xem cụm từ này có nằm trong một tệp âm thanh nào khác (do ta đƣa vào) hay không, nếu có thì nó nằm trong khoảng thời gian nào của đoạn âm thanh cần kiểm tra.
Các bƣớc để huấn luyện một cụm từ:
1, Khởi tạo một đối tƣợng Detection Item qua hàm AN_DetectionItemCreate với các tham số: AN_ITEM_TYPE_KEY_ PHRASE (dùng để xác định kiểu của đối tƣợng) và định danh duy nhất cho đối tƣợng đó.
2, Khởi tạo một đối tƣợng Detection Item Trainer bởi lời gọi hàm AN_ItemTrainerCreate, hàm trả về một handle tƣơng ứng.
3, Thiết lập việc huấn luyện bởi lời gọi hàm AN_ItemTrainerInit với tham số là handle đã tạo lập ở bƣớc 1.
4, Đƣa mẫu âm thanh thể hiện cụm từ mà ta muốn huấn luyên vào đối tƣợng Detection Item Trainer bởi lời gọi hàm AN_ItemTrainerProcessAudioData (có thể sử dụng CoolRec API để đọc bất kỳ tệp âm thanh nào, nếu cần chức năng này). Nếu các mẫu âm thanh có chất lƣợng khác xa nhau hoặc xuất phát từ nhiều ngƣời,... ta cũng có thể huấn luyện các mẫu đó với hàm AN_ItemTrainerStartNextAudioDataSequence. Sau khi đƣa tất cả các mẫu vào, ta sử dụng hàm AN_ItemTrainerFlush để kết thúc quá trình huấn luyện.
5, Lúc này ta có thể xóa đối tƣợng Detection Item Trainer bằng lời gọi hàm AN_ItemTrainerDelete, sau đó thì handle của đối tƣợng này sẽ trở thành không hợp lệ.
6, Thông thƣờng, sau khi Item Detector đã xử lý các mẫu âm thanh thì không cần các đối tƣợng Detection Item nữa, khi đó ta có thể gọi hàm AN_DetectionItemDelete để giải phóng bộ nhớ đang bị các đối tƣợng Detection Item chiếm giữ.
5. Sound Clip
Để huấn luyện một đoạn âm thanh, ta thực hiện theo các bƣớc sau đây: 1, Khởi tạo một đối tƣợng Detection Item qua hàm AN_DetectionItemCreate với các tham số: AN_ITEM_TYPE_AUDIO_CLIP (dùng để xác định kiểu của đối tƣợng) và một định danh duy nhất cho đối tƣợng đó.
2, Khởi tạo một đối tƣợng Detection Item Trainer bởi lời gọi AN_ItemTrainerCreate, hàm trả về một handle ứng với nó.
3, Thiết lập việc huấn luyện trong bởi lời gọi AN_ItemTrainerInit với tham số là handle đã tạo lập ở bƣớc 1.
4, Đƣa mẫu âm thanh cần huấn luyện vào đối tƣợng Detection Item Trainer bởi lời gọi AN_ItemTrainerProcessAudioData (có thể sử dụng CoolRec API để đọc bất kỳ tệp âm thanh nào, nếu cần chức năng này). Nếu ta có các mẫu âm thanh mà chất lƣợng khác xa nhau thì có thể huấn luyện các mẫu đó với hàm AN_ItemTrainerStartNextAudioDataSequence. Sau khi đƣa tất cả các mẫu vào, ta sử dụng hàm AN_ItemTrainerFlush để kết thúc quá trình huấn luyện.
5, Lúc này ta có thể xóa đối tƣợng Detection Item Trainer bằng lời gọi hàm AN_ItemTrainerDelete, sau đó thì handle của đối tƣợng này sẽ trở thành không hợp lệ.
6, Thông thƣờng, sau khi Item Detector đã xử lý các mẫu âm thanh thì không cần các đối tƣợng Detection Item nữa, khi đó ta có thể gọi hàm AN_DetectionItemDelete để giải phóng bộ nhớ đang bị các đối tƣợng Detection Item chiếm giữ.
6. Music
Để phân tích một đoạn âm nhạc, ta thực hiện theo các bƣớc sau:
1, Tạo một đối tƣợng Detection Item bởi lời gọi hàm AN_DetectionItemCreateTrained. Hàm nhận một tham số là AN_PTI_MUSIC và trả về một handle tƣơng ứng với đối tƣợng Detection Item trên.
2, Sử dụng Item Detector để nhận dạng các đối tƣợng music trong một luồng âm thanh.
3, Thông thƣờng, sau khi Item Detector đã xử lý các mẫu âm thanh thì không cần các đối tƣợng Detection Item nữa, khi đó ta có thể gọi hàm AN_DetectionItemDelete để giải phóng bộ nhớ đang bị các đối tƣợng Detection Item chiếm giữ.
7. Speaker
Để huấn luyện dữ liệu giọng nói trong một mục Detection, cần tuân theo các bƣớc sau đây:
1, Khởi tạo một đối tƣợng Detection Item qua hàm AN_DetectionItemCreate với các tham số: AN_ITEM_TYPE_SPEAKER (dùng để xác định kiểu của đối tƣợng) và định danh duy nhất cho đối tƣợng đó.
2, Khởi tạo một đối tƣợng Detection Item Trainer bởi lời gọi AN_ItemTrainerCreate, hàm trả về một handle ứng với nó.
3, Thiết lập việc huấn luyện bởi lời gọi hàm AN_ItemTrainerInit với tham số là handle đã tạo lập ở bƣớc 1.
4, Đƣa mẫu âm thanh cần huấn luyện vào đối tƣợng Detection Item Trainer bởi lời gọi AN_ItemTrainerProcessAudioData (có thể sử dụng CoolRec API để đọc bất kỳ tệp âm thanh nào, nếu cần chức năng này). Nếu ta có các đoạn âm thanh mà chất lƣợng khác xa nhau thì có thể huấn luyện các mẫu đó với hàm AN_ItemTrainerStartNextAudioDataSequence. Sau khi đƣa tất cả các mẫu vào, ta sử dụng hàm AN_ItemTrainerFlush để kết thúc quá trình huấn luyện.
5, Lúc này ta có thể xóa đối tƣợng Detection Item Trainer bằng lời gọi hàm AN_ItemTrainerDelete, sau đó thì handle của đối tƣợng này sẽ trở thành không hợp lệ.
6, Thông thƣờng, sau khi Item Detector đã xử lý các mẫu âm thanh thì không cần các đối tƣợng Detection Item nữa, khi đó ta có thể gọi hàm AN_DetectionItemDelete để giải phóng bộ nhớ đang bị các đối tƣợng Detection Item chiếm giữ.
8. Item Detector
Sau khi tạo và huấn luyện các đối tƣợng Detection Item, ta có thể sử dụng Item Detector để phân tích một luồng âm thanh và đƣa ra các thông tin cần thiết.
Để sử dụng Item Detector, ta làm theo các bƣớc sau:
1, Tạo lập và huấn luyện các đối tƣợng Detection Item (nhƣ đã nói ở phần trên).
2, Khởi tạo đối tƣợng Item Detector bởi lời gọi hàm AN_ItemDetectorCreate. Hàm trả về một handle tƣơng ứng.
3, Đƣa các đối tƣợng Detection Item đã đƣợc huấn luyện vào bộ phân tích bởi lời gọi hàm AN_ItemDetectorAddItem. Trong trƣờng hợp không cần thiết, ta có thể xoá bất kỳ đối tƣợng nào trong số đó nhờ hàm AN_ItemDetectorDeleteItem.
4, Mặc dù đã đƣa một đối tƣợng Detection Item vào bộ phân tích rồi, ta vẫn có thể xóa nó bằng lời gọi hàm AN_DetectionItemDelete.
5, Đƣa dữ liệu âm thanh cần phân tích vào bởi lời gọi hàm AN_ItemDetectorProcessAudioData (ta có thể dùng CoolRec API để đọc từ bất kỳ tệp âm thanh nào trong trƣờng hợp ta cần đến chức năng này). Sau khi đã cung cấp tất cả các dữ liệu âm thanh cần thiết, gọi hàm AN_ItemDetectorFlush để hệ thống kết thúc quá trình xử lý dữ liệu âm thanh
6, Trong khi cung cấp dữ liệu âm thanh và sau lời gọi hàm AN_ItemDetectorFlush, ta có thể lấy kết quả phân tích bằng cách gọi hàm AN_ItemDetectorGetNextResult. Đối tƣợng Item Detector lƣu giữ danh sách tất cả các kết quả đã đƣợc phân tích và lần lƣợt đƣa các kết quả ra theo thứ tự. Nếu không còn kết quả nào nữa thì hàm trả về mã lỗi ANE_NO_MORE_RESULTS_AVAILABLE
7, Sau khi kết thúc việc phân tích, ta có thể xoá đối tƣợng Item Detector bởi lời gọi hàm AN_ItemDetectorDelete.
3.3. PHÁT TRIỂN ỨNG DỤNG TRUY TÌM ÂM THANH TRÊN CƠ SỞ NỘI DUNG SỬ DỤNG ACTNow C/C++
3.3.1. Khái quát
Dữ liệu âm thanh đƣợc đƣa vào hệ thống thông qua đầu vào. Theo lý thuyết, nguồn dữ liệu âm thanh có thể là bất kỳ, nhƣng thông thƣờng là âm thanh thu qua điện thoại, microphone, truyền hình, đài phát thanh hoặc các tệp âm thanh khác.
Trong bƣớc 1, hệ thống phân tích tách các vectơ đặc trƣng bằng các phƣơng pháp phân tích chuyên biệt nhằm mô hình hóa các đặc trƣng âm nhạc và giọng nói tƣơng ứng.
Trong bƣớc 2, các vectơ đặc trƣng đƣợc sử dụng để phân thành các lớp mịn hơn nhƣ: âm nhạc và âm thanh khác, giọng nói kèm nhạc nền, giọng nói và âm thanh khác...
Bƣớc cuối cùng, kết quả đƣa ra bao gồm: thời gian bắt đầu và kết thúc của mỗi lớp kết quả, xác suất cho mỗi kết quả tƣơng ứng.
Hình 26. Sơ đồ phân tích âm thanh
3.3.1.1. Dữ liệu âm thanh
Các mẫu từ nhiều nguồn âm thanh khác nhau (ví dụ, microphone, điện thoại, các tệp âm thanh...) đƣợc gọi chung là dữ liệu âm thanh.
Các dữ liệu âm thanh đầu vào đƣợc giải nén bằng PCM (bộ điều chế mã xung). Dữ liệu âm thanh từ các hệ thống điện thoại thông thƣờng là 8kHz với biên độ 16 bit. Các nguồn khác có chất lƣợng lấy mẫu cao hơn (ví dụ 32 kHz hoặc 22 kHz) có thể chuyển đổi sang dữ liệu 16 kHz.
Các dữ liệu âm thanh nén (ví dụ nhƣ các định dạng MP3, CELP, ADPCM…) đƣợc chuyển đổi sang PCM (hoặc 8kHz hoặc 16 kHz) trƣớc khi cung cấp cho hệ thống phân tích giọng nói và âm nhạc.
Về căn bản, hai định dạng 8kHz và định dạng các nguồn dữ liệu âm thanh nêu trên là đủ đối với hầu hết ứng dụng.
dữ liệu âm thanh tính toán đặc trƣng phân lớp mô hình huấn luyện quá trình huấn luyện kết quả Detection
3.3.1.2. Tính toán đặc trưng
Các đặc trƣng đƣợc chọn lọc kỹ càng là cần thiết cho hiệu quả chung của toàn bộ hệ thống. Hệ thống sử dụng hai phƣơng pháp phân tích khác nhau. Đối với bộ phân tích giọng nói và âm thanh khác, ta sử dụng phƣơng pháp phân tích hệ số cepstral nhƣ đã mô tả trong chƣơng 2. Đối với bộ phân tích âm nhạc và âm thanh khác, ta sử dụng các đặc trƣng phổ.
Để đạt đƣợc chất lƣợng phân tích cao, khoảng một trăm hệ số cepstral và các vectơ đặc trƣng phổ đƣợc tính trong một giây.
3.3.1.3. Mô hình huấn luyện
Mô hình huấn luyện đƣợc mô tả dựa trên các đặc trƣng của âm thanh. Mô hình lớp giọng nói và các âm thanh khác dựa trên các mô hình Markov ẩn (HMM) nhƣ mô tả trong mục 3.1 của chƣơng 2.
Việc mô hình hóa quá trình biến đổi trong khoảng thời gian mà giọng nói hoặc âm thanh khác hoàn thành bởi cấu trúc hình học của các mô hình HMM. Các kết quả thí nghiệm cho thấy mô hình HMM có ƣu điểm là tránh đƣợc các thay đổi dễ xảy ra trong kết quả nhƣ đối với các mô hình khác.
3.3.1.4. Quá trình huấn luyện
Mô hình HMM đƣợc huấn luyện áp dụng giải thuật khả năng tối đa (EM) nhƣ mô tả trong mục 3.1.2 của chƣơng 2 và sau đó phân tách dựa trên các hàm mật độ xác suất.
Các thí nghiệm khác nhau cho thấy một cấu hình HMM tối ƣu cho ra các kết quả hợp lý là cao hơn so với đa số cách tiếp cận khác.
3.3.1.5. Phân lớp
Việc phân lớp đƣợc thực hiện bằng cách tính toán các khả năng dễ xảy ra tƣơng ứng đối với mỗi mô hình giọng nói với âm thanh khác, âm nhạc với âm thanh khác.
Mô hình HMM cho giọng nói với âm thanh khác đƣợc tổ chức trong một mạng và phản hồi lại toàn bộ để cho phép sửa đổi mô hình.
Một bộ giải mã đƣợc sử dụng để xử lý các đặc trƣng đƣa vào và sau đó xác định đƣờng tƣơng ứng để đi qua mạng.
3.3.1.6. Kết quả
Kết quả thực hiện của hệ thống bao gồm: thời gian bắt đầu và kết thúc của một phân tích và xác suất tƣơng ứng. Một xác suất có giá trị 0,99 có nghĩa là mục (Item) phân tích (âm nhạc hoặc giọng nói) đƣợc hệ thống phân tích rất giống với kết quả tìm ra. Giá trị 0,1 có ý nghĩa ngƣợc lại, và xác suất 0,5 tức là kết quả đƣa ra không rõ ràng.
Để đảm bảo chính xác, hệ thống sử dụng tham số ERR nhƣ mô tả trong mục 3.1.1. của chƣơng 2 để chấp nhận hoặc từ chối kết quả tìm đƣợc.
3.3.2. Sơ đồ khối chức năng
Hệ thống bao gồm các khối chức năng chính sau đây:
Hệ thống phân tích âm thanh Truy vấn Item Bổ sung Item Xóa Item Huấn luyện Chọn mẫu phân tích Phân lớp Xử lý trích đoạn Xử lý cụm từ Xử lý giọng nói Tính toán đặc trƣng Mô hình hóa
3.3.3. Giao diện chƣơng trình
Giao diện chƣơng trình đƣợc minh họa nhƣ hình dƣới đây:
Hình 25. Giao diện chương trình
3.3.3.1. Detection
Chức năng của Detection là có khả năng lƣu một tập các tham số tách sóng đồng thời, tƣơng tự nhƣ một đoạn âm thanh dùng để nhận dạng tiếng chuông reo, các đặc trƣng riêng về giọng nói để phân tích ai là ngƣời nói, hoặc đƣợc diễn đạt một cách chính xác nhằm phân tích âm nhạc hay một đoạn
nhạc nào đó để đánh dấu làm từ khóa. Do đó, mục Detection đòi hỏi các tham số hoặc đặc trƣng phải có mức tin cậy cao.
3.3.3.2. Huấn luyện Detection
Chức năng của tác vụ huấn luyện Detection là: cho phép ngƣời dùng chọn đoạn âm thanh huấn luyện thuộc loại nào trong số các loại sau: đoạn âm thanh (audio clip), ngƣời nói (speaker), và cụm từ khóa (key phrase). Trên các đặc trƣng hoàn toàn khác nhau từ các loại dữ liệu âm thanh đƣợc ngƣời dùng cung cấp, tác vụ huấn luyện có thể trích chọn ra các thông tin cần thiết.
3.3.3.3. Kết quả từ bộ phân tích
Kết quả của Detector là trả lại các giá trị tìm đƣợc từ đoạn âm thanh ngƣời dùng cần tìm. Nó bao gồm các giá trị về khoảng thời gian tìm thấy đối tƣợng, gồm thời gian bắt đầu, thời gian kết thúc (đƣợc tính bằng ms), hoặc các giá trị về xác suất của sự kiện đó và của cả dữ liệu đƣợc nhận dạng trong mục Detection.
Hình 24. Kết quả từ Detector
Ví dụ, ta có hai đoạn âm thanh trong hai tệp là MAN.WAV và WOMEN.WAV đƣợc thu âm riêng giọng nói tƣơng ứng của hai ngƣời nam và nữ. Sau đó ta muốn biết trong một đoạn âm thanh hỗn hợp MIX.WAV có giọng nói của hai ngƣời đó hay không, nếu có thì nó tƣơng ứng với khoảng thời gian nào trong MIX.WAV.
Khi đó, ta tạo ra hai mục (trong trƣờng hợp này là HAI và BINH) tƣơng ứng với tên ngƣời nói trong MAN.WAV và WOMAN.WAV. Kết quả
minh họa ở hình trên cho thấy hệ thống đã phân tích đƣợc trong đoạn âm thanh hỗn hợp MIX.WAV có giọng nói hai ngƣời đó, và khoảng thời gian nào ngƣời nói là BINH (tƣơng ứng với ngƣời nói trong NU.WAV) và khoảng thời gian nào ngƣời nói là HAI (tƣơng ứng với ngƣời nói trong NAM.WAV)...
3.3.3.4. Detector
Mục Detector nhận các đối tƣợng của mục Detection trong giai đoạn chuẩn bị. Sau mỗi lần khởi tạo, nó sẵn sàng để nhận các đặc trƣng âm thanh và do đó, có thể phân tích sự khác nhau của các mục trong Detection.
3.3.4. Kết quả đạt đƣợc
Hệ thống chƣơng trình ứng dụng thử nghiệm có một số ƣu điểm, cũng nhƣ tồn tại một số nhƣợc điểm. Trong đó kết quả đạt đƣợc có thể xem là đáng kể bao gồm:
Tính tƣơng thích với các môi trƣờng cơ sở dữ liệu khác nhau
Chƣơng trình cho phép tích hợp dễ dàng vào bất kỳ môi trƣờng cơ sở