Tải bản đầy đủ - 0 (trang)
Chương 5: Ứng dụng nhận dạng số một người nói

Chương 5: Ứng dụng nhận dạng số một người nói

Tải bản đầy đủ - 0trang

5.2



Xây dựng mơ hình ngơn ngữ



5.2.1 Xây dựng bộ từ điển

Cho hầu hết các ngơn ngữ ta có thể sử dụng các toolkit grapheme to phone như là

Phonetisaurus

Cách thứ 2 dùng texteditor tạo file.dict là phonetic dictionary

Nội dung trong file này được viết theo cách như sau:

- Do sphinx chưa hỗ trợ unicode nên ta sẽ viết theo kiểu ascii các ký thự không

thuộc ascii sẽ viết theo cách gõ telex ví dụ ê = ee.



-



-



Xây dựng bảng phiên âm mức âm vị dưới dạng ascii truy vấn bảng âm vị việt

nam nên sử dụng cách ký tự gõ được trên bàm phím cho tiện lợi, các dấu thanh

điệu được ký hiệu bằng các chữ s,f,r,x,j và space

Cách tốt nhất và chính xác nhất là tra cứu bảng phiên âm tiếng việt và thay các

từ Unicode bằng cách như trên.



Bộ từ điển được tổ chức như sau:

khoong kh oo ngz

moojt m ooj tc

hai h a iz

ba b a

boosn b oos nz

nawm n aw mz

sasu s as uz

baary b aar iz

tasm t as mz

chisn ch is nz

muwowfi m uw owf iz

muwowi m uw ow iz

moost m oos tc

tuw t uw

trawm tr aw mz

linh l i ngz

nghifn ng if nz



Lưu vào file digit.dic để dùng trong mơ hình ngơn ngữ và file digit.dict

Với digit là tên mơ hình muốn tạo

5.2.2 Xây dựng mơ hình ngơn ngữ

Chuẩn bị tập tin văn bản:

Đây là tập tin dạng text ví dụ digit.txt

Do CMUCLMTK chưa hỗ trợ unicode nên ta phải gõ theo kiểu mã ascii và những ký

tự không thuộc ascii ta sẽ dùng kiểu gõ telex như sau:

moojt trawm muwowfi moojt

moojt trawm muwowfi hai

moojt trawm muwowfi ba

moojt trawm muwowfi boosn

moojt trawm muwowfi nawm

moojt trawm muwowfi sasu

moojt trawm muwowfi baary

moojt trawm muwowfi tasm

moojt trawm muwowfi chisn

Trong bài của em thì em xây dựng một tập văn bản corpus.txt nội dung là các số từ

0 đến 9999

khoong

moojt



25



hai

ba

boosn

nawm

sasu

baary

tasm

chisn

muwowfi

muwowfi moojt







. . . . . . . . . . . . . .

chisn nghifn chisn trawm tasm hai

chisn nghifn chisn trawm tasm ba

chisn nghifn chisn trawm tasm tuw

chisn nghifn chisn trawm tasm nawm

chisn nghifn chisn trawm tasm sasu

chisn nghifn chisn trawm tasm baary

chisn nghifn chisn trawm tasm tasm

chisn nghifn chisn trawm tasm chisn

chisn nghifn chisn trawm chisn muwowi

chisn nghifn chisn trawm chisn moost

chisn nghifn chisn trawm chisn hai

chisn nghifn chisn trawm chisn ba

chisn nghifn chisn trawm chisn tuw

chisn nghifn chisn trawm chisn nawm

chisn nghifn chisn trawm chisn sasu

chisn nghifn chisn trawm chisn baary

chisn nghifn chisn trawm chisn tasm

chisn nghifn chisn trawm chisn chisn



Tuy rằng tập tin trên có chất lượng chưa tốt do xác suất của các từ sẽ gần tương

đương nhưng do quy mơ bài tốn nhỏ nên có thể chấp nhận được.

Sau khi có tập tin văn bản ta phát sinh bộ từ vựng trong cùng thư mục chứa tập tin

đó.

