王國偉,陸華麗,張苗苗,薛瑞晨,郝媛媛,趙 華
(南京師范大學(xué) 計(jì)算機(jī)與電子信息學(xué)院,江蘇 南京 210000)
隨著醫(yī)療和信息技術(shù)的快速發(fā)展,人們生活質(zhì)量不斷提高,人類的平均壽命在不斷增加,但同時(shí)“老齡化社會(huì)”“慢性疾病”等問題日益突出[1]。成年人由于工作忙碌常忘記服藥,老年人也因?yàn)榻⊥3M浄?,錯(cuò)誤服藥已經(jīng)成為整個(gè)社會(huì)密切關(guān)注的問題[2]。為了解決用戶錯(cuò)誤服藥等一系列的問題,設(shè)計(jì)一款集智能化與人性化的智能藥柜系統(tǒng)已經(jīng)迫在眉睫。
目前,智能藥柜系統(tǒng)應(yīng)用廣度雖遠(yuǎn)不及其他的智能家居產(chǎn)品,但也已經(jīng)有了一些成果[3]。美國Mobile Aspects公司采用了RFID設(shè)計(jì)了一款智能型的藥柜,可以將存儲(chǔ)量和使用情況記錄下來,而且可以識(shí)別藥品的使用期限,提醒過期藥品需要清除[4]。國內(nèi)市場也有相關(guān)的產(chǎn)品出現(xiàn),例如,天津德致倫電子科技有限公司基于STM32設(shè)計(jì)與實(shí)現(xiàn)了一款新型智能藥箱,該產(chǎn)品可以提醒老年人群體按時(shí)用藥,安全用藥[5]。同時(shí)國內(nèi)市場上也出現(xiàn)了很多適合在智能手機(jī)上使用的軟件,如“醫(yī)生樹”“醫(yī)指通”等[6]。但以上涉及的產(chǎn)品存在系統(tǒng)復(fù)雜,實(shí)施困難,成本較高,功能相對單一等一系列問題,并不能保證正確的人在正確的時(shí)間服用正確的藥物。
為了解決以上問題,本文結(jié)合多種產(chǎn)品的優(yōu)點(diǎn),從用戶實(shí)際使用時(shí)易出現(xiàn)的問題的角度出發(fā),設(shè)計(jì)一款基于樹莓派(Raspberry PI)的智能藥柜系統(tǒng)。在設(shè)計(jì)的智能藥柜系統(tǒng)中,采用指紋模塊以識(shí)別服藥對象、采用掃碼模塊掃入條碼編號(hào)、利用網(wǎng)絡(luò)爬蟲技術(shù)提取并存儲(chǔ)藥品信息、搭建數(shù)據(jù)庫用于信息管理。通過以上設(shè)計(jì)結(jié)合開發(fā)的交互界面,保證了用戶在正確的時(shí)間服用正確的藥物。為了進(jìn)一步提高系統(tǒng)的可用性,在Android Studio開發(fā)平臺(tái)設(shè)計(jì)了一款基于智能保健系統(tǒng)的掌上管理應(yīng)用程序(APP),APP可以遠(yuǎn)程查看和設(shè)置服務(wù)器的藥品信息和用戶信息。實(shí)驗(yàn)表明,本文提出的系統(tǒng)實(shí)施成本較低、功能齊全,從用戶使用需求出發(fā),解決了現(xiàn)有產(chǎn)品無法識(shí)別身份、無法管理信息的問題。
本文設(shè)計(jì)的智能藥柜由樹莓派主控板、條形碼掃入模塊、指紋識(shí)別模塊、鬧鐘提醒模塊、電磁鎖模塊和智能Android手機(jī)組成,系統(tǒng)總體架構(gòu)如圖1所示。用戶通過樹莓派顯示器進(jìn)行人機(jī)交互,移動(dòng)終端通過無線網(wǎng)絡(luò)獲得本地服務(wù)器數(shù)據(jù)庫數(shù)據(jù)。
圖1 系統(tǒng)總體架構(gòu)
選用的樹莓派主控板是一款基于ARM的微型電腦主板,有40個(gè)引腳,包括4個(gè)USB接口,以及1個(gè)HDMI視頻線接口[7]。圖1中,電磁鎖模塊采用GPIO高低電平控制的方式;指紋模塊采用串口通信,RXD與TXD交叉連接;掃碼模塊和鬧鐘模塊采用USB的方式與主控板通信。
智能藥柜功能模塊的驅(qū)動(dòng)和上層通信均采用Python語言設(shè)計(jì),功能代碼在PyCharm平臺(tái)上完成。指紋電路用于錄入用戶指紋,通過指紋特征值比對確認(rèn)身份進(jìn)入用戶界面,顯示用戶信息。隨后可以通過存取藥品模塊,掃入藥品條碼檢索提取藥品信息并存儲(chǔ)、顯示當(dāng)前用戶該服用的藥物并取出、同時(shí)可以取出其他藥品;可在服藥設(shè)置模塊選擇藥物后顯示藥品具體信息,并根據(jù)用法用量設(shè)置服藥鬧鐘時(shí)間;可在信息查詢模塊查詢服藥記錄、查詢藥品庫存、查詢存取藥日志;可在參數(shù)設(shè)置模塊設(shè)置用戶信息和系統(tǒng)設(shè)置。程序流程如圖2所示。
圖2 程序流程
指紋模塊和主控的通信采用主從模式,主設(shè)備發(fā)送的命令以及從設(shè)備模塊的應(yīng)答根據(jù)數(shù)據(jù)長度分為等于8 B和大于8 B兩類,大于8 B的數(shù)據(jù)格式為“數(shù)據(jù)頭+數(shù)據(jù)包”,數(shù)據(jù)頭的格式見表1所列。其中:CMD為命令/應(yīng)答類型;P1,P2,P3為命令參數(shù);Q1,Q2,Q3為應(yīng)答參數(shù),Q3用于返回操作的有效性信息,0x00為操作成功,0x01為操作失敗,0x04為數(shù)據(jù)庫已滿,0x06表示用戶已存在。
表1 數(shù)據(jù)頭格式
為了確保指紋數(shù)據(jù)庫指紋的唯一性,1枚指紋只能添加1個(gè)用戶,需要將模塊設(shè)置為“禁止重復(fù)模式”,此時(shí)CMD設(shè)置為0x2D,P1設(shè)置為0,P2設(shè)置為Byte5=1:0。在采集圖像時(shí),命令數(shù)據(jù)長度為8 B,CMD=0x24,P1,P2,P3為0,應(yīng)答數(shù)據(jù)包中指紋圖像200×264像素,每個(gè)像素灰度用8位表示,指紋圖像如圖3所示,模塊成功上傳指紋圖像后提取指紋的特征值,按指定用戶號(hào)存入DSP模塊數(shù)據(jù)庫中。
圖3 指紋圖像
下傳指紋特征值與DSP模塊數(shù)據(jù)庫比對為1∶N時(shí),CMD=0x43,命令格式為“數(shù)據(jù)頭+數(shù)據(jù)包”,數(shù)據(jù)包中存入當(dāng)前用戶的指紋特征值。
服務(wù)器的數(shù)據(jù)庫使用目前最流行的關(guān)系型和關(guān)聯(lián)性數(shù)據(jù)庫管理系統(tǒng)MySQL[8]。關(guān)聯(lián)性數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,而不是將所有的數(shù)據(jù)放在一個(gè)大倉庫,這樣就提高了速度和靈活性。MySQL使用的操作語言是SQL,操作數(shù)據(jù)非常便捷。
設(shè)計(jì)的智能藥柜系統(tǒng)的數(shù)據(jù)庫需要存儲(chǔ)用戶信息、藥品庫存信息、服藥記錄信息、存藥取藥日志信息、藥品信息。
建立的表與對應(yīng)的含義見表2所列。
表2 數(shù)據(jù)庫表
掃碼存藥功能采用掃碼模塊識(shí)別藥盒上的條碼,系統(tǒng)將條碼編號(hào)輸入到“1藥網(wǎng)”藥品網(wǎng)站檢索此藥品,進(jìn)一步地,系統(tǒng)爬蟲模塊爬取藥品的名稱、功能主治、用法用量、用藥禁忌、不良反應(yīng)并保存到數(shù)據(jù)庫藥品信息表中,系統(tǒng)流程如圖4所示。掃碼模塊錄入藥盒條碼編號(hào)并檢索信息過程如圖5所示。
圖4 系統(tǒng)流程圖
圖5 掃碼檢索藥品過程
傳統(tǒng)的爬蟲通過直接模擬HTTP請求來爬取站點(diǎn)信息,由于這種方式和瀏覽器訪問差異比較明顯,很多站點(diǎn)都采取了反爬手段,無法有效地爬取需要的信息。為了避免站點(diǎn)的反爬導(dǎo)致藥品信息爬取失敗,本文采用Selenium爬蟲框架對藥品進(jìn)行主要信息檢索、分類、存儲(chǔ)。Selenium是一個(gè)用于對Web網(wǎng)頁進(jìn)行自動(dòng)化測試的工具,可以通過它提供的方法自動(dòng)操作瀏覽器,完全模擬人的操作行為,瀏覽器選擇Google Chrome 87.0.4280.88,同時(shí)安裝對應(yīng)版本的驅(qū)動(dòng)WebDriver。Selenium通過WebDriver協(xié)議控制瀏覽器來完成一系列的任務(wù)。首先,通過Selenium的API得到“1藥網(wǎng)”輸入框?qū)ο螅唤酉聛碓谳斎肟蜉斎霔l碼編號(hào)進(jìn)入此藥品對應(yīng)的頁面,此時(shí)就拿到了該藥品網(wǎng)頁的HTML源碼;下一步利用Xpath方法提取系統(tǒng)需要的“藥品名稱”“功能主治”“用法用量”“用藥禁忌”“不良反應(yīng)”。爬取過程如圖6所示。在數(shù)據(jù)庫藥品信息表中創(chuàng)建字段,將上述5類藥品信息保存至數(shù)據(jù)庫中。創(chuàng)建的字段與對應(yīng)的含義見表3所列。
圖6 爬取過程
表3 MySQL藥物信息字段
智能藥柜系統(tǒng)用戶界面設(shè)計(jì)采用PyQt5工具包。PyQt是由 Phil Thompson開發(fā)的一個(gè)創(chuàng)建GUI應(yīng)用程序的工具包,其是Python編程語言和Qt庫的成功融合[9-10]。在本系統(tǒng)上位機(jī)的設(shè)計(jì)中,使用QtDeSinger設(shè)計(jì)用戶GUI,將生成的UI文件通過PYUIC5工具轉(zhuǎn)換成PY文件,下一步在PyCharm平臺(tái)編寫功能代碼,使用到的組件包括QWidget、QLabel、QPushButton、QTextEdit、QMessageBox、QTextBrowse。智能藥柜登錄頁面如圖7所示。
圖7 智能藥柜登錄頁面
應(yīng)用程序(APP)的設(shè)計(jì)使用Java語言,在Android Studio平臺(tái)上完成[11]。手機(jī)APP模塊包括存取藥日志、健康信息、服藥記錄、藥品庫存信息和用戶信息5個(gè)子模塊,如圖8所示。其中:存取藥日志模塊用于查看存藥和取藥記錄;健康信息模塊用于查看用藥禁忌;服藥記錄模塊用于查看用戶歷史服藥記錄;藥品庫存信息模塊用于查看藥品信息及藥品的剩余量;用戶信息模塊用于查看用戶的個(gè)人信息。
圖8 手機(jī)APP功能設(shè)計(jì)框圖
數(shù)據(jù)庫操作使用JDBC(Java Database Connectivity)。JDBC是實(shí)現(xiàn)Java應(yīng)用程序與各類不一樣數(shù)據(jù)庫會(huì)話的一種體制,主要作用是實(shí)現(xiàn)了對數(shù)據(jù)庫的訪問和操作。JDBC能實(shí)現(xiàn)的主要功能包括:請求連接數(shù)據(jù)庫、向數(shù)據(jù)庫發(fā)送 SQL請求、查詢結(jié)果等功能[12]。其實(shí)現(xiàn)步驟為:加載JDBC驅(qū)動(dòng)程序;提供JDBC連接的URL;創(chuàng)建數(shù)據(jù)庫的鏈接和執(zhí)行SQL語句操作[13]。加載驅(qū)動(dòng)就是在使用數(shù)據(jù)庫之前需要導(dǎo)入MySQL和JDBC的驅(qū)動(dòng)包到Android的Java build path[14],使用JDBC驅(qū)動(dòng)程序鏈接MySQL數(shù)據(jù)庫,連接成功之后就可以使用SQL語句對數(shù)據(jù)庫進(jìn)行操作,在MySQL數(shù)據(jù)庫中建立數(shù)據(jù)表。
本文通過硬件及軟件的設(shè)計(jì),實(shí)現(xiàn)了如圖9所示的智能藥柜。為了驗(yàn)證系統(tǒng)的可行性和系統(tǒng)工作流程,將可觸摸顯示器安裝到藥柜上,將主控板及周邊功能模塊部署到藥柜對應(yīng)位置。首先給主控板供電,設(shè)置目標(biāo)IP地址為192.168.1.101,固定端口號(hào)。經(jīng)過測試,Android手機(jī)APP與數(shù)據(jù)庫可以做到實(shí)時(shí)通信,各功能模塊均可正常工作。系統(tǒng)各模塊如10所示。
圖9 實(shí)物圖
圖10 模塊實(shí)物圖
登入系統(tǒng)后進(jìn)入主頁面,主頁面功能包括:
(1)顯示當(dāng)前用戶信息;
(2)存取藥品模塊,包括當(dāng)前用戶此時(shí)需要服用的藥物、選擇其他藥物以及掃入藥品條形碼檢索藥品信息并存儲(chǔ);
(3)服藥設(shè)置模塊,選擇該用戶關(guān)聯(lián)下的藥品,并調(diào)取數(shù)據(jù)庫關(guān)于該藥品的基本信息,根據(jù)用法用量設(shè)置服藥鬧鐘并在右側(cè)顯示該藥品的圖片;
(4)參數(shù)設(shè)置模塊,包括用戶信息設(shè)置以及系統(tǒng)設(shè)置;
(5)信息查詢模塊,包括歷史服藥記錄查詢、藥品庫存查詢以及存取藥品記錄查詢。
系統(tǒng)主頁面如圖11所示。
圖11 智能藥柜系統(tǒng)
點(diǎn)擊“歷史服藥記錄查詢”按鈕,系統(tǒng)則調(diào)取該用戶數(shù)據(jù)庫所有的歷史服藥記錄并顯示在主欄目中,如圖12所示。
圖12 用戶歷史服藥記錄
點(diǎn)擊“掃碼存藥”按鈕,使用掃碼模塊掃入藥盒上的條碼編號(hào),檢索、分類并保存到數(shù)據(jù)庫中。使用Navicat數(shù)據(jù)庫可視化管理工具連接到樹莓派MySQL數(shù)據(jù)庫,輸入MySQL用戶名、密碼登錄成功,在藥品信息表中查看藥品信息添加情況。圖13是Navicat中查看掃碼爬取“1藥網(wǎng)”藥品的關(guān)鍵信息。
圖13 掃碼存藥測試
智能終端登錄測試如圖14所示,終端功能包括查看“存取藥日志”“健康信息”“服藥記錄”“藥品庫存信息”以及“用戶信息”。
圖14 手機(jī)終端測試
本文針對已有的智能藥柜在實(shí)際使用中出現(xiàn)的問題,基于樹莓派主控設(shè)計(jì)了一種智能藥柜。設(shè)計(jì)的智能藥柜可解決現(xiàn)實(shí)生活中服藥的用戶身份識(shí)別和藥品信息管理,及用戶經(jīng)常忘、漏服藥等問題。測試結(jié)果表明,該系統(tǒng)軟硬件工作正常,APP能正常操作數(shù)據(jù)庫內(nèi)容,上位機(jī)能夠正常使用,能滿足用戶實(shí)際的需求。