(Luận văn thạc sĩ) Nghiên cứu về nhận dạng tiếng nói ứng dụng vào điều khiển xe lăn(Luận văn thạc sĩ) Nghiên cứu về nhận dạng tiếng nói ứng dụng vào điều khiển xe lăn(Luận văn thạc sĩ) Nghiên cứu về nhận dạng tiếng nói ứng dụng vào điều khiển xe lăn(Luận văn thạc sĩ) Nghiên cứu về nhận dạng tiếng nói ứng dụng vào điều khiển xe lăn(Luận văn thạc sĩ) Nghiên cứu về nhận dạng tiếng nói ứng dụng vào điều khiển xe lăn(Luận văn thạc sĩ) Nghiên cứu về nhận dạng tiếng nói ứng dụng vào điều khiển xe lăn(Luận văn thạc sĩ) Nghiên cứu về nhận dạng tiếng nói ứng dụng vào điều khiển xe lăn(Luận văn thạc sĩ) Nghiên cứu về nhận dạng tiếng nói ứng dụng vào điều khiển xe lăn(Luận văn thạc sĩ) Nghiên cứu về nhận dạng tiếng nói ứng dụng vào điều khiển xe lăn(Luận văn thạc sĩ) Nghiên cứu về nhận dạng tiếng nói ứng dụng vào điều khiển xe lăn(Luận văn thạc sĩ) Nghiên cứu về nhận dạng tiếng nói ứng dụng vào điều khiển xe lăn
ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG HÀ THỊ THU GIANG NGHIÊN CỨU VỀ NHẬN DẠNG TIẾNG NÓI ỨNG DỤNG VÀO ĐIỀU KHIỂN XE LĂN LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH THÁI NGUYÊN - 2017 ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG HÀ THỊ THU GIANG NGHIÊN CỨU VỀ NHẬN DẠNG TIẾNG NÓI ỨNG DỤNG VÀO ĐIỀU KHIỂN XE LĂN Chuyên ngành: Khoa học máy tính Mã số: 60.48.01.01 LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH Người hướng dẫn khoa học: TS Vũ Việt Vũ THÁI NGUYÊN - 2017 i LỜI CAM ĐOAN Tôi xin cam đoan luận văn “Nghiên cứu nhận dạng tiếng nói ứng dụng vào điều khiển xe lăn” cơng trình nghiên cứu riêng tơi, kết nghiên cứu trình bày luận án trung thực, khách quan chưa dùng bảo vệ để lấy học vị Trong phần kiến thức chung, nghiên cứu giải thuật áp dụng tơi có tham khảo số tài liệu có trích dẫn đầy đủ Nếu sai tơi hồn toàn chịu trách nhiệm trước hội đồng khoa học trước pháp luật Thái Nguyên, tháng 11 năm 2017 Tác giả luận văn Hà Thị Thu Giang ii LỜI CẢM ƠN Đầu tiên, em xin bày tỏ lòng biết ơn chân thành tới thầy Vũ Việt Vũ, người tận tình hướng dẫn tạo điều kiện thuận lợi để em hoàn thành luận văn Em xin cảm ơn dạy dỗ giúp đỡ nhiệt tình tất quý thầy cô trường đại học Công Nghệ Thông Tin Truyền Thông Thái Nguyên Tất kiến thức mà em truyền đạt hành trang quí giá đường học tập, làm việc nghiên cứu sau Em xin chân thành cảm ơn! Thái Nguyên, tháng năm 2017 Tác giả luận văn Hà Thị Thu Giang iii MỤC LỤC LỜI CAM ĐOAN i LỜI CẢM ƠN ii MỤC LỤC iii DANH MỤC TỪ VIẾT TẮT v DANH MỤC CÁC BẢNG vi DANH MỤC CÁC HÌNH vii MỞ ĐẦU .1 Chương .3 TỔNG QUAN VỀ NHẬN DẠNG TIẾNG NÓI 1.1 Tổng quan lĩnh vực xử lý tiếng nói .3 1.1.1 Tiếng nói gì? 1.1.2 Biểu diễn tín hiệu tiếng nói 1.1.3 Các toán lĩnh vực xử lý tiếng nói 1.2 Nhận dạng tiếng nói 1.2.1 Khái niệm nhận dạng tiếng nói 1.2.2 Tổng quan toán nhận dạng 1.2.3 Các bước xử lý tốn nhận dạng tiếng nói 11 1.3 Các khó khăn gặp phải nghiên cứu nhận dạng tiếng nói 14 1.4 Nghiên cứu nhận dạng tiếng nói Việt Nam 15 1.5 Ứng dụng 16 1.6 Kết luận 16 Chương 17 NGHIÊN CỨU MỘT SỐ PHƯƠNG PHÁP NHẬN DẠNG TIẾNG NÓI 17 2.1 Mơ hình Markov ẩn (Hidden Markov Model - HMM) 17 2.1.1 Chuỗi Markov 17 2.1.2 Mơ hình Markov ẩn 18 2.1.3 Tính Likelihood: thuật toán Forward .21 2.1.4 Thuật toán Viterbi cho toán giải mã 25 2.1.5 Học mơ hình Markov ẩn: Thuật tốn Forward-Backward 27 iv 2.2 Mạng Nơ ron nhân tạo 28 2.2.1 Cấu trúc mạng Nơron .28 2.2.2 Mạng Nơ ron lan truyền thẳng lớp 30 2.2.3 Mạng Nơ ron lan truyền thẳng nhiều lớp 31 2.2.4 Học mạng Nơ ron nhiều lớp 32 2.2.5 Học xây dựng cấu trúc mạng nơ ron 33 2.3 Mô hình âm học 34 2.3.1 Mơ hình tốn học hệ thống nhận dạng 34 2.3.2 Đơn vị huấn luyện cho Tiếng Việt 34 2.4 Mô hình ngơn ngữ 35 2.5 Kết luận 36 Chương 37 MÔ PHỎNG HỆ THỐNG ĐIỀU KHIỂN XE LĂN BẰNG TIẾNG NÓI .37 3.1 Giới thiệu 37 3.2 Giới thiệu hệ thống xe lăn quy trình điều khiển 39 3.2.1 Giới thiệu thành phần xe lăn 39 3.2.2 Quy trình điều khiển hoạt động xe lăn .39 3.3 Nhiệm vụ chức hệ thống .40 3.3.1 Nhiệm vụ hệ thống .40 3.3.2 Chức hệ thống 40 3.4 Thiết kế hệ thống điều khiển xe lăn 40 3.4.1 Phần mềm, thư viện CSDL nhận dạng 40 3.4.2 Các bước giải thuật điều khiển xe lăn 41 3.4.3 Thiết kế phần mềm 43 3.5 Chạy thử 51 KẾT LUẬN .52 Những kết đạt .52 Hướng phát triển đề tài 52 TÀI LIỆU THAM KHẢO 54 v DANH MỤC TỪ VIẾT TẮT FFT - Fast Fourier Transform DFT - Digital Fourier Transform ADC - Analog Digital Converter MFCC - Mel Frequency Cepstrum Coeffient LPC - Linear Prediction Coding PCA - Principle Components Analysis HMM - Hidden Markov Model NNs - Neural Networks BP - Back Propagation ICA - Independent Component Analysis DC motor - Dirrect Current DCT - Discrete Cosine Transform vi DANH MỤC CÁC BẢNG Bảng 1.1 Chất lượng số hệ thống nhận dạng Bảng 3.1 Ví dụ tập liệu huấn luyện 30 vii DANH MỤC CÁC HÌNH Hình 1.1 Biểu diễn tín hiệu tiếng nói dạng sóng theo thời gian Hình 1.2 Phổ tín hiệu tiếng nói Hình 1.3 Biểu diễn tín hiệu tiếng nói spectrogram Hình 1.4 Các tốn ứng dụng lĩnh vực xử lý tiếng nói Hình 1.5 Tổng quan hệ thống nhận dạng tiếng nói Hình 1.6 Ví dụ việc lấy lấy mẫu theo khung 13 Hình 1.7 Các bước q trình trích chọn đặc trưng theo phương pháp MFCC FFT biến đổi Fourrier nhanh, Power Spectrum phổ cơng suất tín hiệu DCT biến đổi cosin rời rạc 13 Hình 1.8 Giao diện phần mềm iSago 15 Hình 2.1 Mơ hình học có giám sát 10 Hình 2.2 Ví dụ chuỗi Markov biểu diễn trạng thái thời tiết 17 Hình 2.3 Ví dụ mơ hình Markov ẩn 20 Hình 2.4 Minh họa q trình tính tốn theo thuật tốn Forward 23 Hình 2.5 Minh họa việc tính giá trị t(j) 24 Hình 2.6 Thuật tốn Forward 24 Hình 2.7 Thuật toán Viterbi 26 Hình 2.8 Ví dụ thuật tốn Viterbi 27 Hình 2.9 Mơ hình tốn học cho Nơ ron 28 Hình 2.10 Ví dụ hàm kích hoạt ngưỡng cứng (a) threshold(z) với đầu (b) hàm logistic với Logistic( z ) 29 ez Hình 2.11 Ví dụ mạng Nơ ron hồi quy 30 Hình 2.12 Mạng perceptron với hai đầu vào hai đầu 31 43 3.4.3 Thiết kế phần mềm Hình 3.6 Sơ đồ khối trình nhận dạng tiếng nói Sphinx-4 Chức quan trọng nhận dạng tiếng nói, sử dụng công cụ mã nguồn mở Sphinx-4 (hình 3.6) Trong tóm tắt chức sau: - Frontend: Từ Input liệu đầu vào chuỗi sóng âm mã hóa trích chọn đặc trưng qua Fronend thu đặc trừng feature gửi vào giải mã (decoder) Phương pháp thường dùng cơng đoạn MFCC chúng chuyển đổi tín hiệu âm sang dạng vector - Linguist: Chức Linguist cung cấp mơ hình ngữ âm, từ điển mơ hình ngơn ngữ nhằm xây dựng đồ thị cho việc tìm kiếm tảng sử dụng mơ hình Markov ẩn mơ hình ngơn ngữ 44 dùng để tính xác xuất tiên nghiệm, mơ hình ngữ âm dùng để tính giá trị likelihood Cụ thể mơ hình ngữ âm Gaussian áp dụng để tính likelihood quan sát vector đặc trưng - Decoder: Bộ giải mã (decoder) có nhiệm vụ sử dụng mơ hình tìm kiếm liệu đầu vào kết Mơ hình sử dụng thuật tốn Viterbi với đầu vào gồm vector đầu vào, mơ hình ngữ âm Gausian mơ hình ngơn ngữ nhằm tìm kiếm xâu kí tự biểu diễn chuỗi từ đầu - Ngồi giá trị tham số mơ hình Markov sinh pha huấn luyện nhúng cách sử dụng từ vựng đầu vào Như thư viện chuẩn Andtoid, phải khai báo thêm thư viện từ Sphinx-4 sau: import edu.cmu.pocketsphinx.Assets; import edu.cmu.pocketsphinx.Hypothesis; import edu.cmu.pocketsphinx.RecognitionListener; import edu.cmu.pocketsphinx.SpeechRecognizer; import static edu.cmu.pocketsphinx.SpeechRecognizerSetup.defaultSetup; Các thư viện có hàm tương ứng cho việc nhận dạng tiếng nói điện thoại Cài đặt tham số môi trường nhận dạng: private void setupRecognizer(File assetsDir) throws IOException { recognizer = defaultSetup() setSampleRate(16000) setAcousticModel(new File(assetsDir, "dkxelan")) setDictionary(new File(assetsDir, "dkxelan.dict")) setRawLogDir(assetsDir) setKeywordThreshold(1e-20f) 45 setBoolean("-allphone_ci", false) setBoolean("-allphone_cd", true) getRecognizer(); recognizer.addListener(this); File dkxlGrammar = new File(assetsDir, "dkxelan.gram"); recognizer.addGrammarSearch("dkxelan", dkxlGrammar); } Tạo luồng nhận dạng onCreate: new AsyncTask() { @Override protected Exception doInBackground(Void params) { try { Assets assets = new Assets(PocketSphinxActivity.this); File assetDir = assets.syncAssets(); setupRecognizer(assetDir); } catch (IOException e) { return e; } return null; } @Override protected void onPostExecute(Exception result) { if (result == null) recognizer.stop(); recognizer.startListening("dkxelan"); 46 } }.execute(); Hàm trả kết nhận dạng: public void onResult(Hypothesis hypothesis) { ((TextView) findViewById(R.id.txtStatus)) setText(" ."); if (hypothesis != null) { String text = hypothesis.getHypstr(); Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show(); ((TextView) findViewById(R.id.txtStatus)) setText(text); dieuKhienXeLan(text); } } Kiểm tra thiết bị có hỗ trợ Bluetooth hay khơng: private void checkBTState() { if (btAdapter == null) { errorExit("Fatal Error", "Bluetooth not support"); } else { tatBluetooth(); } } Tạo socket kết nối Bluetooth: private BluetoothSocket createBluetoothSocket(BluetoothDevice device) throws IOException { 47 if (Build.VERSION.SDK_INT >= 10) { try { final Method m = device.getClass().getMethod("createInsecureRfcommSocketToServic eRecord", new Class[]{UUID.class}); return (BluetoothSocket) m.invoke(device, MY_UUID); } catch (Exception e) { Log.e(TAG, "Could not create Insecure RFComm Connection", e); } } return device.createRfcommSocketToServiceRecord(MY_UUID); } Gửi ký tự qua Bluetooth: public void write(String message) { Log.d(TAG, " Data to send: " + message + " "); byte[] msgBuffer = message.getBytes(); try { mmOutStream.write(msgBuffer); } catch (IOException e) { Log.d(TAG, " Error data send: " + e.getMessage() + " "); } } Thiết kế phần mềm Arduino Hàm điều chỉnh tốc độ động cơ: void motor_speech(void){ num_pulse=IRQcount; 48 IRQcount=0; tmp=(((num_pulse*1000.0)/(pulses_cycle*del_timer_ms))/rpm)*255; total=0; for (i=0;i