李方云,王云光
(1.上海理工大學(xué)醫(yī)療器械與食品學(xué)院;2.上海健康醫(yī)學(xué)院醫(yī)療器械學(xué)院,上海 200093)
超短波治療儀是一種先進(jìn)的臨床醫(yī)療常用儀器[1-3],工作原理是由超短波治療儀的極板形成頻率為40.68MHz左右的高頻電場,作用于人體病患部位產(chǎn)生熱效應(yīng)加劇人體血液循環(huán),增進(jìn)組織細(xì)胞新陳代謝以達(dá)到治療效果[4]。在臨床上已廣泛應(yīng)用于高血壓、膝骨關(guān)節(jié)、兒童分泌性中耳炎以及中風(fēng)肩手綜合征等疾病的診斷與治療[5-8]。
通過閱讀相關(guān)文獻(xiàn)發(fā)現(xiàn),國內(nèi)外對超短波理療儀的需求量十分龐大,市面上常見的超短波理療儀少有配套的軟件系統(tǒng)。荷蘭Enraf Nonius 公司研發(fā)的Radarmed 650 超短波理療儀具有持續(xù)和脈沖兩種輸出摸式,治療過程需要硬件設(shè)置輸出功率、治療時(shí)間等參數(shù),與病人信息系統(tǒng)分開。河南翔宇醫(yī)療器械公司型號(hào)分別為HYJ-1、HYJ-2 的極超短波理療儀,LED 數(shù)碼管顯示時(shí)間與輸出功率,同樣與病人基本信息分開。近年來,語音技術(shù)應(yīng)用日趨成熟,運(yùn)用越發(fā)廣泛[9-10],智能化語音導(dǎo)航機(jī)器人、AI 語音對話機(jī)器人的出現(xiàn)極大方便了人們的生活。在醫(yī)療行業(yè),語音很有可能會(huì)成為下一代交互設(shè)計(jì)中最有意義的交互方式[11-12]?;诖嗽O(shè)計(jì)一款集合語音助手功能的多模塊、交互性強(qiáng)、操作簡便的超短波治療儀軟件系統(tǒng)顯得尤為必要。
Qt 是一種跨平臺(tái)、面向?qū)ο蟮腃++應(yīng)用程序圖形界面設(shè)計(jì)軟件,PyQt 則是Python 和Qt 的結(jié)合,將二者的優(yōu)點(diǎn)相融合可用于高效地編寫各類GUI 應(yīng)用程序[13]。PyQt5 本身擁有超過620 個(gè)類和6 000 個(gè)函數(shù)及方法,其具有設(shè)計(jì)界面簡捷、美觀,應(yīng)用程序?qū)崟r(shí)性和靈活性高等特點(diǎn),支持Unix、Windows、Mac OS 多個(gè)平臺(tái)。Pycharm 融合了PyQt5的工具包,支持Python 編程,本文設(shè)計(jì)的軟件主要在Pycharm 中進(jìn)行。Raspberry Pi 簡稱樹莓派,是基于Linux性價(jià)比較高的迷你計(jì)算機(jī),有Type-C 接口、MicroUSB 接口以及3.5mm 的音頻輸出接口[14],在本設(shè)計(jì)中可提供麥克風(fēng)陣列、播放語音等功能,其微小、易于開發(fā)的特點(diǎn)成為本項(xiàng)目的硬件首選。超短波治療儀結(jié)構(gòu)如圖1 所示。
Fig.1 Structure of ultrashort wave therapeutic apparatus圖1 超短波治療儀結(jié)構(gòu)
本設(shè)計(jì)采用Pycharm+PyQt5+Qt Designer+樹莓派開發(fā)環(huán)境。首先格式化SD 卡,使用Win32DiskImager 燒錄系統(tǒng)鏡像,開機(jī)連接WiFi,用Advanced IP Scanner 查詢樹莓派的地址,隨后利用Putty 遠(yuǎn)程登錄樹莓派即可進(jìn)行相關(guān)操作。PyCharm 是一種Python IDE,初次使用可以通過學(xué)號(hào)或教職工編號(hào)在官網(wǎng)申請獲得永久使用權(quán)。首先從官網(wǎng)下載Pycharm 軟件Linux 版本,文件默認(rèn)下載到/home/pi/Downloads 目錄下,通過命令解壓后安裝即可:tar zxvf pycharm-professional-2019.2.3.tar.gz。PyCharm 是一種Python IDE,初次使用可以通過學(xué)號(hào)或教職工編號(hào)在官網(wǎng)申請獲得永久使用權(quán)。初次打開軟件時(shí)需要設(shè)置Python 解釋器,將提前安裝好的python.exe 文件加入環(huán)境中。隨后在Pycharm 中選擇File-settings-Project Interpreter,添加相關(guān)PyQt5 的工具包;然后選擇File-settings-Tools-External Tools,點(diǎn)擊左上角的綠色加號(hào),Name 填入Qt Designer,Program 選擇已安裝的PyQt5-tools 下面的designer.exe。Working directory 則選擇工作目錄,點(diǎn)擊OK 則添加了Qt Designer 作為PyCharm 的外置工具;Qt Designer 生成的.ui文件需要通過PyUIC 工具轉(zhuǎn)換成.py 文件,用同樣的方法添加pyuic 和pyrcc,pyrcc 主要負(fù)責(zé)將圖片轉(zhuǎn)換成可用的Python 代碼。至此本設(shè)計(jì)所需要的編程環(huán)境已經(jīng)完成。
登錄界面和注冊界面在Qt Designer 中設(shè)計(jì),選擇Dialog 窗口類型,頁面布局采用QGridLayout,選擇合適的控件添加背景完成界面設(shè)計(jì)后生成.ui 并轉(zhuǎn)為.py 文件,采用界面和邏輯代碼分開原則,易于后期系統(tǒng)維護(hù)。該系統(tǒng)選用MySQL Server 數(shù)據(jù)庫建立所需的相關(guān)數(shù)據(jù)庫。在Function()類中添加SQLAlchemy 類設(shè)置數(shù)據(jù)類型,Pymysql 接口中的 database 類用于數(shù)據(jù)庫的連接、創(chuàng)建等操作。show_warning_message()、show_info_message()函數(shù)用于彈出提示框。新用戶首先進(jìn)行注冊,在注冊界面輸入姓名、身份證號(hào)、密碼,確認(rèn)密碼點(diǎn)擊確定即注冊成功。在RegisterDialog 類中添加id_validator 類對身份證號(hào)進(jìn)行校驗(yàn),do_register()函數(shù)用于判定注冊界面姓名是否輸入、身份證號(hào)是否合法,對btn_confirm 控件添加do_register()函數(shù)。進(jìn)入登錄界面輸入身份證號(hào)和密碼即可登錄。在LoginDialog 類中do_login()函數(shù)用于判斷身份證號(hào)與密碼是否已注冊且匹配,do_register()函數(shù)用于登錄系統(tǒng),新用戶、密碼輸入錯(cuò)誤、身份證號(hào)不合法等均無法登錄系統(tǒng)且予以提示。注冊登錄模塊流程如圖2 所示。
登錄成功后進(jìn)入病人信息管理界面,包括病人姓名、性別、身份證號(hào)、科室、病區(qū)等基本信息控件,查詢條件分為必填項(xiàng)和選填項(xiàng):當(dāng)必填項(xiàng)查詢到的數(shù)據(jù)有重合時(shí),可以勾選其他查詢條件,__search()函數(shù)用于條件篩選,當(dāng)勾選選填項(xiàng)則會(huì)在Document 中查詢是否符合。下方有btn_query、btn_clear、btn_record,btn_listen 4 個(gè)按鈕,在PatientMangeWidget()類中初始化data_name、data_card、data_zone_index 等參數(shù),為各控件添加Function()類中定義好的函數(shù)實(shí)現(xiàn)參數(shù)對應(yīng)。為btn_query、btn_clear、btn_record、btn_listen 分別添加do_search()、clear_search_form()、do_log_patient()、do_voiceAssistant()函數(shù)實(shí)現(xiàn)查詢、清空界面數(shù)據(jù)、打開錄入界面、打開語音助手界面的功能。QTableWidget 控件用于顯示病人信息,refresh_table()函數(shù)中定義了住院號(hào)、科室、病區(qū)、姓名、性別、生日等QTableWidget-Item,分別傳遞對應(yīng)參數(shù),病人信息最后一欄設(shè)置了治療管理操作,為btn_edit 添加do_manage_patient_treatment()函數(shù),可打開治療檔案管理界面查看病人治療記錄,輔助醫(yī)生了解患者的治療詳情。最下方可選擇病人信息顯示頁面(見圖3)。
Fig.2 Registration and login process圖2 注冊登錄流程
相關(guān)核心代碼如下:
Fig.3 Patient information management interface圖3 病人信息管理界面
當(dāng)點(diǎn)擊錄入按鈕可在錄入界面輸入病人基本信息,如圖4 所示,添加科室、病區(qū),填寫病人癥狀、治療方案,最后點(diǎn)擊確定數(shù)據(jù),將數(shù)據(jù)保存便可在主頁面中查詢。在Log-PatientDialog()類中do_save_patient()函數(shù)用于判定各控件信息輸入是否符合設(shè)定規(guī)則,如姓名為2~32 個(gè)字符,基本信息控件必填,當(dāng)輸入有誤或?yàn)榭談t出現(xiàn)彈框提示。定義data 數(shù)據(jù)字典存放數(shù)據(jù),將參數(shù)傳遞給其他類。manage_departments()、manage_zones()函數(shù)分別打開添加科室、病區(qū)彈框。
在DepartmentManageDialog()、ZoneManageDialog()界面類中,refresh_table()函數(shù)用戶傳遞界面控件參數(shù)、添加QTableWidget 布局。do_save()用于保存編輯后的狀態(tài)??剖?、病區(qū)不能重復(fù)且不為空,不符合要求時(shí)會(huì)出現(xiàn)提示。
Fig.4 Patient registration interface圖4 病人登記界面
如圖5 所示,在病人信息管理界面點(diǎn)擊btn_edit 進(jìn)入治療檔案管理界面,該界面包括病人的基本信息及治療記錄,醫(yī)生可以添加或刪除治療記錄。在PatientTreatManage-Dialog()界面類傳入doc_id 參數(shù)對當(dāng)前病人治療信息進(jìn)行操作,在病人信息下方的QTableWidget 空間中顯示其治療記錄。add_treat_record()、delete_treat()函數(shù)傳入treat_id參數(shù),用于添加和刪除治療記錄。為btn_add 添加add_treat_record()函數(shù),可進(jìn)入治療參數(shù)填寫界面。Treat-LogDialog()界面類中do_save()函數(shù)用于保存填寫好的數(shù)據(jù),當(dāng)數(shù)據(jù)為空時(shí)出現(xiàn)提示。
Fig.5 Patient treatment record interface圖5 病人治療記錄界面
語音交互前期簡稱為IVR(Interactive Voice Response),即語音互動(dòng)式應(yīng)答,隨后在人工智能和模式識(shí)別技術(shù)的影響下,自然的交互方式開始逐步在各方面進(jìn)入大眾視野[15-16]。如慢性病管理語音機(jī)器人可以與患者進(jìn)行實(shí)時(shí)交流和溝通,進(jìn)行運(yùn)動(dòng)、膳食與心理干預(yù)、任務(wù)推送及效果評估等慢病健康自我管理工作[17]。基于此,該軟件系統(tǒng)設(shè)計(jì)了語音助手功能,旨在輔助醫(yī)生治療并提高工作效率。語音交互包括語音輸入、語音識(shí)別、語義理解、語音合成、語音播報(bào)等環(huán)節(jié)[18](見圖6)。
本文采用的語音識(shí)別技術(shù)采用百度語音平臺(tái),相比于其它語音識(shí)別方式,百度語音具有一系列優(yōu)勢。2015 年,百度公司宣布在噪音值輕微環(huán)境中,百度語音識(shí)別技術(shù)的準(zhǔn)確率已達(dá)到97% 以上。2017 年,百度發(fā)布百度AI 開放平臺(tái)[19],其識(shí)別精度較高、平臺(tái)開源,應(yīng)用廣泛[20-21],可識(shí)別中文、英語、粵語和四川話。首先在官網(wǎng)注冊,獲取API Key、Secret Key 以及離線SDK 工具包。語義理解和語音合成利用圖靈機(jī)器人平臺(tái),需要在官網(wǎng)注冊獲取urls、key 以及api_key。將百度語音識(shí)別的語音結(jié)果傳到圖靈機(jī)器人中,圖靈機(jī)器人在對語義進(jìn)行理解后可以作出回答。在圖靈機(jī)器人中可以設(shè)計(jì)自定義回復(fù),建立輔助醫(yī)生治療的疾病類型庫及相關(guān)知識(shí)庫以輔助醫(yī)生診斷,當(dāng)醫(yī)生需要了解時(shí)即可啟動(dòng)語音助手。在SpeechDialog()界面類中調(diào)用function.py 中創(chuàng)建好的MyThread、VoiceThread 線程類,添加pyaudio 庫用于訪問麥克風(fēng)陣列、揚(yáng)聲器。在MyThread線程類中定義run()函數(shù)用于執(zhí)行子線程、獲取語音信號(hào)并發(fā)給界面。在Function()類中g(shù)et_file_content()函數(shù)用于獲取語音字節(jié)碼,lic()函數(shù)用于識(shí)別語音并轉(zhuǎn)為文字。在VoiceThread()線程類中,run()函數(shù)用于獲取圖靈回復(fù)內(nèi)容并轉(zhuǎn)為語音,將信號(hào)發(fā)給界面。在MyDialog()界面類創(chuàng)建界面,定義初始化函數(shù)init_gui()、界面顯示函數(shù)create_gui()、語音按鈕事件listen()函數(shù)等。為btn_listen 添加listen()函數(shù),監(jiān)聽樹莓派的麥克風(fēng)陣列是否有語音事件發(fā)生。
Fig.6 Voice assistant interface圖6 語音助手界面
相關(guān)核心代碼如下:
本文基于Pycharm 和PyQt5 設(shè)計(jì)出一款集合語音助手功能的多模塊、交互性強(qiáng)、操作簡便的超短波治療儀軟件系統(tǒng),主要包括注冊登錄模塊、病人信息管理模塊、病人登記模塊、病人治療記錄模塊和語音助手模塊。
目前對超短波治療儀產(chǎn)品的研究,大都只有注冊登錄模塊和部分病人治療記錄模塊,并且醫(yī)生無法及時(shí)獲取患者的過往治療史。本文設(shè)計(jì)的超短波軟件系統(tǒng)很好地解決了上述問題,不僅可將患者及治療儀數(shù)據(jù)同步保存到MySQL Server 數(shù)據(jù)庫中,而且基于百度語音及圖靈機(jī)器人平臺(tái)實(shí)現(xiàn)了語音助手模塊,幫助醫(yī)生通過對話形式快速獲取超短波治療儀、疾病類型介紹等信息,改善了傳統(tǒng)超短波治療儀數(shù)據(jù)保存滯后的情況,極大減輕了醫(yī)護(hù)工作者的工作負(fù)擔(dān)。未來可在該軟件系統(tǒng)的基礎(chǔ)上引入多線程技術(shù)進(jìn)而提高軟件運(yùn)行效率,為后期該軟件在醫(yī)院等落地應(yīng)用奠定基礎(chǔ)。