<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    模擬機(jī)械運(yùn)動及其語音控制的研究

     

    模擬機(jī)械運(yùn)動及其語音控制的研究

     

    摘 要:在云計(jì)算、智能移動設(shè)備和物聯(lián)網(wǎng)、互聯(lián)網(wǎng)快速發(fā)展的今天,便利成為人們消費(fèi)的最大動力,而計(jì)算機(jī)交互界面的革新是首當(dāng)其沖的,作為交互技術(shù),語音識別,無疑不會褪去其重要的角色作用。本論文介紹以VC6.0和Microsoft Speech SDK5.1為開發(fā)工具,開發(fā)語音交互界面應(yīng)用程序,實(shí)現(xiàn)語音控制模擬機(jī)械臂完成簡單動作和關(guān)閉程序的完整過程。其中,將重點(diǎn)探討庫的加載、直線旋轉(zhuǎn)算法、語法庫的提取、語法命令的準(zhǔn)確匹配等等問題。最后,指出本系統(tǒng)的不足及一些改進(jìn)方案,并對計(jì)算機(jī)語音交互進(jìn)行一番總結(jié)和展望。

    關(guān)鍵詞:計(jì)算機(jī)交互 語音控制 旋轉(zhuǎn)算法 準(zhǔn)確匹配 展望

    中國圖書分類號:TP391.42

     

     

     

     

     

     

     

     

     

     

     

     

     

    Motion of Simulation Mechanical and Voice Control Research

    Abstract:In cloud computing, smart mobile devices and things, the rapid development of the Internet today, convenience become the biggest power consumer, and computer interface innovation is first and foremost, as an interactive technology, voice recognition, and certainly not faded its important role ineffect. This paper introduces the complete procedure of developing voice interface applications,controlling simulated robot arm to complete simple movements via voice commands,based on VC6.0 and Microsoft Speech SDK5.1 as the tool. It will also explore the library's loading,linear rotation algorithm, grammar library extraction, matching the exact command syntax and so on. Finally, less than that and some of the system improvement program, and computer speech for some summary and prospect interaction.

    Key words:Computer interaction;Voice control;Rotation algorithm;Matching ex  -actly;Outlook

     

     

     

     

     

    目 錄

     

    1引言.......................................................... 1

    1.1研究背景................................................. 1

    1.2研究意義................................................. 2

    1.3研究內(nèi)容................................................. 2

    1.4本論文組織結(jié)構(gòu)........................................... 3

    2 SDK及VC環(huán)境配置............................................. 4

    2.1語音開發(fā)工具............................................. 4

    2.2 工具使用及VC環(huán)境配置................................... 5

    3 語音控制程序開發(fā)流程.......................................... 6

    3.1需求分析................................................. 6

    3.2 代碼設(shè)計(jì)與測試.......................................... 9

    3.3 重要算法實(shí)現(xiàn)........................................... 13

    4 不足及其改進(jìn)................................................. 19

    5 總結(jié)與展望................................................... 19

    5.1 總結(jié)................................................... 19

    5.2 展望................................................... 20

    致謝........................................................... 20

    參考文獻(xiàn)....................................................... 22


    模擬機(jī)械運(yùn)動及其語音控制的研究

    1引言

    隨著計(jì)算機(jī)與多媒體技術(shù)的發(fā)展,在眾彩紛呈的人與計(jì)算機(jī)的交互方式中,實(shí)現(xiàn)人與計(jì)算機(jī)通過自然語音交互,一直是人類追求的目標(biāo)。這就要求開發(fā)具有語音功能的程序。而語音識別,即實(shí)現(xiàn)使計(jì)算機(jī)獲取用戶語音輸入并理解識別,從而使用戶使用語音和口令控制計(jì)算機(jī)工作,是具有語音功能的程序的充滿魅力的一面,也是眾多研究者、高校和實(shí)驗(yàn)室的研究熱點(diǎn)之一,具有很高的學(xué)術(shù)價值和應(yīng)用前景。

    本章將介紹本論文的研究背景、研究意義、研究內(nèi)容和本論文組織結(jié)構(gòu)。

    1.1研究背景

    在計(jì)算機(jī)與多媒體技術(shù)、互聯(lián)網(wǎng)、物聯(lián)網(wǎng)和人們生活節(jié)奏快速發(fā)展的今天,人們的生活越來越離不開計(jì)算機(jī)與網(wǎng)絡(luò),而傳統(tǒng)的人機(jī)交互方式,即通過鼠標(biāo)、鍵盤或更原始的機(jī)械開關(guān)來操作計(jì)算機(jī)的方式,也已很不適應(yīng)人們的生活節(jié)奏,并深深地影響了用戶的使用體驗(yàn)快感。在各種需求和客觀條件需求下,計(jì)算機(jī)語音技術(shù)的研究早在二十世紀(jì)五十年代就已開始,并一直處于研究和應(yīng)用熱點(diǎn)。

    作為語音技術(shù)的一個重要方面,語音識別的研究工作開始于上世紀(jì)50年代的Bell實(shí)驗(yàn)室,到60年代末70年代初,其作為一個重要課題取得了實(shí)質(zhì)進(jìn)展,提出了動態(tài)規(guī)劃(DP)和線性預(yù)測分析技術(shù)(LP),其中后者較好解決了語音信號產(chǎn)生模型的問題,極大地促進(jìn)了語音識別的發(fā)展,70年代,動態(tài)時間規(guī)正技術(shù)(DTM)解決了語音特征不等長匹配問題,對特定人孤立詞語音識別十分有效,在語音識別領(lǐng)域取得了突破,在些期間還提出了矢量量化(VQ)和隱含馬爾可夫模型(HMM)理論。80年代語音識別研究工作進(jìn)一步深入,HMM模型和人工神經(jīng)(ANN)在語音識別中成功應(yīng)用。HMM的引入和成功應(yīng)用,奠定了統(tǒng)計(jì)方法和模型在語音識別和語音處理中的主流地位,并且,使得借助人工智能中的啟發(fā)式搜索和語音模型自身的特點(diǎn),高效、快捷的算法使得建立實(shí)時的連續(xù)語音搜索識別系統(tǒng)成為可能。90年代,語音識別的研究進(jìn)一步深入,逐步發(fā)展到自然口語識別 和理解的人機(jī)對話系統(tǒng)。ANN也開始應(yīng)用于語音識別,并在不斷的研究完善的和順應(yīng)解決問題的需要中逐步與HMM模型和小波分析模型等結(jié)合。

    目前,語音識別領(lǐng)域的研究熱點(diǎn)包括:穩(wěn)健語音識別、語音輸入設(shè)備研究、聲學(xué)HMM模型的細(xì)化、說話人自適應(yīng)技術(shù)、大詞匯量關(guān)鍵詞識別、有效識別(搜索)算法研究、可信度評測算法研究、ANN應(yīng)用、語音模型及深次的自然語音理解 。

    1.2研究意義

    在我們的生活中,語音識別早已成為人們消費(fèi)的一部分,成為IT發(fā)展中的一大亮點(diǎn),而且,在云計(jì)算與移動互聯(lián)等快速發(fā)展及其促進(jìn)下,語音識別技術(shù)將是人工智能不可或缺的功能模塊,語音識別將是人機(jī)交互的主要界面。但是,由于語音識別技術(shù)的最終目的是要實(shí)現(xiàn)人與機(jī)器進(jìn)行自然語言交流,那么在朝這個目標(biāo)邁進(jìn)的過程中,我們要解決的問題還有許多,有許多難點(diǎn),例如,如何減小語音識別對環(huán)境的依賴性、如何提高語音識別在高噪聲環(huán)境下的魯棒性、如何更高效地把語言學(xué)、生理學(xué)、心理學(xué)等方面知識量化、建模從而應(yīng)用于語音識別,更重要和根本的是,如何克服人類自身聽覺積累、知識積累和學(xué)習(xí)機(jī)制以及大腦神經(jīng)系統(tǒng)控制機(jī)理等知識方面的缺陷的阻礙,這些問題都是需要花很大的精力和時間去克服的。可見,對語音識別的研究仍然具有很重要的意義。

    1.3研究內(nèi)容

    人機(jī)交互是研究如何把計(jì)算機(jī)技術(shù)和人聯(lián)系起來,使計(jì)算機(jī)技術(shù)最大程度的人性化,而計(jì)算機(jī)語音交互界面的研究,是人機(jī)交互的重要組成部分,也主要涉及到語音識別、合成,是當(dāng)前計(jì)算機(jī)行業(yè)競爭的焦點(diǎn),它的好壞直接影響到計(jì)算機(jī)的可用性和效率,影響到人們?nèi)粘I詈凸ぷ鞯馁|(zhì)量和效率 。

    本論文將圍繞語音識別技術(shù),利用VC 6.0和Microsoft Speech SDK5.1和Speech SDK51LangPack.exe開發(fā)工具和包開發(fā)開發(fā)一個簡單孤立詞語音控制應(yīng)用程序,實(shí)現(xiàn)控制一個模擬機(jī)械臂做相應(yīng)動作的功能。對語音識別感興趣的人員可以在本程序基礎(chǔ)上擴(kuò)展,或借鑒本程序,實(shí)現(xiàn)更復(fù)雜的功能。

    在設(shè)計(jì)本語音控制模擬機(jī)構(gòu)運(yùn)動的應(yīng)用程序過程中,主要涉及到以下論題:

    1.MFC繪圖和直線旋轉(zhuǎn)算法:主要是關(guān)于按鈕消息映射與響應(yīng)、視圖中繪圖設(shè)備的定義和刷新來實(shí)現(xiàn)直線旋轉(zhuǎn)算法的內(nèi)容。

    2.語音控制的實(shí)現(xiàn):主要是開發(fā)語音識別命令控制應(yīng)用程序的步驟與注意事項(xiàng),并探討分析語法庫的提取、語音判斷分支的方法選擇及控制響應(yīng)。

    3.簡述應(yīng)用幫助說明功能塊的解決。

    1.4本論文組織結(jié)構(gòu)

    第一章,介紹本論文的研究背景、研究意義、研究內(nèi)容及組織結(jié)構(gòu);

    第二章,介紹利用語音識別技術(shù)開發(fā)語音控制應(yīng)用程序的開發(fā)包和工具的安裝與環(huán)境配置;

    第三章,以軟件工程和面向?qū)ο缶幊涕_發(fā)知識為基礎(chǔ),介紹本軟件的開發(fā)流程,其中著重討論MFC繪圖和直線旋轉(zhuǎn)的實(shí)現(xiàn)過程,以及開發(fā)語音控制程序中各個步驟和分支判斷、控制調(diào)用中的問題,并簡述應(yīng)用幫助說明功能塊的解決。

    第四章,指出程序的不足及改進(jìn)方案。

    如圖1-1為本論文組織結(jié)構(gòu)圖。

    圖1-1本論文組織結(jié)構(gòu)圖

     

    2 SDKVC環(huán)境配置

    2.1語音開發(fā)工具

    語音識別控制程序一般是基于語音開發(fā)工具包來開發(fā)的,具前的語音開發(fā)工具包有很多,比較常用的開發(fā)工具包有微軟的Microsoft Speech SDKIBMViaVoice,而前者顯然是基于Windows操作系統(tǒng)系列的語音開發(fā)工具的最佳選擇。其含有語音應(yīng)用程序接口(SAPI)、微軟連續(xù)語音識別引擎(MCSR)以及串聯(lián)語音合成(又稱文本到語音)引擎(TTS)等。SAPI還包括對于低層控制和高度適應(yīng)性的直接語音管理、訓(xùn)練向?qū)А⑹录⒄Z法、編譯、資源、語音識別管理以及文本到語音管理 (這些在語音識別控制應(yīng)用程序中都會涉及),其結(jié)構(gòu)如圖2-1所示。

    圖2-1 語音識別SAPI層次圖

    從用戶角度從上抽象層往底層看,應(yīng)用程序(Application)通過應(yīng)用程序接口(API)和SAPI(SpeechAPI)交互,而SAPI則通過設(shè)備驅(qū)動接口(DDI)與語音識別引擎或語音合成引擎交互,這樣,用戶可以很輕松只關(guān)注于API的使用即可開發(fā)出語音識別或語音合成應(yīng)用程序。

    那么,對于編程語言,這里本人選擇VC++作為開發(fā)語言,基于MFC,以Visual C++ 6.0作為開發(fā)平臺。首先,Microsoft Speech SDK要求Visual C++ 6.0及以上作為開發(fā)平臺;其次,以VC++作為開發(fā)語言,較基本地接觸到底層知識但又不太復(fù)雜,可以更本質(zhì)地理解語音識別程序等應(yīng)用程序的運(yùn)行機(jī)制,且可以更清晰地理解程序的框架、脈絡(luò),同時對于Windows消息驅(qū)動機(jī)制認(rèn)識也更深刻。

    2.2 工具使用及VC環(huán)境配置

    1、下載Speech SDK.exe(里面有例子程序、說明文檔和以及用于開發(fā)的美國英語語音引擎),運(yùn)行后,安裝Microsoft Speech SDK5.1.msi,選擇正確的安裝路徑,以后在VC6.0中打開工程,選擇“工程”(Project)->“設(shè)置”(Settings)->“C\C++”選項(xiàng)卡中選“策略”(Category)選中“預(yù)處理”(Preprocessor),再在其“額處包括目錄”(Additional include director    -ies)中輸入上面的路徑(這里建議將上述運(yùn)行了Microsoft Speech SDK5.1.msi后生成的新的文件夾,如Include文件夾、Lib文件夾直接拷貝到你的工程文件夾中,這樣,這里可以用相對路徑,即:..\工程文件夾名\Include來加庫,當(dāng)拷貝整個工程文件夾到不同的機(jī)器或不同的硬盤時,不必每次修改庫路徑),并在“預(yù)處理定義”(Preprocessor definitions)中加上“_WIN32_DCOM”(因?yàn)槲覀冞@里用的是低級的COM接口來開發(fā));同樣,我們還要在“鏈接”(Link)選項(xiàng)卡中“策略”(Category)中選中“輸入”(Input),再在“附加庫路徑”(Additional library)輸入上面得到的Microsoft Speech SDK5.1文件夾下i386的路徑(同樣建議用上面的相對路徑,即:..\工程文件夾名\Lib\i386),同時在“Object\library modules”中輸入“sapi.lib”即可;

    2、注意,如果你的語法庫文件*.xml中用的簡體中文語言選項(xiàng),即里面有LANGID="804"(LANGID="809"是英式英語語言編號,美式英語編號為LANGID="409"),那么為支持對其的語音識別,你還需要安裝Speech SDK51   LangPack.exe,安裝后,找到新生成的LangPack文件,點(diǎn)擊Microsoft Spee -ch SDK 5.1 Language Pack,運(yùn)行后,再在計(jì)算機(jī)電腦上的“控制面板”中打開“語音”,選擇“語音識別”選項(xiàng)卡中的語言(L)中的Microsoft Simp -lified Chinese Recognizer,點(diǎn)擊“應(yīng)用”和“確定”以后,就可以正常開發(fā)識別中文的語音應(yīng)用程序,否則,你的程序在LoadCmdFromFile()處會出錯;

    3 語音控制程序開發(fā)流程

    3.1需求分析

    3.1.1系統(tǒng)分析

    計(jì)算機(jī)語音交互界面設(shè)計(jì)不同于一般的軟件界面設(shè)計(jì),它需要遵循一些特殊原則,以便設(shè)計(jì)出更好的界面。一般原則如下

    1)用戶控制:用戶控制就是指讓用戶感受到計(jì)算機(jī)在他控制之下或允許他進(jìn)行恰當(dāng)?shù)目刂疲@樣才會使用戶感到舒服;否則,會影響到用戶的情緒,甚至?xí)?dǎo)致用戶停止使用這種界面軟件。

    (2)界面的可預(yù)測性:用戶界面的工作方式應(yīng)該能被用戶正確地預(yù)測,即用戶應(yīng)該知道計(jì)算機(jī)下一步應(yīng)該作什么。這里就需要對用戶的心理模型進(jìn)行挖掘和模擬。

    3)降低記憶數(shù)量:人的暫時記憶能夠在大約20秒的時間里記住5~9件事情,如果想記住更多的事,就要將信息以某種方式分塊以減少記憶量,或者將信息、以語義編碼或給出一定的意義。

    4)語言清晰性:控制計(jì)算機(jī)的各種語音命令之間要盡量差別分明,以便減少語音識別錯誤。用戶在說出語音命令也要吐字清晰,以便語音識別引擎更好的識別。

    (5)差錯控制:語音界面與其他的界面相比有著更高的錯誤率,這是由其自身的特點(diǎn)和其處理技術(shù)的局限性決定的。這就需要我們提供差錯控制機(jī)制。

    (6)適應(yīng)性和靈活性:適應(yīng)性是指界面的設(shè)計(jì)必須要適合用戶群的工作方式;而靈活性是指允許用戶對界面進(jìn)行調(diào)整以適應(yīng)特定用途。

    (7)滿意度:界面的滿意度是一項(xiàng)重要指標(biāo)。當(dāng)系統(tǒng)以高效、實(shí)用的方式工作,并且只需要很少的工作和打擾,那么用戶就會感到滿意。

    (8)反饋及響應(yīng):界面應(yīng)該及時告知用戶他們所作操作的執(zhí)行結(jié)果和界面所處的狀態(tài)。因?yàn)榉答亴τ谟脩艉苤匾绕涫窃谟脩粝M陀?jì)算機(jī)進(jìn)行“交談”時。在語音界面中的一個普遍的問題是用戶不知道什么時候系統(tǒng)準(zhǔn)備好聽他們講,也就是說什么時候輪到他們講話。這樣當(dāng)用戶在系統(tǒng)不接收語音輸入時說話就會產(chǎn)生錯誤。這可以通過為用戶提供關(guān)于系統(tǒng)狀態(tài)的反饋來解決,像“系統(tǒng)等待您的指示”之類的信息,而這就是一種很好的響應(yīng)。

    本論文是圍繞語音交互界面應(yīng)用程序的,該應(yīng)用程序是基于語音識別技術(shù)和MFC應(yīng)用程序開發(fā)技術(shù),利用VC 6.0和Microsoft Speech SDK5.1和Speech SDK51LangPack.exe開發(fā)工具和包,開發(fā)一個簡單孤立詞語音控制應(yīng)用程序,實(shí)現(xiàn)控制一個模擬機(jī)械臂做相應(yīng)動作的功能。對語音識別感興趣的人員可以在本程序基礎(chǔ)上擴(kuò)展,或借鑒本程序,實(shí)現(xiàn)更復(fù)雜的功能。

    功能需求:

    實(shí)現(xiàn)應(yīng)用程序界面下,利用主窗口菜單欄上按鈕或語音都能控制模擬機(jī)械臂豎立、倒下和左右旋轉(zhuǎn)等簡單動作,從而可以在此基礎(chǔ)上進(jìn)行擴(kuò)展,完成更復(fù)雜的動作。

    性能需求:

    不管使用語音還是按鈕控制,都要各自實(shí)現(xiàn)的功能要不產(chǎn)生干擾,且狀態(tài)明確,尤其是語音控制,要達(dá)到只有是預(yù)建立的語法庫里面的命令才能響應(yīng),其它雜音都不能使應(yīng)用程序產(chǎn)生反應(yīng)的性能。

    軟硬件需求:

    軟件方面,Windows 98/XP及以上版本操作系統(tǒng),以及上述工具包;

    硬件方面,需要主機(jī)耳邁、麥克風(fēng)插孔要好,并且要求有好的耳邁和麥克風(fēng),保證語音輸入能夠清晰的捕獲到。

    3.1.2系統(tǒng)設(shè)計(jì)

    要實(shí)現(xiàn)控制模擬機(jī)械臂完成關(guān)于旋轉(zhuǎn)等簡單動作,這里,在應(yīng)用程序中,以直線作為模擬機(jī)械臂,完成所述豎立、倒下、左右旋轉(zhuǎn)等動作,即是選取一個參考點(diǎn)作為圓心,利用計(jì)算機(jī)圖形學(xué)的知識,完成相應(yīng)圖形的旋轉(zhuǎn)。

    那么,要看到機(jī)械臂(直線)及其相應(yīng)旋轉(zhuǎn),可以在MFC所提供的三種應(yīng)用程序結(jié)構(gòu)中選擇SDI結(jié)構(gòu),因?yàn)椋@里要看到機(jī)械臂及其相應(yīng)動作,正好文檔視圖區(qū)域可作為其“畫布”背景;而作為按鈕控制時,恰可充分利用主框架菜單欄,在其上添加相應(yīng)按鈕并設(shè)置視圖類來響應(yīng)按鈕消息,從而實(shí)現(xiàn)按鈕響應(yīng);對于語音控制,在上述完成SDK及VC環(huán)境配置后,要在相應(yīng)頭文件中添加相應(yīng)頭文件包括預(yù)處理命令并在相應(yīng)處完成COM的初始化、語音消息的定義及消息映射機(jī)制,詳見代碼設(shè)計(jì)步驟。

    考慮到上述語音交互界面設(shè)計(jì)原則上以及用戶的情況,還需要在軟件中添加使用說明文檔,在本程序中巧妙而簡單的解決了,具體詳見代碼設(shè)計(jì)階段。

    在本應(yīng)用程序?qū)崿F(xiàn)過程中,我將系統(tǒng)實(shí)現(xiàn)大致分為兩步:

    1、首先實(shí)現(xiàn)菜單命令按鈕控制機(jī)械臂完成相應(yīng)動作;

    2、完成語音控制機(jī)械臂完成同樣的功能;

    系統(tǒng)流程如圖3-1

    圖3-1 語音控制應(yīng)用程序系統(tǒng)流程圖

     

    3.2 代碼設(shè)計(jì)與測試

    1、菜單命令按鈕控制機(jī)械臂完成相應(yīng)動作

        在完成上述SDK的安裝和上述操作后,運(yùn)行Microsoft Visual C++ 6.0,按照MFC AppWizard 完成相應(yīng)步驟并進(jìn)入工程,按照第二章所說明的步驟完成VC環(huán)境的配置。

    要使進(jìn)入應(yīng)用程序之后,初始界面(主要是視圖類所顯示的區(qū)域)應(yīng)顯示的是模擬機(jī)械臂的初始狀態(tài)(這里假設(shè)是機(jī)械臂橫放在水平面),并且,很顯然,當(dāng)我們有可能在某一時刻切換到另一窗口,而當(dāng)我們返回時,要仍能顯示我們切出該應(yīng)用程序窗口之前應(yīng)用程序的狀態(tài),因此,我們的繪圖模塊應(yīng)放在系統(tǒng)重繪刷新之后仍被調(diào)用的函數(shù),而視圖類的OnPaint()函數(shù)正是符合上述要求的方法模塊,而由MFC運(yùn)行機(jī)制,視圖類的OnPaint()函數(shù)實(shí)際調(diào)用OnDraw()函數(shù),所以,實(shí)際上,我們的繪圖模塊應(yīng)放在OnDraw()模塊中。

    同時,由于我們整個程序幾乎是操作機(jī)械臂(直線),因此,我們應(yīng)將直線的坐標(biāo)及部分相應(yīng)屬性應(yīng)作為視圖類的成員,這樣可以避免大量代碼重復(fù),同時方便各個函數(shù)模塊對機(jī)械臂的操作。

    具體步驟如下:

    1)   定義直線坐標(biāo)為視圖類的屬性:

    CPoint m_LinePoint1,m_LinePoint2;//直線坐標(biāo)的起點(diǎn)、終點(diǎn)

    2) 為畫相應(yīng)機(jī)械臂,需要相應(yīng)畫筆設(shè)備環(huán)境,同時,可以建立一個水平線作為假設(shè)的地面,地面可采用系統(tǒng)默認(rèn)畫筆畫出,由于機(jī)械臂和地面在應(yīng)用程序運(yùn)行始終一直出現(xiàn),同樣,應(yīng)將其作為視圖類的成員:

    CPen m_Pen1;//定義畫機(jī)械臂的畫筆

    并在視圖類的構(gòu)造函數(shù)中,初始化機(jī)械臂的畫筆為:

    m_Pen1.CreatePen(PS_SOLID,2,RGB(0,0,0));

    3) 在視圖OnDraw()函數(shù)中創(chuàng)建客戶區(qū)設(shè)備描述上下文,并調(diào)用設(shè)備描述上下文畫相應(yīng)的機(jī)械臂和地面,從而顯示應(yīng)用程序初始界面;

    4) 在WorkSpace中進(jìn)入資源類視圖ResourceView,選擇Menu選項(xiàng),并進(jìn)入主框架界面,在菜單欄添加菜單(設(shè)以"控制命令"作為其標(biāo)題屬性Caption),在其上加入相應(yīng)命令,比如以“豎立”作為其Caption屬性,而其ID設(shè)為“ID_COM_StandUp”;

    5) 按快捷鍵“Ctrl+W”或選擇VC工程菜單欄上的“視圖”(View)->“類向?qū)?#8221;(ClassWizard),進(jìn)入類向?qū)В瑥?#8220;對象標(biāo)識”(Object ID)選中剛才加入的命令的標(biāo)識“ID_COM_StandUp”,然后從“類名”(Class Name)選中工程中的視圖類名(這步以后,就確定命令按鈕的消息由視圖類來響應(yīng)),從“消息”(Messages)中選中COMMAND,此時單擊“增加函數(shù)”(Add Functions…),“確定”之后,再單擊“編輯函數(shù)”(Edit code),“確定”之后即進(jìn)入新創(chuàng)建的函數(shù),在里面添加代碼使機(jī)械臂完成相應(yīng)動作。

    6) 根據(jù)需要,相應(yīng)重復(fù)上述步驟,可添加其它命令功能。

    2、語音控制機(jī)械臂完成同樣的動作功能

    語音控制應(yīng)用程序的開發(fā)流程比較固定,即:

    1)   首先,要加入庫,即上面第二章的步驟;

    2)   要初始化COM接口,這個過程是:

           首先要在StdAfx.h頭文件中#endif之前加入:  

           #include<atlbase.h> 

           extern CComModule_Module;

           #include<atlcom.h>

           接著要初始化COM接口,只能是在CWinApp子類中,加入

          ::CoInitiallizeEx(NULL,COINIT_APARTMENTTHREADED);

    3)   創(chuàng)建語音識別引擎;

        在視圖類中建立定義COM的引擎對象:

        CComPtr<ISpRecognizer> m_Recognizer;

       并在視圖類的適當(dāng)位置實(shí)例化引擎對象,在這里有點(diǎn)小技巧,即:應(yīng)使引擎對象在應(yīng)用程序顯示主窗口之后、進(jìn)行任何操作之前,經(jīng)查,符合此要求的函數(shù)有一個CView類的OnInitialUpdate()函數(shù),那么我們要在程序視圖類中重載該函數(shù),視圖類的頭文件中的Overrides下,添加:virtual void OnInitialUpdate(),并在視圖類的CPP文件中添加該函數(shù),并在該函數(shù)中添加:

     HRESULT hr=S_OK;

    hr=m_Recognizer.CoCreateInstance(CLSID_SpSharedRecognizer);

    //Shared

     一個應(yīng)用程序必須從兩個不同類型的語音識別引擎(ISpRecognizer)中選擇一種。一種是可以與其它語音識別程序共享識別器的語音識別引擎,這在大多數(shù)識別程序中被推薦使用。為了為IspRecognizer建立一個共享的ISpRecoContext接口,一個應(yīng)用程序只需要用CLSID_SpSharedRecoContext調(diào)用COM的 CoCreateInstance方法。這種方案中,SAPI將建立一個音頻輸入流,把它設(shè)置為SAPI默認(rèn)的音頻輸入流。對于大型服務(wù)器程序,它可能在單獨(dú)在一個系統(tǒng)上運(yùn)行,性能是關(guān)鍵,一個InProc語音識別引擎更適合,而且,獨(dú)立語音識別引擎InProc更適合特定人語音識別,為了為InProc ISpRecognizer建立一個IspRecoContext,程序必須首先用CLSID_SpInprocRecoInstance調(diào)用CoCreateInstance來建立屬于它自己的InProc IspRecognizer。然后程序必須調(diào)用ISpRecogniz

    -er::SetInput()來建立一個音頻輸入流 ;

    4)   創(chuàng)建語音識別上下文(這是核心,且也是放在OnInitialUpdate函數(shù)中);

        hr=m_Recognizer->CreateRecoContext(&m_RecoContext);

    5)   設(shè)定語法識別通知消息(用預(yù)處理命令,可以放在Resource.h中,如:#define WM_RECOEVENT WM_USER+102)及相應(yīng)識別處理方法(函數(shù)),SetNotifyWindowMessage(m_hWnd,WM_RECOEVETN,0,0),并注意在后面應(yīng)用程序中要建立消息映射:ON_MESSAGE(WM_RECOEVENT,OnRecoEvent)和定義消息(在頭文件中):afx_msg void OnRecoEvent(),并實(shí)現(xiàn)消息處理函數(shù)OnRecoEvent();

    6)   設(shè)置我們感興趣的事件,具體可參閱Speech SDK help.chm文檔中查看SPEVENTENUM(這里我只設(shè)對識別的感興趣);

         CONST ULONGLONG ullinterest=SPFEI(SPEI_RECOGNITION);

         hr=m_RecoContext->SetInterest(ullinterest,ullinterest);

    7)   創(chuàng)建語法對象,語法規(guī)則也有兩種類型,一種是聽寫型(Dictation)

    ,允許使用引擎中的大量短語,但識別效率低;另一種是命令和控制型(Comm    -and and Control),能最大限度地識別自定義的短語,故識別效率高 。程序中,我使用的是命令和控制型:首先,設(shè)置語法對象的ID(用預(yù)處理命令#define *);其次,加載語法規(guī)則(LoadCmdFrom());

           //創(chuàng)建命令式語法 1、創(chuàng)建語法對象 2、加載語法規(guī)則

        hr=m_RecoContext->CreateGrammar(GIDCMDCTRL,&m_RecoGrammar);

           //加載語法

           WCHAR wszXMLFile[20]=L"";

        MultiByteToWideChar(CP_ACP,0,(LPCSTR)"CmdStrl.xml",-1,wszXMLFile,256);//ANSI轉(zhuǎn)換為UNICODE

           if(SUCCEEDED(hr))

           {

        hr=m_RecoGrammar->LoadCmdFromFile(wszXMLFile,SPLO_DYNAMIC);

               if(FAILED(hr))

                  MessageBox("LoadFile Error!");

           }

    注意,如果是開發(fā)聽寫式語音應(yīng)用程序,則為:

    hr = m_cpDictationGrammar->LoadDictation(NULL, SPLO_STATIC);//加載詞典

    8)   而在命令和控制型中,語法規(guī)則用xml格式,參見Speech SDK 5.1 中的 Designing Grammar Rules,那么程序中我的語法文件為CmdStrl.xml:

     <?xml version="1.0" encoding="gb2312"?>

       -<GRAMMAR LANGID="804">

       -<DEFINE>

      <IDNAME="CMD" VAL="10" />

      </DEFINE>

     -<RULE NAME="COMMAND" ID="CMD" TOPLEVEL="ACTIVE">

     -<L>

      <p>豎立</p>

      <p>右旋轉(zhuǎn)</p>

      <p>倒下</p>

      <p>左旋轉(zhuǎn)</p>

        </L>

        </RULE>

        </GRAMMAR>

    9)   在開始識別時,激活語法對象;

     hr=m_RecoGrammar->SetRuleState(NULL,NULL,SPRS_ACTIVE);//C&C

    10) 獲取識別消息并進(jìn)行處理,放在OnRecoEvent()中;

    11)  在語法識別消息處理之后,另一個函數(shù)中,或在整個應(yīng)用程序退出前釋放掉語音識別語法對象、上下文、引擎等,只需調(diào)用相應(yīng)對象的Re   -lease()方法即可。

        注意,千萬不要在識別消息處理方法的最后,即退出該方法之前釋放掉相應(yīng)接口,否則會出現(xiàn)bug,即在你每一次運(yùn)行程序時,它只能識別一個語音消息,再在第二次運(yùn)行該應(yīng)用程序時有可能出現(xiàn)響應(yīng)上一次運(yùn)行時最后輸入的語音消息響應(yīng)。

    3.3 重要算法實(shí)現(xiàn)

    1、直線旋轉(zhuǎn)

    (一)“豎立”和“倒下”功能的實(shí)現(xiàn)

    a.     直線旋轉(zhuǎn)算法有多種,當(dāng)我們選用勾股定理時,我們只須知道直線的長度和直接線的坐標(biāo)即可,而直線長度易得到,因?yàn)轭A(yù)設(shè)“豎立”和“倒下”前初態(tài)機(jī)械臂在地面上,因此,直線的長度為初態(tài)時終點(diǎn)橫坐標(biāo)減去其起點(diǎn)橫坐標(biāo),而且顯然,直線在旋轉(zhuǎn)中應(yīng)長度不變,因此,我們最好將其長度也作為視圖類的成員,理由同上述將直線的坐標(biāo)作為視圖類成員一樣。

        那么我們每次旋轉(zhuǎn)直線時,其實(shí)只是定好參考點(diǎn)作為圓心,那么這里顯然是以起點(diǎn)作為圓心,只須每次重畫時,將原來的線刷新掉,再重畫終點(diǎn)并將起點(diǎn)與終點(diǎn)連接起來即可,其實(shí)這也是直線旋轉(zhuǎn)算法的思路。當(dāng)我們用勾股定理來實(shí)現(xiàn)直線旋時,如圖3-2

    圖3-2勾股定理畫線旋轉(zhuǎn)圖

        測試:運(yùn)行發(fā)現(xiàn),當(dāng)直線豎立時,旋轉(zhuǎn)角度太大,一兩步就豎立了,顯然看上去直線旋轉(zhuǎn)不流暢,缺乏美感和真實(shí)感,此方法不行,那么為什么會出現(xiàn)這樣的問題,仔細(xì)推算,原因在于,直線坐標(biāo)是LONG型,而經(jīng)過勾股定理的計(jì)算,先平方再開方,算得的是浮點(diǎn)型,再在式子中取為LONG型,會丟失許多數(shù)據(jù)。

    b.     再考慮其它實(shí)現(xiàn)方法,由于直線的初始狀態(tài)比較特殊,又只是到豎立狀態(tài),所以這里可采用相對坐標(biāo)和旋轉(zhuǎn)角度來求直線終點(diǎn)坐標(biāo),即利用直線長和角度的余弦或正弦來求,由于MFC視圖中默認(rèn)坐標(biāo)系是原點(diǎn)為左上角,水平向右為橫軸,豎直向下為豎軸,因此,逆時針方向角度則為負(fù)值,算法為:

    m_LinePt2.x=long(m_LinePt1.x+m_LineLen*cos(-Beta/180.0*Pi));

    m_LinePt2.y=long(m_LinePt1.y+m_LineLen*sin(-Beta/180.0*Pi));

    (其中,直線起點(diǎn)終終不變,變化的只是角度Beta大小即可,當(dāng)Beta角度為90度時循環(huán)終止即可)

        測試:運(yùn)行發(fā)現(xiàn),角度Beta可以靈活設(shè)置,可以設(shè)置得較小,那么當(dāng)時直線旋轉(zhuǎn)時,上述a中的問題就徹底解決了,既變化角度可控,又視圖流暢,而且上述算法每個終態(tài)只與其各自初態(tài)相關(guān),算法簡單,計(jì)算量小。

    (二)那么當(dāng)實(shí)現(xiàn)直線其它旋轉(zhuǎn)算法時,是不是都可直接用上面的公式呢?顯然,實(shí)現(xiàn)直線倒下,可以采用上述類似算法,但當(dāng)實(shí)現(xiàn)直線左右旋轉(zhuǎn)時,上述算法不可行,因?yàn)樯鲜鏊惴ㄖ幸驗(yàn)橹本€初態(tài)本身是水上平的,所以用相對坐標(biāo)和角度時,每次角度變化所作的變化恰好是水平坐標(biāo)相對起點(diǎn)(水平坐標(biāo))的變化,縱坐標(biāo)的變化也恰好是縱坐標(biāo)相對起點(diǎn)縱坐標(biāo)的變化,但當(dāng)假設(shè)直線初始狀態(tài)為某個傾斜角度時,角度的變化卻不是相當(dāng)于終點(diǎn)縱坐標(biāo)的相對于起點(diǎn)縱坐標(biāo)的變化。那么這時,只能找其它方法,根據(jù)計(jì)算機(jī)圖形學(xué)知識相關(guān)知識:旋轉(zhuǎn)是以某個參考點(diǎn)為圓心,將對象上的各個點(diǎn)(x,y)變?yōu)樾碌淖鴺?biāo)(x′,y′)的變化。當(dāng)參考點(diǎn)為(0,0)時,旋轉(zhuǎn)公式為:

         

    ,所以上述公式可以變?yōu)椋?/span>

      

    如果參考點(diǎn)不是 ,而是任意一點(diǎn) ,那么,繞 點(diǎn)的旋轉(zhuǎn)由三個步驟完成

    (1)將對象平移 ;

    (2)按(式1)作旋轉(zhuǎn)變換;

    (3)平移 。

    組合這三個步驟的計(jì)算公式為:

    3-3 圖形旋轉(zhuǎn)算法坐標(biāo)圖

    當(dāng)然,根據(jù)MFC繪圖中坐標(biāo)系,這里角度表示意義可能不一樣。算法流程圖類似圖3-2,只是將算法改為圖3-3演示的算法,并將終止條件稍變即可。

    測試:通過上述算法,并在“左旋轉(zhuǎn)”和“右旋轉(zhuǎn)”時只是角度正負(fù)做對應(yīng)調(diào)整即可,實(shí)現(xiàn)的旋轉(zhuǎn)也具有真實(shí)感和美感。

    我們發(fā)現(xiàn),由b中算法簡單,但適用范圍太小,由c中算法通用,但計(jì)算量很大,復(fù)雜,總之,具上,當(dāng)為“豎立”和“倒下”時采用b算法,當(dāng)為“左/右旋轉(zhuǎn)”時,采用算法c;

    2、語音判斷分支的選取

    通過查資料,當(dāng)我們采用CSpEvent::RecoResult()->GetText(0,-1,…)提取到要識別的所有命令時,一般的資料是采CString::CollateNoCase                        (_T(“…”))或CString::CompareNoCase(_T(“…”)),本程序開始也是采用此方法,即在OnRecoEvent()方法中采用如下代碼時:

       HRESULT hr=S_OK;

       USES_CONVERSION;

       CSpEvent event;

       while(hr=event.GetFrom(m_RecoContext)==S_OK)

        { 

           switch(event.eEventId)

          {   

           case SPEI_RECOGNITION:

           m_GotReco=TRUE;

           static const WCHAR wszUnrecognized[]=L"<Unrecognized>";

           CSpDynamicString dstrText;     if(FAILED(event.RecoResult()->GetText(0,-1,TRUE,&dstrText,NULL)))

           {dstrText=wszUnrecognized;

           }

           /* BSTR, known as basic string or binary string, is a pointer to a wide

           character string used by Automation data manipulation functions.*/

            BSTR SRout;

           dstrText.CopyToBSTR(&SRout);//allocates a system BSTR

           CString Restring;

           Restring.Empty();

           Restring=SRout;

        if(1==!Restring.CollateNoCase(_T("豎立")))              {OnCOMStandUp();break;}

    ……

    測試:發(fā)現(xiàn)程序能夠識別語法文件“CmdStrl.xml”中定義的命令,但是執(zhí)行多次便能夠發(fā)現(xiàn)問題,當(dāng)我們在運(yùn)行程序后,使用“豎立”語音命令后,程序中機(jī)械臂正確豎立,當(dāng)我們再隨意用語音,比如說:“OK”"OR"、"RUN"、"RETURN"后,程序運(yùn)行會出現(xiàn)一會兒豎立、一會兒倒下,顯然與我們的期望不符。

    再通過這個問題我們來查找原因,其實(shí),當(dāng)取出識別的語音后轉(zhuǎn)換成CString類型,語音輸入判斷分支中,用CString的CollateNoCase()方法時,當(dāng)比如說取得的語音與我們預(yù)定義的語法庫中的字符串相比較,結(jié)果為0時,經(jīng)過取反,計(jì)算機(jī)得到為1,這樣也觸發(fā)了識別控制命令,然后同樣去調(diào)用了相應(yīng)的動作執(zhí)行過程(函數(shù)),產(chǎn)生與我們的期望的不相符的結(jié)果。

    那么,為解決問題,我們需找到另一個方法,顯然我們還是在CString類中找其它方法,經(jīng)過查找MSDN,我們找到了CString::Compare()方法,我們將上面的if(1==!Restring.CollateNoCase(_T("…"))) 改為 if(0== Restring.Compare(_T("…)))后,再多次運(yùn)行,最終解決了問題。

    3、說明幫助文檔的解決

    由于本程序只是簡單語音命令控制程序,同時第一次接觸該程序的用戶不一定知道如何使用,所以必須在運(yùn)行程序的第一個界面就能使用戶看到說明文檔,那么如何解決呢?在程序中,我們可以看到,由于是采用SDI應(yīng)用程序架構(gòu),且進(jìn)入初始界面時,視圖區(qū)域大部分是空白,顯然我們可以在這個背景上顯示說明文檔,為此,可調(diào)用設(shè)備環(huán)境的TextOut()來裝載我們已寫好的說明文本資源,并且,我們應(yīng)將這些顯示文檔放在旋轉(zhuǎn)算法的循環(huán)之外,這樣每次直線旋轉(zhuǎn)時并不影響其視覺感觀,而地面(水平線)的繪制應(yīng)放在其循環(huán)中,這樣直線旋轉(zhuǎn)時始終有地面這個參照物,符合真實(shí)感觀,其它的還有小的功能模塊也可以簡單實(shí)現(xiàn)。

        當(dāng)然,為了確定做完某一個動作后機(jī)械臂(直線)的狀態(tài),我們可以添加一個視圖類的成員,每次執(zhí)行一個動作,便將其值設(shè)為相應(yīng)值,在最終顯示時的OnDraw()方法中,每次判斷最后一次做的動作并繪制其最終應(yīng)顯示的狀態(tài)。

    程序運(yùn)行初始界面如圖3-4:

    圖3-4 程序運(yùn)行初始界面圖

    程序旋轉(zhuǎn)過程中在某一時刻恰豎立狀態(tài)如圖3-5:

    圖3-5 程序運(yùn)行時刻圖

    4 不足及其改進(jìn)

    1.程序稍微簡單,機(jī)械臂只能實(shí)現(xiàn)簡單動作,有待后續(xù)拓展與開發(fā);

    2.機(jī)械臂旋轉(zhuǎn)過程中還應(yīng)可以暫停,并可以更加精細(xì)地控制機(jī)械頭旋轉(zhuǎn)的動作,當(dāng)然,正如1所述,有待在現(xiàn)有程序上拓展與開發(fā);

    3.刷新問題沒有解決好,在機(jī)械臂旋轉(zhuǎn)重繪中,本程序用的是全局刷新函數(shù)::InvalidateRect(NULL,NULL,TRUE);其最終是刷新了桌面上打開的所有窗口與圖標(biāo),但嘗試過,目前該程序中只有此方法才能實(shí)現(xiàn)所希望的旋轉(zhuǎn),這個有待查找更好的方法(函數(shù))。

    5 總結(jié)與展望

    5.1 總結(jié)

    本論文主要討論了針對語音識別技術(shù)在計(jì)算機(jī)交互界面的應(yīng)用研究而開發(fā)的一個程序,并著重討論了基于MFC開發(fā)語音識別程序的主要流程、開發(fā)過程中涉及的部分算法,并誠實(shí)指出本程序的不足與改進(jìn)。本論文的工作主要包括以下幾點(diǎn):

    1.MFC繪圖和直線旋轉(zhuǎn)算法:主要是關(guān)于按鈕消息映射與響應(yīng)、視圖中繪圖設(shè)備的定義和刷新來實(shí)現(xiàn)直線旋轉(zhuǎn)算法的內(nèi)容。

    2.語音控制的實(shí)現(xiàn):主要是開發(fā)語音識別命令控制應(yīng)用程序的步驟與注意事項(xiàng),并探討分析語法庫的提取、語音判斷分支的方法選擇及控制響應(yīng)。

    3.簡述應(yīng)用幫助說明功能塊的解決。

    可見,語音識別和人機(jī)交互技術(shù)結(jié)合應(yīng)用于計(jì)算機(jī)語音交互有很重大的學(xué)術(shù)價值和實(shí)用價值。隨著信息社會的發(fā)展,尤其是語音技術(shù)在嵌入式發(fā)展的巨大實(shí)用前景,必定有更多的人員進(jìn)行語音交互界面的應(yīng)用研究,本論文的研究只是其中的一個試驗(yàn),我也將在后續(xù)工作中繼續(xù)進(jìn)行完善,繼續(xù)進(jìn)行這方面的研究。

    5.2 展望

    語音技術(shù)的發(fā)展仍將充滿活力,對語音識別的研究與應(yīng)用將一直具有遠(yuǎn)大前景與重要意義,即:將最終實(shí)現(xiàn)人與機(jī)器進(jìn)行自然語音交互這一目標(biāo)。在這一目標(biāo)下,我們將看到的是,在語音識別研究及其應(yīng)用方面,困繞語音識別的上述所述問題將得到很大的解決,協(xié)同發(fā)音、噪音影響、模式匹配速度慢、特征提取準(zhǔn)確度等問題將不再是語音識別技術(shù)應(yīng)用的阻力;而與此同時,在現(xiàn)實(shí)中,用戶體驗(yàn)將全然一新,人類不再受制于鍵盤、鼠標(biāo)、顯示器等圖形用戶接口,人將更習(xí)慣于用命令或語音來控制計(jì)算機(jī)或機(jī)器人來為自己服務(wù),使機(jī)器成為我們的“知音”,成為我們?nèi)祟惖呐笥眩蔀槿祟惿淼囊徊糠帧?/span>

    而且,在云技術(shù)及移動互聯(lián)等快速發(fā)展及其促進(jìn)下,語音識別技術(shù)將是人工智能必不可少數(shù)的功能模塊,語音識別將是人機(jī)交互的主要界面。

    致謝

    終于在不斷的學(xué)習(xí)與克服困惑中,將要完成自己的畢業(yè)論文,在這個過程中,逐漸明白:盡早地定位錯誤在開發(fā)中非常重要;碰到問題要解決問題;編程開發(fā)要持之以恒,才能有較大進(jìn)步。在這個過程中,要感謝童老師,從最初定題、資料收集、論文修正與指點(diǎn),每一個時刻都有童老師在背后給予關(guān)注,并且,還能寬容地給予足夠時間,讓我平靜細(xì)心寫自己的論文,當(dāng)然,在這個過程中,也還有好朋友、同學(xué)給予硬件和軟件的輔助或指點(diǎn),在此深表感謝!

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    參考文獻(xiàn)

    [1]邢銘生,朱浩,王宏斌.語音識別技術(shù)綜述.科協(xié)論壇[J].2010.3(下)

    [2]付勇,童強(qiáng)老師.計(jì)算機(jī)語音交互界面應(yīng)用研究.湖北師范學(xué)院2010屆計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院畢業(yè)論文(設(shè)計(jì)).2010.5.20:1~39.

    [3]肖瑋,使用SAPI實(shí)現(xiàn)語音識別與合成.現(xiàn)代計(jì)算機(jī)[J].2005.2(第二0五期).

    [4]呂爭,吳明慧.基于語音的人機(jī)交互界面的研究與實(shí)現(xiàn)[J].荊門職業(yè)技術(shù)學(xué)院學(xué)報,2007,22(6): 14~18.

    [5]百度百科.API[EB/OL]. http://baike.baidu.com/view/16068.htm, 2011.4.3.

    [6]童強(qiáng).delphi實(shí)現(xiàn)電腦語音控制程序[J].微計(jì)算機(jī)信息.2006.3: 21~23.

    [7]何好義,計(jì)算機(jī)語音識別技術(shù)與及其應(yīng)用.大眾科技[J].2005.6期(總第80期).

    [8]Lorenzo Platteau,Talk to your applications[J].2003.11.7.

    [9]馬孜卓,Microsoft Speech SDK及語音技術(shù)研究[J].2010.3.

    [10]陳一寧,朱璇等.語音識別開發(fā)工具包SRDK的研究與開發(fā).計(jì)算機(jī)工程與應(yīng)用.2003.1.

    [11]邢銘生,朱浩,王宏斌.語音識別技術(shù)綜述.科學(xué)文壇,2010年第三期(下):62~63.

    posted on 2011-08-11 21:54 Hua Hero 閱讀(538) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿

    隨筆檔案

    文章檔案

    搜索

    最新評論

    主站蜘蛛池模板: 成年免费大片黄在线观看com| 免费一级国产生活片| 亚洲aⅴ无码专区在线观看 | 国产亚洲精品欧洲在线观看| 亚洲卡一卡2卡三卡4卡无卡三| 国产老女人精品免费视频| 亚洲毛片免费观看| 99视频在线观看免费| WWW亚洲色大成网络.COM| 亚洲欧洲精品国产区| 亚洲毛片αv无线播放一区| 免费人成在线观看网站品爱网日本| 国产免费久久精品| 日本妇人成熟免费中文字幕| 大地资源网高清在线观看免费| 在线观看亚洲精品专区| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 一个人免费观看视频www| a毛片视频免费观看影院| 日本高清不卡aⅴ免费网站| 久久综合给合久久国产免费| 免费无码黄网站在线看| 91福利视频免费| 嫩草成人永久免费观看| 男女一进一出抽搐免费视频| 亚洲精品乱码久久久久蜜桃| 337p欧洲亚洲大胆艺术| 亚洲电影中文字幕| 久久精品国产亚洲综合色| 亚洲中文字幕在线观看| 亚洲亚洲人成综合网络| 久久精品国产亚洲77777| 亚洲狠狠综合久久| 亚洲无mate20pro麻豆| 亚洲日本乱码卡2卡3卡新区| 亚洲Av高清一区二区三区| 亚洲国产美女福利直播秀一区二区| 久久久久亚洲av无码专区喷水| 亚洲另类古典武侠| 亚洲最大av资源站无码av网址| 亚洲精品国产日韩|