曹鵬,張翰文,張志常,常世杰
(1.中國醫(yī)科大學智能醫(yī)學學院計算機教研室,遼寧沈陽 110122;2.中國醫(yī)科大學智能醫(yī)學學院生物醫(yī)學工程系,遼寧沈陽 110122)
隨著生活水平不斷提高,人們的健康意識不斷增強,對于身體指標的各項檢查隨之增加。心電圖(Electrocardiogram,ECG)是利用心電圖機從體表記錄心臟每一心動周期所產(chǎn)生的電活動變化圖形的技術(shù),廣泛應用于記錄人體心臟的電活動以及幫助診斷心臟類疾病[1]。由于傳統(tǒng)紙質(zhì)心電圖不利于保存與傳輸,所以將如心電圖像之類的紙質(zhì)病歷及檢查報告電子化成為近年來的研究熱點[2]。
利用手機拍攝心電圖像可快速實現(xiàn)紙質(zhì)圖像電子化,但在拍攝過程中會產(chǎn)生圖像畸變,對圖像準確性產(chǎn)生影響。同時心電圖像結(jié)構(gòu)復雜,與傳統(tǒng)圖像校準存在區(qū)別[3]。
智能手機日益普及,移動端App被廣泛使用。小程序作為移動端App具有多平臺兼容、易推廣和成本低等優(yōu)點,成為主流移動端App 之一[4]。本設(shè)計利用小程序搭建心電圖像智能校準平臺,通過移動端小程序拍攝心電圖像實現(xiàn)上傳、服務端利用OpenCV 算法對拍攝心電圖像進行校準處理,還原原始數(shù)據(jù),最終將校正后結(jié)果存儲并返回移動端,達到利用移動端App智能還原原始心電數(shù)據(jù)并存儲的目的。
用戶登錄系統(tǒng)后,上傳拍攝的紙質(zhì)心電圖像,由于在拍攝過程中,角度、光線等因素可能使圖像產(chǎn)生傾斜、扭曲等畸變,對后續(xù)醫(yī)療信息的準確性和診斷產(chǎn)生影響,心電圖像智能存儲系統(tǒng)可以自動完成拍攝心電圖像的預處理,輪廓檢測,多邊形擬合以及圖像校準,最終返回還原的心電圖像,以備后續(xù)存儲、傳輸與診斷。
由于醫(yī)學圖像數(shù)據(jù)具有較強的隱私性,故系統(tǒng)設(shè)計時利用鑒權(quán)及對象存儲等方式保護用戶數(shù)據(jù)隱私及系統(tǒng)安全性[5]。
系統(tǒng)設(shè)計主要分為移動客戶端和服務器端兩部分。移動客戶端利用微信小程序?qū)崿F(xiàn),采用微信開發(fā)者工具進行開發(fā)。客戶端實現(xiàn)用戶對拍攝紙質(zhì)心電圖像的上傳功能,隨后將心電圖像上傳到至對象存儲中。服務端使用ubuntu操作系統(tǒng),采用云托管實現(xiàn)。服務器端通過權(quán)限訪問對象存儲桶,下載相應心電圖像對象,在服務端對心電圖像進行預處理,輪廓檢測,多邊形擬合以及圖像校準,最終將處理后的校準圖像上傳至對象存儲中,最終客戶端獲取相應心電校準圖像。

圖1 微信小程序+微信云托管搭建系統(tǒng)
本系統(tǒng)設(shè)計中使用對象存儲操作心電圖像,以及通過云托管搭建服務器端,是本系統(tǒng)設(shè)計的主要核心點和創(chuàng)新點,下面對這兩種技術(shù)給予說明。
1)對象存儲
本設(shè)計通過對象存儲實現(xiàn)心電圖像的上傳與下載,對象存儲(Cloud Object Storage,COS) 是騰訊云提供的一種存儲海量文件的分布式存儲服務,用戶可通過網(wǎng)絡(luò)隨時存儲和查看數(shù)據(jù)。騰訊云COS 使所有用戶都能使用具備高擴展性、低成本、可靠和安全的數(shù)據(jù)存儲服務。
COS通過控制臺、API、SDK和工具等多樣化方式簡單、快速地接入,實現(xiàn)了海量數(shù)據(jù)存儲和管理。通過COS 可以進行任意格式文件的上傳、下載和管理。同時遍布全國范圍的CDN/EdgeOne 節(jié)點可以對文件下載進行加速。利用騰訊云COS 可更好地對存儲圖像實現(xiàn)并發(fā)存儲和傳輸,同時也能更好地保證數(shù)據(jù)的安全性和隱私性[6]。
在實際操作中,文件對象被存儲在對象存儲的存儲桶中,存儲桶(Bucket)是對象的載體,可理解為存放對象的“容器”,且該“容器”無容量上限。對象以扁平化結(jié)構(gòu)存放在存儲桶中,無文件夾和目錄的概念,用戶可選擇將對象存放到單個或多個存儲桶中。對象存儲主要功能如表1所示。

