《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于Android系統(tǒng)的醫(yī)院語音排隊(duì)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
基于Android系統(tǒng)的醫(yī)院語音排隊(duì)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
2014年微型機(jī)與應(yīng)用第16期
羅聯(lián)財(cái),霍朝賓,白 宇,丁寶忠
中國電子信息產(chǎn)業(yè)集團(tuán)有限公司第六研究所,北京
摘要: 設(shè)計(jì)和實(shí)現(xiàn)了一款基于Android的語音排隊(duì)系統(tǒng)。系統(tǒng)包括語音呼叫終端(Android系統(tǒng))和醫(yī)生控制端(基于Windows)兩部分,它們之間通過Socket進(jìn)行呼叫通信。系統(tǒng)很好地實(shí)現(xiàn)了兩個(gè)終端之間的通信并實(shí)現(xiàn)語音呼叫,具有較強(qiáng)的實(shí)用價(jià)值和開發(fā)指導(dǎo)意義。
Abstract:
Key words :

  摘  要: 設(shè)計(jì)和實(shí)現(xiàn)了一款基于Android的語音排隊(duì)系統(tǒng)。系統(tǒng)包括語音呼叫終端(Android系統(tǒng))和醫(yī)生控制端(基于Windows)兩部分,它們之間通過Socket進(jìn)行呼叫通信。系統(tǒng)很好地實(shí)現(xiàn)了兩個(gè)終端之間的通信并實(shí)現(xiàn)語音呼叫,具有較強(qiáng)的實(shí)用價(jià)值和開發(fā)指導(dǎo)意義。

  關(guān)鍵詞: 語音呼叫;Android系統(tǒng);TTS語音合成;排隊(duì)系統(tǒng)

  自2007年Google推出開源手機(jī)操作系統(tǒng)Android[1]以來,Android的應(yīng)用開發(fā)一時(shí)風(fēng)靡全球,各高科技領(lǐng)域應(yīng)用都在向Android進(jìn)軍[2],各種基于Android系統(tǒng)的設(shè)備層出不窮。Android的盛行取決于其獨(dú)特的優(yōu)勢(shì):(1)開放性,Android是一款基于Linux內(nèi)核的開源系統(tǒng),對(duì)第三方應(yīng)用開發(fā)完全開放,開發(fā)人員具有較大的自由度[3];(2)易開發(fā),Android應(yīng)用程序的開發(fā)采用Java語言,通過應(yīng)用框架層提供的API[4],使開發(fā)簡(jiǎn)單、周期短;(3)免授權(quán)費(fèi),Android一直采用免授權(quán)費(fèi)的策略,這讓所有手持設(shè)備廠商都可以選擇Android系統(tǒng),這也是Android如此流行的很大原因之一,因?yàn)閷?duì)這些廠商來說,采用安卓系統(tǒng)能夠帶來比WinCE更多的利潤(rùn)。

  排隊(duì)系統(tǒng)(或稱排隊(duì)機(jī))是一種綜合運(yùn)用計(jì)算機(jī)、網(wǎng)絡(luò)、多媒體、通信控制的高新技術(shù)產(chǎn)品,以取代各類服務(wù)性窗口傳統(tǒng)的由顧客站立排隊(duì)的方式,改由計(jì)算機(jī)系統(tǒng)代替客戶進(jìn)行排隊(duì)。該系統(tǒng)適用于各類窗口服務(wù)行業(yè),已經(jīng)廣泛應(yīng)用于金融、醫(yī)院、電信以及各級(jí)政府對(duì)外服務(wù)窗口等行業(yè)[5]。雖然現(xiàn)在市場(chǎng)上已經(jīng)出現(xiàn)各種各樣的語音呼叫終端,但Android的出現(xiàn)及其廣泛應(yīng)用,特別是Android系統(tǒng)設(shè)備的普及化,使得設(shè)備成本大大下降,開發(fā)一個(gè)基于Android系統(tǒng)的語音呼叫系統(tǒng)很有實(shí)用意義。

