Xây dựng hệ thống nhận dạng tiếng nói tiếng việt dựa trên mô hình markov ẩn dùng sphinx

44 589 2
Xây dựng hệ thống nhận dạng tiếng nói tiếng việt dựa trên mô hình markov ẩn dùng sphinx

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chương 1: Tổng quan về nhận dạng tiếng nói1.1 Cách tạo thành tiếng nóiTiếng nói là là song âm la truyền trong môi trường nhất định mang thông tincon người muốn truyền đạt.Sơ đồ bộ máy phát âm của con người:Hình 1: Bộ máy tạo tiếng nóiVocal folds : Dây thanhMouth cavity : tuyến âm (miệng) tạo ra các tấn số formantNasal cavity: (mũi) như hộp cộng hưởng kết hợp với miệng tạo ra các tần sốantiformantKhông khí đi từ phổi đến thanh quản sau đó ra ngoài bằng mũi hoặc miệng trongquá trình di chuyển dưới sự tác động của bộ máy tạo tiếng của con người nên tạo racác sóng âmÂm thanh con người phát ra có hai loại Âm hữu thanh: âm phát ra khi khí đi qua thanh môn kết hợp với dâythanh căng tạo dao động. Âm vô thanh: khi dây thanh môn không giao động hoặc giao động nhỏMô hình tạo tiếng nói fant4 +) Với : G(z): bộ phận nguồn tạo tiếng nói (Pharynx, soft plate,Larynx..) V(z): tuyến âm (Miệng) R(z): Tán xạ môi trường truyềnMô hình toàn điểm cực AR: T(z)=G(z)V(z)R(z) = αA(z)A(z) = 1 + ∑