Chú ý thay corpus bằng tên file văn bản .txt của bạn

Và thay digit thành tên mơ hình ngơn ngữ mà bạn muốn đặt

Generate vocabulary file:

text2wfreq < corpus.txt | wfreq2vocab > corpus.tmp.vocab



Có thể có những từ vựng mà chúng ta ko mong muốn ta có thể fix chúng trong file

văn bản và generate lại.

Phát sinh bộ từ vựng với chuẩn file arpa

% text2idngram -vocab corpus.vocab -idngram corpus.idngram < corpus.closed.txt

% idngram2lm -vocab_type 0 -idngram corpus.idngram -vocab \



26



digit.vocab -arpa weather.lm



Ngoài chuẩn arpa còn có các chuẩn khác, arpa kích thước lớn nhưng có thể edit,

chuẩn bin (nhị phân) kích thước nhỏ và nhanh hơn.

Convert:



sphinx_lm_convert -i digit.lm -o digit.lm.bin

sphinx_lm_convert -i digit.lm.bin -ifmt bin -o digit.lm -ofmt arpa



5.3



Xây dựng mơ hình âm học



5.3.1 Chuẩn bị các folder và tập tin

Phần này sẽ tiến hành chuẩn bị dữ liệu để build acoustic model

Tạo một thư mục huấn luyện mang tên digit

Tạo hai thư mục con là etc và wav (hoặc gõ lệnh sphinxtrain -t digit setup)

Thay digit bằng tên mơ hình mà bạn muốn train

Sau lệnh sphinxtrain –t digit setup hai thư mục wav và etc được tạo ra, trong thư

mục etc sẽ có file sphinxtrain.cfg ta sẽ thay đổi nội dung file này để cấu hình nội

dung nhận dạng

Cấu túc trong hai thư mục như sau: (khi tạo các file thay digit bằng tên mơ hình của

bạn)









etc





digit.dic - Phonetic dictionary







digit.phone - Phoneset file







digit.lm.DMP - Language model







digit.filler - List of fillers







digit _train.fileids - List of files for training







digit _train.transcription - Transcription for training







digit _test.fileids - List of files for testing







digit _test.transcription - Transcription for testing



wav





speaker_1









speaker_2





-



file_1.wav - Recording of speech utterance

file_2.wav



Trong đó tập tin digit.dic là bộ từ điển phonetic dictionary mà ta tạo từ trước:

Mỗi dòng định nghĩa cách đọc của một từ, tập tin này phân biệt hoa thường. Để

xây dựng tập tin này thì mỗi dòng gồm một từ và cách phát âm của từ đó theo

đơn vị phone.

Sphinx khơng chấp nhận kiểu phiên âm như sau

27



-



mot m o t

Tức là word base thay vào đó ta có thể viết

mot m ot

hoặc

mot m o tc

nếu có các thanh điệu (dấu) ta có thể viết:

moojt m ooj t

hoặc

moojt m oo j t

Tập tin .phone chưa tất cả các âm vị sử dụng trong tập tin .dic và thêm SIL

File phone trong bài demo:

kh

oo

ngz

m

ooj

tc

h

a

iz

b

oos

nz

n

aw

mz

s

as

uz

aar

t

ch

is

uw

owf

ow

tr

l

i

ng

if

SIL



-



Tập tin .lm.DMP hoặc .arpa là tập tin mơ hình ngơn ngữ.



-



Tập tin .filler chứa các âm tiết dùng để làm đầy thông thường là các khoảng lặng

được định nghĩa như sau

28



SIL

SIL

SIL



-



Tập tin digit_train.fileids and digit _test.fileids chứa đường dẫn đến các tập tin

ghi âm nằm trong mục wav (không gi đuôi tập tin vào)

thinh/file_1

thinh/file_2

thinh/file_3

thinh/file_4

thinh/file_5

thinh/file_6

thinh/file_7

thinh/file_8

thinh/file_9

. . . . . . .



-



Chú ý id tập tin là _1, _2 nên viết liên tiếp nhau và không bỏ trống cũng như đảo