1 現(xiàn)有語音排隊(duì)系統(tǒng)綜述

  隨著語音合成技術(shù)的發(fā)展,語音排隊(duì)系統(tǒng)已經(jīng)發(fā)展很多年了,目前的語音呼叫系統(tǒng)中,根據(jù)系統(tǒng)的組成,可以分為兩種應(yīng)用類型:?jiǎn)渭冋Z音呼叫盒和帶顯示屏的語音呼叫系統(tǒng)。

  其中語音呼叫盒通常由語音芯片合成聲音,多應(yīng)用于銀行、郵政之類的集中排隊(duì)叫號(hào)服務(wù),這種盒子合成的聲音比較慢,聽起來一頓一頓的,用戶感覺差,隨著語音芯片技術(shù)的提高,以后有望做到一個(gè)更好的水平。

  語音呼叫系統(tǒng)除了一個(gè)聲音呼叫以外,還帶有一個(gè)顯示終端,終端會(huì)顯示當(dāng)前叫號(hào)人員甚至下一個(gè)排隊(duì)者的姓名或其他信息,通常用于醫(yī)院等較為分散的排隊(duì)叫號(hào)服務(wù),方便用戶在沒有聽到聲音時(shí)看到排隊(duì)信息。語音的屏顯功能,有的直接后臺(tái)帶電腦主機(jī),這樣構(gòu)成的成本較高;還有的利用分屏技術(shù)進(jìn)行分屏顯示,但總體下來成本也不低。

  總體而言,目前主要利用語音芯片合成聲音的較多,隨著語音呼叫的需求發(fā)展,需要更多發(fā)展真人語音合成服務(wù),但受限于語音合成芯片的資源限制,從長(zhǎng)遠(yuǎn)來看,需要將電腦級(jí)的語音合成技術(shù)帶入到語音排隊(duì)系統(tǒng)中。而目前的語音呼叫系統(tǒng)由于技術(shù)上的原因成本過高。隨著Android設(shè)備的發(fā)展,有很多顯示終端已經(jīng)內(nèi)置了Android系統(tǒng),特別是Android系統(tǒng)對(duì)TTS語音合成的支持標(biāo)準(zhǔn)化,為開發(fā)新一代呼叫系統(tǒng)提供了可能,同時(shí)由于單一設(shè)備實(shí)現(xiàn)了顯示與語音呼叫,有效地降低了設(shè)備成本。

2 基于Android系統(tǒng)的語音呼叫優(yōu)勢(shì)

  TTS(Text To Speech),即“從文本到語音”,是人機(jī)對(duì)話的一部分,讓計(jì)算機(jī)能夠說話。它是同時(shí)運(yùn)用語言學(xué)和心理學(xué)的杰出之作,在內(nèi)置芯片的支持下,通過神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì),把文字智能地轉(zhuǎn)化為自然語音流。TTS技術(shù)對(duì)文本文件進(jìn)行實(shí)時(shí)轉(zhuǎn)換,轉(zhuǎn)換時(shí)間之短可以秒計(jì)算。在其特有智能語音控制器作用下,文本輸出的語音音律流暢,使得聽者在聽取信息時(shí)感覺自然,毫無機(jī)器語音輸出的冷漠與生澀感。TTS語音合成技術(shù)即將覆蓋國標(biāo)一、二級(jí)漢字,具有英文接口,自動(dòng)識(shí)別中、英文,支持中英文混讀。所有聲音采用真人普通話為標(biāo)準(zhǔn)發(fā)音,實(shí)現(xiàn)了120~150個(gè)漢字/s的快速語音合成,朗讀速度達(dá)3~4個(gè)漢字/s,使用戶可以聽到清晰悅耳的音質(zhì)和連貫流暢的語調(diào)。

  基于Android系統(tǒng)的語音呼叫有以下技術(shù)優(yōu)勢(shì):

 ?。?)軟件優(yōu)勢(shì)。Android1.6版本及之后的系統(tǒng)都默認(rèn)安裝了TTS引擎,這為開發(fā)基于Android系統(tǒng)的語音呼叫系統(tǒng)提供了可能。

  (2)硬件優(yōu)勢(shì)?,F(xiàn)在已經(jīng)有帶Android系統(tǒng)的智能電視、智能顯示器、電視機(jī)頂盒等硬件供開發(fā)使用,而且由于Android系統(tǒng)費(fèi)用很低,做出來的產(chǎn)品比原來不帶Android系統(tǒng)的產(chǎn)品功能上有很大提升,但成本增加很少。

 ?。?)可重用性高。基于Android的語音呼叫,如果硬件更換,例如從Android顯示器換成Android電視機(jī),由于都是基于Android系統(tǒng),可能不經(jīng)過修改就能直接使用。如果是Android系統(tǒng)版本變化過大(比如新發(fā)布版本的API更新過大),也可能只需要經(jīng)過重新編譯指定版本即可在新機(jī)器上使用,這為后續(xù)的開發(fā)部署提供了很大的便利,不會(huì)出現(xiàn)因?yàn)橛布兓枰匦麻_發(fā)軟件的問題。

