曹鹏,张翰文,张志常,常世杰

(1.中国医科大学智能医学学院计算机教研室,辽宁沈阳 110122;2.中国医科大学智能医学学院生物医学工程系,辽宁沈阳 110122)

1 研究背景

随着生活水平不断提高,人们的健康意识不断增强,对于身体指标的各项检查随之增加。心电图(Electrocardiogram,ECG)是利用心电图机从体表记录心脏每一心动周期所产生的电活动变化图形的技术,广泛应用于记录人体心脏的电活动以及帮助诊断心脏类疾病[1]。由于传统纸质心电图不利于保存与传输,所以将如心电图像之类的纸质病历及检查报告电子化成为近年来的研究热点[2]。

利用手机拍摄心电图像可快速实现纸质图像电子化,但在拍摄过程中会产生图像畸变,对图像准确性产生影响。同时心电图像结构复杂,与传统图像校准存在区别[3]。

智能手机日益普及,移动端App被广泛使用。小程序作为移动端App具有多平台兼容、易推广和成本低等优点,成为主流移动端App 之一[4]。本设计利用小程序搭建心电图像智能校准平台,通过移动端小程序拍摄心电图像实现上传、服务端利用OpenCV 算法对拍摄心电图像进行校准处理,还原原始数据,最终将校正后结果存储并返回移动端,达到利用移动端App智能还原原始心电数据并存储的目的。

2 系统总体设计

2.1 系统设计目标

用户登录系统后,上传拍摄的纸质心电图像,由于在拍摄过程中,角度、光线等因素可能使图像产生倾斜、扭曲等畸变,对后续医疗信息的准确性和诊断产生影响,心电图像智能存储系统可以自动完成拍摄心电图像的预处理,轮廓检测,多边形拟合以及图像校准,最终返回还原的心电图像,以备后续存储、传输与诊断。

由于医学图像数据具有较强的隐私性,故系统设计时利用鉴权及对象存储等方式保护用户数据隐私及系统安全性[5]。

2.2 系统设计架构与技术介绍

系统设计主要分为移动客户端和服务器端两部分。移动客户端利用微信小程序实现,采用微信开发者工具进行开发。客户端实现用户对拍摄纸质心电图像的上传功能,随后将心电图像上传到至对象存储中。服务端使用ubuntu操作系统,采用云托管实现。服务器端通过权限访问对象存储桶,下载相应心电图像对象,在服务端对心电图像进行预处理,轮廓检测,多边形拟合以及图像校准,最终将处理后的校准图像上传至对象存储中,最终客户端获取相应心电校准图像。

图1 微信小程序+微信云托管搭建系统

本系统设计中使用对象存储操作心电图像,以及通过云托管搭建服务器端,是本系统设计的主要核心点和创新点,下面对这两种技术给予说明。

1)对象存储

本设计通过对象存储实现心电图像的上传与下载,对象存储(Cloud Object Storage,COS) 是腾讯云提供的一种存储海量文件的分布式存储服务,用户可通过网络随时存储和查看数据。腾讯云COS 使所有用户都能使用具备高扩展性、低成本、可靠和安全的数据存储服务。

COS通过控制台、API、SDK和工具等多样化方式简单、快速地接入,实现了海量数据存储和管理。通过COS 可以进行任意格式文件的上传、下载和管理。同时遍布全国范围的CDN/EdgeOne 节点可以对文件下载进行加速。利用腾讯云COS 可更好地对存储图像实现并发存储和传输,同时也能更好地保证数据的安全性和隐私性[6]。

在实际操作中,文件对象被存储在对象存储的存储桶中,存储桶(Bucket)是对象的载体,可理解为存放对象的“容器”,且该“容器”无容量上限。对象以扁平化结构存放在存储桶中,无文件夹和目录的概念,用户可选择将对象存放到单个或多个存储桶中。对象存储主要功能如表1所示。

表1 对象存储主要功能

2)云托管