lôn thứ tự của chúng

Tập tin digit_train.transcription and digit_test.transcription

Tập tin này gỗm nhiều dòng mỗi dòng là nội dùng của tệp wav đặt giữa hai thẻ

cuối dòng là tên tập tin wav

khoong khoong moojt nghifn baary trawm boosn muwowi chisn trawm

tasm hai nghifn nawm trawm sasu ba
(file_1)

khoong muwowfi hai nghifn moojt trawm sasu tasm nawm trawm

baary chisn nghifn boosn trawm ba muwowi
(file_2)

khoong hai hai nghifn tasm trawm sasu muwowi boosn trawm nawm

chisn nghifn moojt trawm ba baary
(file_3)

khoong ba tasm nghifn hai trawm chisn moost ba trawm nawm tuw

nghifn khoong baary sasu
(file_4)

khoong boosn ba nghifn sasu trawm muwowfi nawm boosn trawm hai

muwowi nghifn chisn trawm baary tasm
(file_5)

khoong nawm moost nghifn tasm trawm hai sasu khoong trawm ba

nawm nghifn chisn trawm boosn baary
(file_6)

khoong sasu tasm nghifn ba trawm nawm moost hai trawm linh sasu

nghifn boosn trawm chisn baary
(file_7)

khoong baary baary nghifn tasm trawm ba moost khoong trawm

boosn chisn nghifn sasu trawm nawm hai
(file_8)

khoong tasm nawm nghifn ba trawm baary tuw tasm trawm linh sasu

nghifn moojt trawm chisn hai
(file_9)

khoong chisn hai nghifn tasm trawm chisn muwowi baary trawm

muwowfi nawm nghifn sasu trawm boosn ba
(file_10)

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .



Đặt tên file trong mục wav file_1 tên tập tin “file” id : 1

-



Dữ liệu âm thanh file wav:

29



Thu âm các file wav có nội dung như mỗi dòng trong file .transciption, tiêu chuẩn

thu âm là: sample rate 16khz đối với ứng dụng desktop và 8khz với ứng dụng

điện thoại, kênh mono (không phải stereo), 16bit. File format wav, raw, sph

Chú ý không dùng 16khz train model với 8khz data hoặc ngược lại, chú ý khi cấu

hình.

Thời lượng ghi âm tham khảo bảng 1 phía dưới

5.3.2 Xây dựng mơ hình âm học

Vào thư mục etc, mở file sphinx_train.cfg để cấu hình

CONFIGURE:

Setup the format of database audio (với định dạng wav)



$CFG_WAVFILES_DIR = "$CFG_BASE_DIR/wav";

$CFG_WAVFILE_EXTENSION = 'wav';

$CFG_WAVFILE_TYPE = 'mswav'; # one of nist, mswav, raw



Configure path to files



# Variables used in main training of models

$CFG_DICTIONARY



= "$CFG_LIST_DIR/$CFG_DB_NAME.dic";



$CFG_RAWPHONEFILE



= "$CFG_LIST_DIR/$CFG_DB_NAME.phone";



$CFG_FILLERDICT



= "$CFG_LIST_DIR/$CFG_DB_NAME.filler";



$CFG_LISTOFFILES



= "$CFG_LIST_DIR/${CFG_DB_NAME}_train.fileids";



$CFG_TRANSCRIPTFILE = "$CFG_LIST_DIR/${CFG_DB_NAME}_train.transcription"



Nếu bạn chạy lệnh setup thì CFG_DB_NAME mặc định là tên database của bạn

Configure model type and model parameters



$CFG_HMM_TYPE = '.cont.'; # Sphinx4, Pocketsphinx



30



#$CFG_HMM_TYPE



= '.semi.'; # PocketSphinx only



#$CFG_HMM_TYPE



= '.ptm.'; # Sphinx4, Pocketsphinx, faster model



Sau đó:



$CFG_FINAL_NUM_DENSITIES = 8;



Tham khảo số DENSITIES ở bảng 1 phía dưới





$CFG_N_TIED_STATES = 200;