MICA International Research Insitute Báo cáo nhận dạng tiếng nói Giảng viên hướng dẫn: Đỗ Thị Ngọc Diệp Sinh viên thực hiện: Mã số sinh viên: Lớp: Nguyễn Văn Thịnh 20122512 KSCLC HTTT&TT K57 Hà Nội 29/04/2016 Contents Chương 1: Tổng quan nhận dạng tiếng nói 1.1 Cách tạo thành tiếng nói 1.2 Xử lý tiếng nói 1.3 Nhận dạng tiếng nói 1.3.1 Lịch sử nhận dạng tiếng nói 1.3.2 Tình hình phát triển nhận dạng tiếng nói 1.3.3 Nhập dạng tiếng tự động ASR Chương 2: Xử lý tín hiệu tiếng nói 2.1 Biểu diễn tín hiệu tiếng nói 2.2 Trích chọn đặc trưng MFCC 2.2.1 Tổng quan MFCC 2.2.2 Pre-emphasis 2.2.3 Cửa sổ hóa 10 2.2.4 Biến đổi DFT 11 2.2.5 Mel filterbank log 11 2.2.6 Tính hệ số cepstral IDFT (Dùng DCT), deltas, energy 13 Chương 3: Mơ hình markov ẩn 13 3.1 Markov chain 13 3.2 Hidden Markov Model 14 3.3 Thuật toán Forward Backward 15 3.4 Thuật toán Viterbi 18 3.5 Thuật toán Baum Welch 19 Chương 4: Áp dụng mơ hình markov ẩn nhận dạng tiếng nói 20 4.1 Mơ hình ngơn ngữ N-gram 20 4.2 Quá trình nhận dạng 21 4.3 Áp dụng mơ hình markov ẩn 23 Chương 5: Ứng dụng nhận dạng số người nói 24 5.1 Cài đặt pocketShinx 24 5.2 Xây dựng mơ hình ngơn ngữ 25 5.2.1 Xây dựng từ điển 25 5.2.2 Xây dựng mơ hình ngơn ngữ 25 5.3 Xây dựng mơ hình âm học 27 5.3.1 Chuẩn bị folder tập tin 27 5.3.2 Xây dựng mơ hình âm học 30 5.4 Xây dựng ứng dụng demo tên Funny 34 5.4.1 Lập trình cho ứng dụng 34 5.4.2 Cài đặt chạy ứng dụng 41 Danh mục hình ảnh 43 Tài liệu tham khảo 44 Chương 1: Tổng quan nhận dạng tiếng nói Cách tạo thành tiếng nói Tiếng nói là song âm la truyền môi trường định mang thông tin người muốn truyền đạt Sơ đồ máy phát âm người: 1.1 Hình 1: Bộ máy tạo tiếng nói Vocal folds : Dây Mouth cavity : tuyến âm (miệng) tạo số formant Nasal cavity: (mũi) hộp cộng hưởng kết hợp với miệng tạo tần số antiformant Khơng khí từ phổi đến quản sau ngồi mũi miệng trình di chuyển tác động máy tạo tiếng người nên tạo sóng âm Âm người phát có hai loại - Âm hữu thanh: âm phát khí qua mơn kết hợp với dây căng tạo dao động - Âm vô thanh: dây môn không giao động giao động nhỏ Mơ hình tạo tiếng nói fant +) Với : G(z): phận nguồn tạo tiếng nói (Pharynx, soft plate,Larynx ) V(z): tuyến âm (Miệng) R(z): Tán xạ mơi trường truyền Mơ hình tồn điểm cực AR: T(z)=G(z)*V(z)*R(z) = α/A(z) 2𝐾+1 A(z) = + ∑𝑖=0 𝑎𝑖 ∗ 𝑧 −𝑖 Xử lý tiếng nói Xử lý tiếng nói nghiên cứu tiếng nói người dạng tín hiệu phương pháp xử lý tín hiệu Các phần xử lý tiếng nói: + Nhận dạng tiếng nói (speech recognition): mục đích phân tích xử lý tiếng nói dạng tín hiệu chuyển nội dung thành đầu vào máy tính cách có ngữ nghĩa + Nhận dạng người nói (speaker recognition) +Tăng chất lượng tiếng nói + Mã hóa tiếng nói: mã hóa liệu tiếng nói (sau tiếng nói lấy mẫu lượng tử hóa) giúp truyền tiếng nói q trình truyền tin ( để nén liệu, chống nhiễu, sửa sai…) + Tổng hợp tiếng nói: tạo tiếng nói cách nhân tạo + Phân tích giọng nói + Định vị nguồn âm 1.2 1.3 Nhận dạng tiếng nói 1.3.1 Lịch sử nhận dạng tiếng nói Lịch sử nhận dạng tiếng nói trải qua năm hệ: Thế hệ 1: Bắt đầu từ năm 30-50 kỷ trước sử dụng phương thức ad hoc (trong mạng máy tính????) nhận dạng âm, từ với số lượng nhỏ Thế hệ 2: năm 50-60 sử dụng phương thức acoustic-phonetic để nhận dạng âm vị (phonemes) , âm tiết, từ vựng, số Thế hệ 3: từ năm 60-80 sử dụng phương pháp nhận dạng mẫu để nhận dạng , lượng tử hóa vecter (thương theo 8bit, 16bit) để giảm dung lượng nhận dạng từ vựng vừa nhỏ Thế hệ 4: từ năm 80- 2000: sử dụng phương pháp thống kê với mơ hình markov ẩn (hidden markov model) mơ tính chất thống kê tín hiệu tiếng nói, số phương pháp khác … Thế hệ 5: phát triển sử dụng giải pháp xử lý song song để tang độ tin cậy, kết hợp phương pháp acousticphonetic HMM để phát hiện, sửa chữa ngoại lệ ngơn ngữ 1.3.2 Tình hình phát triển nhận dạng tiếng nói Các phương thức sử dụng phổ biến: Hidden markov model: Dynamic time warping Neural network Deep neural network Ứng dụng Trong hệ thống thông minh sử dụng điều khiển giọng nói Trong quân Trong y tê: kiểm tra tổn thương quản… Trong công nghệ thông tin: trợ lý ảo … Trong giáo dục: giúp xây dựng phần mềm học ngôn ngữ 1.3.3 Nhập dạng tiếng tự động ASR Giao tiếp ngơn ngữ nói người máy: Hình 2: Mơ hình giao tiếp tiếng nói người máy Tiếng nói người đưa vào máy thông qua trình nhận dạng(recognition) chuyển thành đoạn văn bản, từ đoạn văn máy học cách hiểu nghĩa tạo thành tiếng nói từ văn thơng qua q trình tổng hợp tiếng nói (synthesis) Kiến trúc nhận dạng tiếng nói tự động automatic speech recognition Hình 3: Kiến trúc ASR ARS chuyển đổi từ tín hiệu tiếng nói thành từ câu có nghĩa - Hệ thống nhận dạng tiếng nói liên tục chia tiếng nói liên tục thành lớp nhận dạng với mục đích ghi chép - -  Lớp ghi chép có mục tiêu nhận dạng từ  Lớp hiểu có mục tiêu hiểu nghĩa câu Quá trình hoạt động ARS  Quá trình nhận dạng : vector đặc trưng đem so sánh với mẫu tham khảo sau hệ thống tính tốn độ tương đồng (dùng likelihood) vector đặc trưng với mẫu tham khảo.(thuật tốn Viterbi) vector có độ tương đồng cao vector kết nhận dạng (vector thường đặc trưng phone)  Quá trình huấn luyện: xây dựng vector đặc trưng sau sử dụng vector tham số đầu vào để thực nhận dạng vector đặc trưng đưa vào hệ thống để ước lượng tham số mẫu tham khảo, mẫu tham khảo mô từ đơn âm đơn vị tiếng nói (phonetic) Phương pháp để trích trọn đặc trưng phổ biến mạch lọc mel kết hợp với biến đổi phổ mel sang miền cepstral (MFFC) Chương 2: Xử lý tín hiệu tiếng nói 2.1 Biểu diễn tín hiệu tiếng nói Tín hiệu tiếng nói miền thời gian liên tục khó để máy tính thiết bị điện tử sử dụng nên ta phải rời rạc hóa cách lấy mẫu lượng tử hóa lúc máy tính xử lý Nhưng để khảo sát miền thời gian việc kháo sát xử lý khó khan phải sử dụng them khách miền khác Ta xem sé việc chuyển đổi sang hai miền miền tần số miến cepstral Biến đổi sang miền tần số: Discrete time fourier transform Tín hiệu vào x[n] Mặc dù x[n] rời rạc X(e^jw) liên tục tuần hoàn miền phổ Phép nhân chập: Nhân chập với hàm cửa sổ w[n]: Với x[n] tín hiệu vào, y[n] tín hiệu ra, w[n] hàm cửa số, h[n] thường đáp ứng xung hệ thống ( xét biến hệ thống cụ thể) Biến đổi fourier khoảng thời gian hữu hạn: Nếu ta có n cố định thì: Hai biểu thức có ý nghĩa Xn(e^jw) biến đổi fourier tín hiệu liên tục bên ngồi cửa sổ w[n] = Có loại cửa số là: chữ nhật,hanning, hamming, tam giác… Discrete of fourier transform Do biến đổi discrete time fourier transform biến đổi từ tín hiệu vơ hạn thực tế tín hiệu hữu hạn nên ta phải dùng đến phép biến đổi DFT Tín hiệu vào x[n] rời rạc hữu hạn Với M>=N điểm lớn N khơng ta tín hiệu miền tần số X[k] Biến đổi sang miền cepstral Mục đích nghiên cứu phép nhân chập ( giúp tìm formant ) tìm đặc tính tín hiệu tiếng nói tạo Ta có x1*x2= X1.X2=X(z) miền Z Lấy logarithm X(z) ta Ký hiệu X1,X2,x1,x2 tương tự X(z) mũ phía Nếu X ˆ (z) giá trị hợp lệ biến đổi z ta có: Chuyển trang biến đổi fourier z=e^-jw Suy Biến đổi fourier ngược ta được: C[n] biến đổi cepstrum Với trường hợp biến đổi fourier DFT ta thấy: Ứng dụng vào tín hiệu tiếng nói Mơ hình tín hiệu tiếng nói: Âm hữu thanh: Âm vơ thanh: Từ mơ hình ta phân tích phép nhân chập cách nhân cepstrum với cửa sổ phù hợp: Với e D∗ đặc trưng hệ thống chuyển đổi sang phép nhân chập Hệ thống nhận dạng tiếng nói sử dụng cách biểu diễn tín hiệu tập hệ số cepstral 2.2 Trích chọn đặc trưng MFCC 2.2.1 Tổng quan MFCC Hình 4: Tính 39 MFCC từ tín hiệu vào Tín hiệu tiếng nói dạng sóng âm xử lý chuyển thành tín hiệu điện tương tự, tín hiệu chuyển sang dạng tín hiệu số qua hai bước lấy mẫu lượng tử hóa (quá trình lấy mẫu phải thỏa mãn tiêu chuẩn Nyquist) sau đưa vào hệ thống nhận dạng tiếng nói Trong hệ thống nhận dạng tín hiệu tiếng nói phân tích thơng qua q trình trích chọn đặc trưng để lấy đặc trưng tiếng nói đưa vào hệ thống nhận dạng Ở sử dụng phương pháp trích chọn đặc trưng MFCC gồm có cơng đoạn biểu diễn hình Đầu MFCC 39 đặc trưng, 12 hệ số ceptral (hệ số MFCC),12 deltas ceptral, 12 deltas deltas cepstral, energy, delta energy, delta delta energy 2.2.2 Pre-emphasis Do cấu trúc đặc biệt môi trường quản nên mức lượng (cường độ sóng) tần số cao suy giảm so với tần số thấp mà tần số cao thông tin Formant có nhiều giá trị cho acoustic model làm tăng độ xác nhận dạng phone ta cần làm tăng energy tín hiệu tần số cao, trình gọi preemphasis Pre-emphasis sử dụng lọc nhận tín hiệu đầu vào đầu tín hiệu mong muốn : Đầu vào: x[n] Đầu ra: y[n] = x[n] + αx[n-1] với 0,9≤α≤1 H(z) = – αz^-1 2.2.3 Cửa sổ hóa Tín hiệu tiếng nói non-stationary signal thuộc tính thống kê khơng phải số thay vào với giả thuyết tín hiệu stationary khoảng thời gian đủ ngắn ta có có đại lượng đặc trưng thống kê coi khơng đổi Do ta lấy đặc trưng riêng biệt subphone thời gian ngắn Để trích tín hiệu khoảng thời gian ngắn ta sử dụng cửa sổ nhỏ tín hiệu tríc cửa sổ gọi frame Trên tồn đoạn tín hiệu trích thành T frame Đặc trưc trình trích rút tham số: độ rộng frame, hình dạng cửa sổ, frameshift Ta lấy T frame từ tín hiệu, frame có độ ơng khoảng 20-40 ms trung bình 30ms, lấy liên tiếp frame cho frameshift cách chừng 10ms Ta lấy frame từ tín hiệu cách nhân với hàm cửa sổ y[n]=w[n]s[n] Thông thường sử dụng cửa sổ hamming 2𝜋𝑛 0,54 − 0,46 cos ( );0 ≤ 𝑛 ≤ 𝑁 − w[n] = { 𝑁 Với N số mẫu frame Mỗi frame đặc trưng thông số thơng số quan sát đầu vào ot HMM Hình 5: trình nhân với hàm cửa sổ 10 Thu âm file wav có nội dung dịng file transciption, tiêu chuẩn thu âm là: sample rate 16khz ứng dụng desktop 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 ngược lại, ý cấu hình Thời lượng ghi âm tham khảo bảng phía 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 CFG_DB_NAME mặc định tên database 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 phía Và $CFG_N_TIED_STATES = 200; Đây số senones tham khảo bảng phía để cấu hình cho liệu riêng 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ú ý gi âm smartphone nên chọn tần số lấy mẫu 8000hz config phải 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 200 Tidigits Digits Recognition 100 20 2000 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 configure xong tất tiến hành training 32 TRAINNING Vào thư mục chứa liệu mở terminal chạy lệnh: sphinxtrain run kết có dạng Baum welch starting for Gaussian(s), iteration: (1 of 1) 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% Normalization for iteration: Current Overall Likelihood Per Frame = 30.6558644286942 Convergence Ratio = 0.633864444461992 Baum welch starting for Gaussian(s), iteration: (1 of 1) 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% Normalization for iteration: Sau training files mơ hình acoustic nằm thư mục sau: model_parameters/.cd_cont_ Khi CFG_FINAL_NUM_DENSITIES = 8; number_of senones =200 (tra cứu them trang cmusphinx) Toàn mơ hình ngơn ngữ mơ hình âm học xây dựng 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 xây dựng mơ hình ngơn ngữ mơ hình âm học ta cần copy file sau File mơ hình ngơn ngữ: digit.arpa (hoặc Bin , DMP) File từ điển digit.dict Toàn file thư mục: model_parameters/digit.cd_cont_200 với 200 số senones cấu hình sau copy vào thư mục (em đặt tên thư mục digit) Tạo thư mục tên sync copy toàn file mơ hình ngơn ngữ, file từ điển thư mục digit vừa tạo Tiếp theo download app demo cung cấp cmusphinx https://sourceforge.net/projects/cmusphinx/files/pocketsphinx/5prealpha/pocketsphinxandroid-demo-5prealpha.tar.gz/download Sau làm bước sau - Bật android studio tạo project funny - copy thư viện pocketsphinx-android-5prealpha-nolib.jar app demo download phía vào thư mục libs - tạo thư mục assets thư mục main copy toàn thư mục sync vừa tạo file vào thư mục - Copy folder jniLibs app demo download phía vào app/src/main Chú ý trình copy paster sử dụng android studio không dùng copy cửa sổ windows - Copy app/assets.xml app demo download phía vào folder app project tạo Setting permission: Mở file android manifest them vào dòng sau: Mở app/builde.grade (hoặc builde.grade(app) android studio) them vào cuối đoạn sau: ant.importBuild 'assets.xml' preBuild.dependsOn(list, checksum) clean.dependsOn(clean_assets) Vậy xong phần chuẩn bị cấu hình Bây viết code, ứng dụng tạm thời có file MainActivity: Có phương thức quan sau: Phương thức cài đặt cấu hình 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); } digit tên database nhận dạng (đặt lúc xây dựng acoustic model) có vấn đề tạo mơ hình language sử dụng file digit.lm.bin hay digit.lm.DMP báo lỗi mà file cho tốc độ chạy nhanh hơn, dùng file digit.arpa ổn Lúc 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 luồng (thread) tạo Ta kết thúc với hàm stop() cancel() Trong q trình nghe ta có phương thức quan sau: onBeginningOfSpeech() Được gọi bắt đầu nói onEndOfSpeech() Được gọi kết thúc nói onPartialResult(Hypothesis hypothesis) Được gọi nhận phần tiếng nói (thường từ) onResult(Hypothesis hypothesis) Được gọi kết thúc nhận dạng Do trình nhận dạng chạy luồng riêng ta nên sử dụng lớp AsyncTask Sau toàn 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 import import import import edu.cmu.pocketsphinx.Assets; edu.cmu.pocketsphinx.Hypothesis; edu.cmu.pocketsphinx.RecognitionListener; edu.cmu.pocketsphinx.SpeechRecognizer; public class MainActivity extends AppCompatActivity implements RecognitionListener{ private private private private SpeechRecognizer speechRecognizer; static final String KWS_SEARCH = "moojt"; static final String KWS_PHONE = "hai"; static final String KEYPHRASE = "ba"; private TextView tvResult; private TextView tvResultNumber; private TextView tvError; private String number[] = {"khoong","moojt","hai","ba","boosn","nawm","sasu","baary","tasm","chisn","muwowfi"," muwowi", "moost","nghifn","trawm","linh","tuw"}; private String numberCorrespond[] = {"khơng","một","hai","ba","bốn","năm","sáu","bẩy","tám","chín","mười","mươi", "mốt","nghìn","trăm","linh","tư"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); tvResult = (TextView) findViewById(R.id.result); tvResultNumber = (TextView) findViewById(R.id.tvResultNumber); tvError = (TextView) findViewById(R.id.error); tvError.setText("Click button to start"); new AsyncTask(){ @Override protected Exception doInBackground(Void params) { try { Assets assets = new Assets(MainActivity.this); File assetDir = assets.syncAssets(); setupRecognitzer(assetDir); } catch (IOException e){ e.printStackTrace(); return e; } publishProgress(); return null; 36 } @Override protected void onProgressUpdate(Void values) { super.onProgressUpdate(values); } @Override protected void onPostExecute(Exception result) { super.onPostExecute(result); if(result != null) { tvError.setText("Failed to init recognizer " + result ); } else { FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Nguyễn Văn Thịnh", Snackbar.LENGTH_LONG) setAction("Action", null).show(); tvError.setText("Preparing to the recognizer "); startListening(); } }); } } }.execute(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } 37 private void startListening() { stopListening(); speechRecognizer.startListening(KWS_SEARCH, 10000); } private void stopListening(){ speechRecognizer.stop(); } 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); } @Override public void onBeginningOfSpeech() { } @Override public void onEndOfSpeech() { stopListening(); tvError.setText("Starting"); startListening(); } @Override public void onPartialResult(Hypothesis hypothesis) { if(hypothesis == null) return; String text =hypothesis.getHypstr(); tvResult.setText(converSequence(text)); 38 tvResultNumber.setText(convertSequenceToNumber(text)); } @Override public void onResult(Hypothesis hypothesis) { if(hypothesis != null){ String text = hypothesis.getHypstr(); tvResult.setText(converSequence(text)); tvResultNumber.setText(convertSequenceToNumber(text)); } } @Override public void onError(Exception e) { tvError.setText(e.getMessage()); } @Override public void onTimeout() { stopListening(); } @Override protected void onDestroy() { super.onDestroy(); speechRecognizer.cancel(); speechRecognizer.shutdown(); } //below code to convert sequence ascii to unicode and convert sequence ascii to number String detectNumberToString(String inputNumber) { // string line ="" int i = 0, length = number.length; for(i=0;i

Ngày đăng: 19/03/2018, 23:04

Từ khóa liên quan

Mục lục

  • Chương 1: Tổng quan về nhận dạng tiếng nói

    • 1.1 Cách tạo thành tiếng nói

    • 1.2 Xử lý tiếng nói

    • 1.3 Nhận dạng tiếng nói

      • 1.3.1 Lịch sử của nhận dạng tiếng nói

      • 1.3.2 Tình hình phát triển nhận dạng tiếng nói

      • 1.3.3 Nhập dạng tiếng nó tự động ASR

      • Chương 2: Xử lý tín hiệu tiếng nói

        • 2.1 Biểu diễn tín hiệu tiếng nói

        • 2.2 Trích chọn đặc trưng MFCC

          • 2.2.1 Tổng quan về MFCC

          • 2.2.2 Pre-emphasis

          • 2.2.3 Cửa sổ hóa

          • 2.2.4 Biến đổi DFT

          • 2.2.5 Mel filterbank log

          • 2.2.6 Tính hệ số cepstral bởi IDFT (Dùng DCT), deltas, energy

          • Chương 3: Mô hình markov ẩn

            • 3.1 Markov chain

            • 3.2 Hidden Markov Model

            • 3.3 Thuật toán Forward và Backward

            • 3.4 Thuật toán Viterbi

            • 3.5 Thuật toán Baum Welch

            • Chương 4: Áp dụng mô hình markov ẩn trong nhận dạng tiếng nói

              • 4.1 Mô hình ngôn ngữ N-gram

              • 4.2 Quá trình nhận dạng

              • 4.3 Áp dụng mô hình markov ẩn

Tài liệu cùng người dùng

Tài liệu liên quan