3 系統(tǒng)架構(gòu)

  整體而言,本系統(tǒng)采用Client/Server架構(gòu),醫(yī)生客戶端從排隊(duì)服務(wù)器讀取當(dāng)前排隊(duì)列表,由醫(yī)生決定呼叫排隊(duì)者,呼叫由Android呼叫終端完成。系統(tǒng)架構(gòu)如圖1所示[6]。

001.jpg

  圖1中,每個(gè)陰影方塊表示不同的房間號(hào),一個(gè)房間有多個(gè)醫(yī)生時(shí),可以多個(gè)醫(yī)生共用一個(gè)顯示屏叫號(hào)。其中的呼叫終端,可以是帶Android系統(tǒng)的智能電視,也可以是智能顯示器甚至是機(jī)頂盒加顯示器的配置。

  系統(tǒng)的整體流程簡(jiǎn)單明了,主要難點(diǎn)在于醫(yī)生客戶端與呼叫終端之間的聯(lián)系,通過Socket通信實(shí)現(xiàn)了通信過程。

4 Android端軟件實(shí)現(xiàn)

  本節(jié)主要討論Android系統(tǒng)下的語音呼叫系統(tǒng)實(shí)現(xiàn),主要包括呼叫服務(wù)建立和語音呼叫過程的實(shí)現(xiàn)。軟件系統(tǒng)的主要程序流程圖如圖2所示。