表1 對象存儲主要功能
2)云托管
本設(shè)計的服務器端采用微信云托管實現(xiàn)。微信云托管是微信團隊提供的以云原生為基礎(chǔ)的,免運維、高可用服務上云解決方案[7]。云托管支持目前絕大多數(shù)語言以及框架項目,本設(shè)計服務端采用Flask框架部署,利用Python和OpenCV實現(xiàn)圖像處理功能。
同時,微信云托管還集成持續(xù)交付部署,DevOps自動化,安全鑒權(quán)等眾多能力,微信云托管與微信生態(tài)深度融合,具有免鑒權(quán),云調(diào)用,消息推送等眾多優(yōu)勢特性,并且在安全、可靠性方面有專業(yè)保障。
微信云托管使用目前主流的容器平臺Docker 以及容器編排技術(shù)Kubernetes(K8S)[8]。當使用微信生態(tài)下客戶端(小程序、公眾號),向部署在微信云托管上的后端服務發(fā)送請求時,會自動經(jīng)過微信接入層(內(nèi)網(wǎng)),并附帶微信校驗的權(quán)威用戶信息。
非微信生態(tài)下的客戶端(普通Web 網(wǎng)頁、App),向部署在微信云托管上的后端服務發(fā)送請求時,會經(jīng)過微信云托管公網(wǎng)網(wǎng)關(guān)層(所有用戶共用,由微信云托管團隊維護),并根據(jù)域名轉(zhuǎn)發(fā)到對應的用戶服務。微信云托管提供默認公網(wǎng)域名,也可以接入自己備案好的自定義域名。

圖2 微信云托管架構(gòu)
本設(shè)計中客戶端為移動端微信小程序,開發(fā)語言主要為JS 語言。小程序端主要功能為將拍攝心電圖像上傳至對象存儲的存儲桶,同步顯示上傳原始拍攝圖像,并在服務端處理圖像后顯示校準后圖像。
首先實現(xiàn)將拍攝心電圖片上傳至緩存,并返回臨時路徑,微信小程序開發(fā)API 中wx.chooseMedia 接口用于實現(xiàn)拍攝或從手機相冊中選擇圖片或視頻進行上傳,具體實現(xiàn)如下:
第二步利用上傳圖片的臨時路徑將圖片存儲至對象存儲的存儲桶,微信小程序云開發(fā)API 中wx.cloud.uploadFile 用于將文件上傳至云開發(fā)存儲或者對象存儲中,具體實現(xiàn)代碼如下:
最后在移動客戶端界面利用image組件和setData()方法同步顯示上傳的心電拍攝圖像。
本設(shè)計中服務端利用云托管搭建基于Python 的Flask框架,開發(fā)語言主要為Dockerfile腳本指令和Python。
首先利用Dockerfile 部署云托管服務器,服務器端使用ubuntu 系統(tǒng)。本設(shè)計中服務器端需實現(xiàn)心電圖像的預處理,輪廓檢測,多邊形擬合以及圖像校準等功能,故在服務器端安裝Python 環(huán)境及OpenCV 等圖像處理相關(guān)庫,Dockerfile文件主要腳本指令如下:
在requirements 文件中指定所需庫及相應版本,主要包括Flask 環(huán)境、Python 環(huán)境、OpenCV 庫以及對象存儲所需庫,主要指令如下:
第二步,在云托管服務器端實現(xiàn)對象存儲中文件的訪問,通過COS 默認域名訪問時,SDK 會以{bucketappid}.cos.{region}.myqcloud.com 的域名形式訪問COS。訪問對象存儲需先生成CosS3Client實例,然后循環(huán)上傳或下載對象,生成CosS3Client實例主要代碼如下:
生成CosS3Client 實例后對指定存儲桶中的文件對象進行上傳及下載操作,利用client.get_object 方法下載存儲桶中的對象文件,主要代碼如下:
bucket_MP=config.COS_BUCKET_MP #指定訪問存儲桶
#通過存儲桶+路徑獲得圖片文件到服務器端
利用client.upload_file方法上傳對象文件,根據(jù)文件大小自動選擇簡單上傳或分塊上傳,分塊上傳具備斷點續(xù)傳功能,主要代碼如下:
最后在服務器端利用OpenCV對獲得的心電拍攝圖像依次進行預處理[9],輪廓檢測[10],多邊形擬合以及圖像校準,流程圖如圖3所示。

圖3 服務端處理心電圖像流程圖
至此,完整地實現(xiàn)了心電圖像智能存儲系統(tǒng)的小程序部分和服務器端,通過訪問測試,可以較好地實現(xiàn)心電拍攝圖像的校準及存儲,運行示意結(jié)果如圖4所示。

圖4 心電圖像智能校正系統(tǒng)運行示意圖
本系統(tǒng)設(shè)計實現(xiàn)了心電圖像智能校準系統(tǒng),可對用戶上傳的拍攝心電圖像進行圖像校準操作,還原初始心電圖像數(shù)據(jù),為后續(xù)的傳輸、存儲及診斷提供輔助,有較強實用價值。系統(tǒng)采用對象存儲技術(shù),增強了心電圖像網(wǎng)絡(luò)中上傳下載速度以及安全性,同時對保護用戶隱私有積極作用。