Đây là số senones tham khảo bảng 1 phía dưới để cấu hình cho các bộ dữ liệu riêng của

mình.



Configure sound and feature parameters



# Feature extraction parameters

$CFG_WAVFILE_SRATE = 8000.0;

$CFG_NUM_FILT = 31; # For wideband speech it's 40, for telephone 8khz

reasonable value is 31

$CFG_LO_FILT = 200; # For telephone 8kHz speech value is 200

$CFG_HI_FILT = 3500; # For telephone 8kHz speech value is 3500



Chú ý khi gi âm trên smartphone nên chọn tần số lấy mẫu là 8000hz khi đó thì config cũng

phải là 8000hz



31



Configure decoding parameter



$DEC_CFG_DICTIONARY



= "$DEC_CFG_BASE_DIR/etc/$DEC_CFG_DB_NAME.dic";



$DEC_CFG_FILLERDICT



= "$DEC_CFG_BASE_DIR/etc/$DEC_CFG_DB_NAME.filler";



$DEC_CFG_LISTOFFILES



=



"$DEC_CFG_BASE_DIR/etc/${DEC_CFG_DB_NAME}_test.fileids";

$DEC_CFG_TRANSCRIPTFILE =

"$DEC_CFG_BASE_DIR/etc/${DEC_CFG_DB_NAME}_test.transcription";

$DEC_CFG_RESULT_DIR



= "$DEC_CFG_BASE_DIR/result";



# These variables, used by the decoder, have to be user defined, and

# may affect the decoder output

$DEC_CFG_LANGUAGEMODEL_DIR = "$DEC_CFG_BASE_DIR/etc";

$DEC_CFG_LANGUAGEMODEL



= "$DEC_CFG_LANGUAGEMODEL_DIR/digit.lm.DMP";



Bảng 1:

Vocabulary



Hours in db



Senones



Densities



5



200



8



Tidigits Digits Recognition



100



20



2000



8



RM1 Command and Control



5000



30



4000



16



WSJ1 5k Small Dictation



20000



80



4000



32



WSJ1 20k Big Dictation



60000



200



6000



16



HUB4 Broadcast News



60000



2000



12000



64



Fisher Rich Telephone Transcription



20



Example



Sau khi configure xong tất cả thì tiến hành training



32



TRAINNING

Vào trong thư mục chứa dữ liệu mở terminal chạy lệnh:



sphinxtrain run



kết quả có dạng dưới đây là được



Baum welch starting for 2 Gaussian(s), iteration: 3 (1 of 1)

0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%

Normalization for iteration: 3

Current Overall Likelihood Per Frame = 30.6558644286942

Convergence Ratio = 0.633864444461992

Baum welch starting for 2 Gaussian(s), iteration: 4 (1 of 1)

0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%

Normalization for iteration: 4



Sau khi training các files mơ hình acoustic sẽ nằm trong thư mục sau:



model_parameters/.cd_cont_



Khi CFG_FINAL_NUM_DENSITIES = 8; thì number_of senones =200 (tra cứu them trên

trang của cmusphinx)



Tồn bộ mơ hình ngơn ngữ và mơ hình âm học được xây dựng ở đây

https://github.com/chazo1994/projectandroid/tree/master/speech%20recognition%20%20demo



33



5.4



Xây dựng ứng dụng demo tên Funny



5.4.1 Lập trình cho ứng dụng

Sử dụng android studio

Sau khi xây dựng mơ hình ngơn ngữ và mơ hình âm học ta cần copy các file sau

File mơ hình ngơn ngữ: digit.arpa (hoặc .Bin , .DMP)

File từ điển digit.dict

Toàn bộ file trong thư mục: model_parameters/digit.cd_cont_200 với 200 là số senones khi cấu

hình sau đó copy vào một thư mục nào đó (em đặt tên thư mục đó là digit)

Tạo một thư mục tên là sync rồi copy tồn bộ file mơ hình ngơn ngữ, file từ điển và thư mục

digit vừa tạo.

Tiếp theo download app demo cung cấp bởi cmusphinx