本设计的服务器端采用微信云托管实现。微信云托管是微信团队提供的以云原生为基础的,免运维、高可用服务上云解决方案[7]。云托管支持目前绝大多数语言以及框架项目,本设计服务端采用Flask框架部署,利用Python和OpenCV实现图像处理功能。

同时,微信云托管还集成持续交付部署,DevOps自动化,安全鉴权等众多能力,微信云托管与微信生态深度融合,具有免鉴权,云调用,消息推送等众多优势特性,并且在安全、可靠性方面有专业保障。

微信云托管使用目前主流的容器平台Docker 以及容器编排技术Kubernetes(K8S)[8]。当使用微信生态下客户端(小程序、公众号),向部署在微信云托管上的后端服务发送请求时,会自动经过微信接入层(内网),并附带微信校验的权威用户信息。

非微信生态下的客户端(普通Web 网页、App),向部署在微信云托管上的后端服务发送请求时,会经过微信云托管公网网关层(所有用户共用,由微信云托管团队维护),并根据域名转发到对应的用户服务。微信云托管提供默认公网域名,也可以接入自己备案好的自定义域名。

图2 微信云托管架构

3 心电图像智能分析系统设计与实现

3.1 客户端功能实现

本设计中客户端为移动端微信小程序,开发语言主要为JS 语言。小程序端主要功能为将拍摄心电图像上传至对象存储的存储桶,同步显示上传原始拍摄图像,并在服务端处理图像后显示校准后图像。

首先实现将拍摄心电图片上传至缓存,并返回临时路径,微信小程序开发API 中wx.chooseMedia 接口用于实现拍摄或从手机相册中选择图片或视频进行上传,具体实现如下:

第二步利用上传图片的临时路径将图片存储至对象存储的存储桶,微信小程序云开发API 中wx.cloud.uploadFile 用于将文件上传至云开发存储或者对象存储中,具体实现代码如下:

最后在移动客户端界面利用image组件和setData()方法同步显示上传的心电拍摄图像。

3.2 服务端功能实现

本设计中服务端利用云托管搭建基于Python 的Flask框架,开发语言主要为Dockerfile脚本指令和Python。

首先利用Dockerfile 部署云托管服务器,服务器端使用ubuntu 系统。本设计中服务器端需实现心电图像的预处理,轮廓检测,多边形拟合以及图像校准等功能,故在服务器端安装Python 环境及OpenCV 等图像处理相关库,Dockerfile文件主要脚本指令如下:

在requirements 文件中指定所需库及相应版本,主要包括Flask 环境、Python 环境、OpenCV 库以及对象存储所需库,主要指令如下:

第二步,在云托管服务器端实现对象存储中文件的访问,通过COS 默认域名访问时,SDK 会以{bucketappid}.cos.{region}.myqcloud.com 的域名形式访问COS。访问对象存储需先生成CosS3Client实例,然后循环上传或下载对象,生成CosS3Client实例主要代码如下:

生成CosS3Client 实例后对指定存储桶中的文件对象进行上传及下载操作,利用client.get_object 方法下载存储桶中的对象文件,主要代码如下:

bucket_MP=config.COS_BUCKET_MP #指定访问存储桶

#通过存储桶+路径获得图片文件到服务器端

利用client.upload_file方法上传对象文件,根据文件大小自动选择简单上传或分块上传,分块上传具备断点续传功能,主要代码如下:

最后在服务器端利用OpenCV对获得的心电拍摄图像依次进行预处理[9],轮廓检测[10],多边形拟合以及图像校准,流程图如图3所示。

图3 服务端处理心电图像流程图

至此,完整地实现了心电图像智能存储系统的小程序部分和服务器端,通过访问测试,可以较好地实现心电拍摄图像的校准及存储,运行示意结果如图4所示。

图4 心电图像智能校正系统运行示意图

4 结束语

本系统设计实现了心电图像智能校准系统,可对用户上传的拍摄心电图像进行图像校准操作,还原初始心电图像数据,为后续的传输、存储及诊断提供辅助,有较强实用价值。系统采用对象存储技术,增强了心电图像网络中上传下载速度以及安全性,同时对保护用户隐私有积极作用。