002.jpg

  Thread服務(wù)創(chuàng)建很關(guān)鍵,通過它建立起Socket偵聽線程與消息處理線程。在Android編程中,Thread的作用與Windows下的多線程編程作用一樣,其目的是讓主線程不至于“陷入”到消息等待中。

  4.1 Android服務(wù)進(jìn)程建立

  在此,需要在Android系統(tǒng)上建立一個(gè)Socket服務(wù)器,用來與醫(yī)生客戶端建立連接,以完成呼叫信息的接收工作。

  在主界面的Create()過程中,建立一個(gè)線程mThreadServer用于偵聽端口:

  mThreadServer=new Thread(mcreateRunnable);

  mThreadServer.start();

  其中的mcreateRunnable過程如下:

  //線程:監(jiān)聽服務(wù)器發(fā)來的消息

  private RunnablemcreateRunnable=new Runnable()

  {

  public void run()

  {

  try

  {

  serverSocket=new ServerSocket(5678);

  //方法用于等待客戶連接

  mSocketServer=serverSocket.accept();

  //接受客戶端數(shù)據(jù)

  new Thread( ServerRunnable).start();

  }

  catch (IOException e)

  {

  Message msg=new Message();

  msg.what=0;

  recvMessageServer="創(chuàng)建異常:"+e.getMes

  sage()+e.toString()+"\n";

  return;

  }

  }

  };

  在偵聽線程完成建立之后,即完成了語音呼叫服務(wù)的建立,醫(yī)生客戶端就可以訪問指定的端口與呼叫終端進(jìn)行數(shù)據(jù)傳輸了。

  4.2 Android語音呼叫實(shí)現(xiàn)

  在Android系統(tǒng)下,由于已經(jīng)有了標(biāo)準(zhǔn)化的TTS語音呼叫引擎,完成一個(gè)語音呼叫的過程顯得非常容易,只需要根據(jù)Google提供的標(biāo)準(zhǔn)化API就能完成呼叫服務(wù)。

  使用系統(tǒng)提供的TTS引擎,可以使用TextToSpeech類來執(zhí)行TTS操作,或者用setEngineByPackageName()方法來自定義一個(gè)引擎。在Android4.0后可以通過一個(gè)新的TextToSpeech的構(gòu)造方法來指定引擎,該方法接收一個(gè)TTS引擎的包名。還可以通過getEngines()來查詢可用的TTS引擎,這個(gè)方法返回一個(gè)TextToSpeech.EngineInfo對(duì)象的集合,該對(duì)象包含引擎的圖標(biāo)、標(biāo)簽和包名等信息。

  通過如下過程完成語音引擎的初始化:

  if (status==TextToSpeech.SUCCESS){

  int result=mTts.setLanguage(Locale.CHINESE);

  if(result==TextToSpeech.LANG_MISSING_DATA

  ||result==TextToSpeech.

  LANG_NOT_SUPPORTED)

  {

  Log.e(TAG,"初始化成功,但是找不到語言包");

  //TODO安裝語言安裝包

  }

  }

  引擎初始化之后,就可以開始讓引擎發(fā)音了:

  try {

  mTts.speak(mContent,TextToSpeech.QUEUE_FLUSH, null);

  } catch (Exception e) {

  e.printStackTrace();

  showToast("出錯(cuò)了~");

  }

  以上過程完成了一個(gè)語音引擎的初始化并讀出從醫(yī)生客戶端中接收到的文本信息。

  圖3是本系統(tǒng)實(shí)際使用的效果圖。

003.jpg

  本文介紹了一個(gè)基于Android系統(tǒng)的醫(yī)院語音呼叫系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)過程,限于篇幅,本文實(shí)現(xiàn)過程主要針對(duì)Android部分的實(shí)現(xiàn),實(shí)際上還有醫(yī)生客戶端的實(shí)現(xiàn)。由于介紹在Windows端實(shí)現(xiàn)Socket通信的文獻(xiàn)已經(jīng)很多,本文不在此做過多贅述。

  本文設(shè)計(jì)實(shí)現(xiàn)的基于Android的語音呼叫系統(tǒng)在實(shí)際應(yīng)用中取得了很好的效果。隨著Android系統(tǒng)設(shè)備的大量普及,這種基于Android系統(tǒng)的語音呼叫終端因?yàn)橄到y(tǒng)成本低且使用可靠,一定會(huì)得到推廣使用。

  參考文獻(xiàn)

  [1] 劉安戰(zhàn),賈曉輝.基于Android的私密短信系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2012,31(17):51-56.

  [2] 周時(shí)偉,謝維波.基于Android的智能家居終端設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2012,31(14):11-14.

  [3] 葛艷,高占江.基于Android系統(tǒng)的音樂播放器設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2014,33(1):5-8.

  [4] 弋改珍,解爭(zhēng)龍,張琨.基于Android的火車時(shí)刻表查詢系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2012,35(4):41-44.

  [5] 但成福,劉曉明.一種用排隊(duì)論指導(dǎo)的CAN總線語音通信系統(tǒng)設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2013,39(2):22-25.

  [6] 曾建平,邵艷潔.Android系統(tǒng)架構(gòu)及應(yīng)用程序開發(fā)研究[J].微計(jì)算機(jī)信息,2011,27(9):1-3.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。