https://sourceforge.net/projects/cmusphinx/files/pocketsphinx/5prealpha/pocketsphinxandroid-demo-5prealpha.tar.gz/download

Sau đó làm các bước như sau

- Bật android studio tạo project funny

- copy thư viện pocketsphinx-android-5prealpha-nolib.jar trong app demo download

phía trên vào trong thư mục libs

- tạo thư mục assets trong thư mục main và copy toàn bộ thư mục sync vừa tạo

file trên vào thư mục này

- Copy folder jniLibs trong app demo download phía trên vào app/src/main

Chú ý q trình copy paster này sử dụng android studio và không dùng copy trong

cửa sổ windows

- Copy app/assets.xml trong app demo download phía trên vào folder app của

project chúng ta tạo

Setting permission:

Mở file android manifest them vào 2 dòng sau:







Mở app/builde.grade (hoặc builde.grade(app) trong android studio) them vào cuối cùng đoạn

sau:

ant.importBuild 'assets.xml'

preBuild.dependsOn(list, checksum)

clean.dependsOn(clean_assets)



Vậy là xong phần chuẩn bị và cấu hình

Bây giờ là viết code, ứng dụng này tạm thời chỉ có 1 file MainActivity:

Có các phương thức quan trong sau:

Phương thức cài đặt và cấu hình dữ liệu nhận dạng



34



private void setupRecognitzer(File assetsDir) throws IOException {

// configure recognizer

speechRecognizer = defaultSetup().setAcousticModel(new File(assetsDir,"digit"))

.setDictionary(new File(assetsDir, "digit.dict"))

.setRawLogDir(assetsDir)

.setKeywordThreshold(1e-45f)

.setBoolean("-allphone_ci",true)

.getRecognizer();

speechRecognizer.addListener(this);

//try to inogre creat keywoard-activation search

// and add phonetic search

//speechRecognizer.addKeyphraseSearch(KWS_SEARCH, KEYPHRASE);

File languageModel = new File(assetsDir,"digit.arpa");

speechRecognizer.addNgramSearch(KWS_SEARCH, languageModel);

}



ở đây digit là tên database nhận dạng (đặt lúc xây dựng acoustic model)

có một vấn đề là khi tạo mơ hình language sử dụng các file digit.lm.bin hay digit.lm.DMP thì

báo lỗi mà nhưng file này cho tốc độ chạy nhanh hơn, khi dùng file digit.arpa thì mới ổn.

Lúc này chúng ta có thể bắt đầu nghe tiếng nói với hàm

speechRecognizer.startListening(search_name, 10000);

hoặc: speechRecognizer.startListening(search_name);



Lúc này một luồng (thread) mới được tạo ra

Ta có thể kết thúc với hàm stop() hoặc cancel()

Trong quá trình nghe ta có các phương thức quan trong sau:

onBeginningOfSpeech()



Được gọi khi bắt đầu nói

onEndOfSpeech()



Được gọi khi kết thúc nói

onPartialResult(Hypothesis hypothesis)



Được gọi khi nhận được mỗi phần của tiếng nói (thường là mỗi từ)

onResult(Hypothesis hypothesis)



Được gọi khi kết thúc nhận dạng

Do quá trình nhận dạng chạy trên một luồng riêng do đó ta nên sử dụng lớp AsyncTask

Sau đây là tồn bộ mã nguồn file MainActivity:

package com.example.nguyenvanthinh.funny;



import

import

import

import

import

import

import

import

import

import



android.os.AsyncTask;

android.os.Bundle;

android.support.design.widget.FloatingActionButton;

android.support.design.widget.Snackbar;

android.support.v7.app.AppCompatActivity;

android.support.v7.widget.Toolbar;

android.view.View;

android.view.Menu;

android.view.MenuItem;

android.widget.TextView;



import java.io.File;

import java.io.IOException;



import static edu.cmu.pocketsphinx.SpeechRecognizerSetup.defaultSetup;



35



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Chương 5: Ứng dụng nhận dạng số một người nói

Tải bản đầy đủ ngay(0 tr)

×