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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3 系統(tǒng)架構

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

001.jpg

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

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

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

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

002.jpg

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

  4.1 Android服務進程建立

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

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

  mThreadServer=new Thread(mcreateRunnable);

  mThreadServer.start();

  其中的mcreateRunnable過程如下:

  //線程:監(jiān)聽服務器發(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;

  }

  }

  };

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

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

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

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

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

  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("出錯了~");

  }

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

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

003.jpg

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

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

  參考文獻

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

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

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

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

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

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


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