骨质疏松筛查系统设计与实现
2020-08-05尹梓名胡晓晖吴亮宏孙大运钱忠心刘卫东钱本文
尹梓名 胡晓晖 吴亮宏 孙大运 钱忠心 刘卫东 钱本文
1.上海理工大学医疗器械与食品学院,上海 200093 2.上海康复器械工程技术研究中心,上海 200093 3.上海市浦东新区浦南医院脊柱外科,上海 200125 4.台湾大学医学院附属医院骨松科,台北 10617
1 引言
骨质疏松症(osteoporosis,OP)是一种严重危害老年人身体健康和生活质量的常见病和多发病[1]。对个体进行骨质疏松症风险评估和疾病筛查,能为该疾病的早期防治提供有效帮助。临床上评估骨质疏松风险的方法较多,但各有侧重点,例如国际骨质疏松基金会(International Osteoporosis Foundation,IOF)骨质疏松一分钟测试题[2]是根据患者简单病史,从中选择与骨质疏松相关的问题,由患者作答,从而初步筛选出可能具有骨质疏松风险的患者;亚洲人骨质疏松自我筛查工具(osteoporosis selfassessment tool for Asians,OSTA)[3]主要是根据年龄和体质量筛查骨质疏松症的风险,收集多项骨质疏松危险因素,并进行骨密度测定,但需要指出的是,OSTA所选用的指标过少,其特异性不高,需结合其他危险因素进行判断,且仅适用于绝经后妇女;骨折风险预测工具(fracture risk assessment tool,FRAX)[4]根据患者的临床危险因素及股骨颈骨密度建立模型,用于评估患者未来10年髋部骨折及主要骨质疏松性骨折(椎体、前臂、髋部或肩部)的概率。但FRAX工具不适于已接受有效抗骨质疏松药物治疗的人群。综上所述,虽然骨质疏松有关的量表很多,但临床上尚缺乏一种使用方便,并且信度和效度都较高的骨质疏松症筛查工具。
随着大数据、互联网和信息科技的发展,移动医疗越来越受到人们的重视。移动医疗将新兴的移动互联网技术应用到医疗领域,用以解决医疗痛点和临床问题[5]。尤其是以微信小程序为载体开发的各种移动医疗产品,因其随走随用的轻应用特性,赢得了众多开发者和消费者的青睐,能更广泛地应用到社区医疗服务中,帮助医生用户更方便地对骨质疏松疾病患者进行筛查和风险预测评估。因此,本文基于微信小程序的MINA框架[6],制定了一套面向骨质疏松症筛查的便捷、轻量级的解决方案,开发出“骨质疏松AI筛查防治”微信小程序,用以帮助医生解决在骨质疏松筛查中的各类问题,提高工作效率。
2 方法
2.1 系统架构
本系统基于微信小程序框架开发,系统整体的架构图如图1所示。
图1 系统整体架构Fig.1 Overall architecture of the system
整个系统可分为客户端和服务端,客户端上层是医生使用的各种功能,如筛查识别功能、数据统计分析功能、光学字符识别(optical character recognition,OCR)功能和内容可定制功能,同时包含各种系统所需的业务逻辑。客户端的下层是微信小程序的MINA框架,框架本身由视图层、逻辑层以及系统层构成。(1)视图层(View),框架的视图层控制页面的展现样式和数据的实时同步更新。(2)逻辑层(App service)是事务逻辑处理的地方。微信小程序在逻辑层接受视图层的事件触发动作并将数据进行处理后发送给视图层进行界面渲染。(3)系统层(Native),系统层负责数据的各种存储与调用。从视图层需要获取更新临时缓存数据,从逻辑层将缓存数据发送到视图层进行界面渲染。对于网络存储与调用以及文件存储微信小程序提供了相对应的接口。云服务端层则提供各种用于网络连接的云服务,包括程序调用的筛查服务、云函数服务、用于化验单照片存储的云存储服务、用于存储患者格式化数据的数据库和医学化验单的文字识别服务。
2.2 基于非关系型数据库的内容可定制技术
目前,临床上对于骨质疏松症的筛查是让患者完成多个骨质疏松筛查量表,以便获取患者更完整的临床信息。但是有如下问题:①如果量表题目过多,测试时间过长,占用了大量医生和患者的时间,很难在繁忙的临床环境下实施;②随着国际上对于骨质疏松症认知的加深,新的量表层出不穷,如何将最新的筛查工具方便快捷地应用到临床中?这就要求系统开发后具备一定的可修改性和可扩展性。针对以上两点需求,文本设计并开发了内容可定制的骨质疏松症筛查系统,即在临床专家审核后,由系统管理员对系统的测试题目进行配置,系统根据配置动态生成新的测试题目,或者删除旧的题目。新加或者删除测试题目既不影响对原有数据的访问,也不影响当前系统的使用。
如图2所示,虚线箭头表示系统管理员通过小程序的增加/删除测试题的功能去更改非关系型数据库的字段。实线箭头的闭环表示当小程序启动时,会发送访问数据集合的请求给数据库,数据库完成数据更新,小程序框架渲染数据,然后将现有的测试题目显示出来,就完成了内容可定制功能。具体来说,当系统管理员每次进入小程序启动系统时,小程序依次分批自动请求非关系型数据库中的不同类型测试题的集合,然后将获取到的数据传递到小程序,小程序MINA框架获取数据进行渲染并展示到界面的不同模块,小程序不会因为同时获取大量数据而出现卡顿、反应迟缓等现象。管理员可查看当前测试题全部数据以便确定需要配置测试题的位置信息,但对显示的信息不可编辑,不会因为管理员误操作而影响到数据库原数据;在系统管理员对骨质疏松症测试题进行配置时,通过调用服务端接口函数进行增加相应的测试题的题目选项等详细字段信息,当管理员有增加多项测试题的需求时,可通过增加输入内容模块,确认无误便可将配置数据一键增加到数据库中,同时更新并获取数据库中相应的字段。删除相应的测试题时,通过查询题目序号从数据库获取相应题目序号的测试题信息,然后可将其从数据库中删除相应的字段。完成配置操作的同时获取更新后的数据,数据库将配置后的数据传递到小程序进行界面渲染并展示,管理员可查看修改后的测试题的内容以便确认配置是否成功。
图2 内容可定制技术实现流程Fig.2 Implementation process of content-customizable technology
2.3 医学化验单OCR识别技术
骨质疏松症的诊断需要依赖骨转换标志物(bone turnover markers,BTMs)的测定。这些标志物的测定有助于鉴别原发性和继发性骨质疏松、判断骨转换类型、预测骨丢失速率、评估骨折风险等[7]。但是在骨质疏松症的社区筛查中,经常会遇到患者带着纸质化验单来就诊的情况,目前在临床工作中还没有能将医学化验单方便地转换成计算机可识别的结构化字符的工具。医生一般只能对化验单进行拍照,然后存档。图片中以像素形式保存的字符信息无法被计算机直接读取和利用,因此无法形成患者完整的电子化骨质疏松健康档案。
OCR是一种将图像中的字符和文字识别出来,并转换成计算机文本文件的技术[8]。如果将OCR技术应用于医学化验单的识别,通过对化验单拍照,OCR可以对化验单中的文字进行识别,将非结构化的图片转换成结构化的、计算机可直接读取的文字和数字,存入电子健康档案,方便今后数据的进一步分析、利用。与传统的手工录入相比,提高了工作效率。
目前,市场上已有很多成熟的OCR产品,但是这些产品都是面向通用领域,没有专门针对医学场景进行优化,处理效果并不好,也无法直接处理医学化验单。Tesseract是一款国际上使用最为广泛的开源OCR识别库[9]。因此本文以Tesseract为基础,建立了用于医学化验单识别的OCR引擎,实现了对医学化验单的OCR识别。
2.3.1化验单图像预处理:由于Tesseract对用于训练的化验单图像数据的质量要求较高,所以在训练之前必须先对图像进行预处理。只有保证高质量的图像,化验单的字符识别效果才能准确[10]。预处理的流程包括二值化、抗扭斜、特征提取处理等操作,如图3所示。
图3化验单图像预处理
Fig.3Image preprocessing of laboratory sheet
2
.
3
.
2
医学化验单OCR技术实现:图4展示了基于Tesseract的医学化验单OCR训练步骤。包括生成tif图片集、文本检测生成Box文件、调整Box文件中的错误、生成Unicharset文件、生成字体特征文件、创建词典文件、生成模糊字矫正文件、生成文字特征文件。
图4 OCR识别训练过程Fig.4 Training process for OCR
2.3.3医学化验单OCR引擎开发:为了将医学化验单技术应用于临床,本文设计并开发了医学化验单OCR识别引擎。该引擎可部署于服务器,作为一种软件的后台服务,供前端软件调用。OCR引擎的整体架构如图5所示。
图5 OCR识别引擎服务Fig.5 Service of OCR engine
2.4 骨质疏松筛查识别技术
骨质疏松筛查诊断的依据是临床指南。本文依据2017版原发性骨质疏松症诊疗指南[11],利用临床指南知识建模技术[12],构建了基于临床指南的数字化骨质疏松筛查模型,此模型可以作为知识库的一部分,与部署在云端的推理引擎一起为手机端的微信小程序提供骨质疏松筛查诊断推理服务,具体流程如图6所示。当用户在手机端输入骨密度DXA等各种检查报告之后,推理服务会依据临床指南自动得出诊断结论。
图6 骨质疏松筛查知识库及推理服务Fig.6 Knowledge base and inference service of osteoporosis screening
3 骨质疏松筛查系统主要功能
本系统主要提供了如下几个功能:系统用户分级登录、患者骨质疏松症量表测试、患者历史数据查询与统计分析、化验单OCR识别扫描等。
3.1 系统登录
在微信中搜索“骨质疏松AI筛查防治”,即可看到名为“骨质疏松AI筛查防治”的微信小程序。此款微信小程序分为受试者入口和医生入口。受试者入口针对患者在家自我筛查使用,医生入口供医生日常筛查使用。每位医生由管理员分配账号,每个账号只能访问自己患者的数据,实现用户权限的分级管理,如图7 A所示,图7B展示了系统的主界面和主要功能。
图7 系统登录与系统主界面 A:系统登录,B:系统主界面Fig.7 System login and main interface. A: System login, B: System main interface
3.2 患者骨质疏松症量表测试
医生用户登入系统后先录入患者的一些基本信息,然后对患者进行骨质疏松量表筛查,患者回答后,医生依次填入系统中,并可得出筛查结论,如图8所示。
图8 骨质疏松筛查测试题目Fig.8 Test questions of osteoporosis screening
3.3 患者历史数据查询与统计分析
本系统提供患者历史数据查询功能,医生只能查询并看到在自己处就诊的患者信息。医生还可以针对一个常用的统计指标进行统计分析,如图9所示。
图9 数据查询与统计分析Fig.9 Query and statistical analysis
3.4 OCR扫描识别
患者提供纸质骨质疏松相关化验单时,医生用户进入扫描识别模块进行相关操作,点击选择图片可调用手机相机进行拍照,或者从图库选择相关图片显示到画布组件中,然后在手机屏幕触碰选定指定的区域截取图片,系统会自动重新为截取部分分配宽高比渲染到画布中,如图10所示。
图10 使用医学化验单OCR识别引擎识别化验单Fig.10 Recognition of laboratory sheets using OCR engine
点击识别信息按钮便可调用百度提供的文字识别接口识别图片信息,成功之后会将识别结果显示出来,上一栏为化验项目,下一栏为检测结果。识别结果图片基本一致,错误较少时,医生可在识别文本当中进行编辑。若错误较多时可再次进行识别。确认识别信息无误后便可点击上传报告上传识别数据以及化验单原图到数据库集合和云储存中。
3.5 测试题目内容可定制管理
给管理员分配指定账号,当有测试题的变动需求后可联系管理员重新对测试题目进行相关配置。进入配置界面时在下方区域会自动加载当前骨质疏松测试题信息只能滑动屏幕查看但无法对其编辑选择,点击“增加题目”进入增加测试题类型选择界面,在单选题配置界面,默认两个选项,当有多个选项的需求时点击增加从选项便可添加相应数量的选项。其他类型题目点击增加题目便可实现一次增加多道测试题。相关界面如图11所示。
图11 通过内容可定制技术增加测试题目Fig.11 Adding test questions through content-customizable technology
删除测试题时,选择相应的删除的测试题的类型,然后输入测试题题号点击查询,系统会将查询到的测试题的题目序号以及题目信息显示在下方模块中,确认无误后点击删除按钮便可将该测试题从数据库集合中删除并返回配置界面,如图12所示。
图12 通过内容可定制技术删除测试题目Fig.12 Deleting test questions through content-customizable technology
4 讨论
本系统是基于MINA框架开发的微信小程序,相对于传统的移动医疗APP程序,本系统有如下优势:①无需安装,打开微信添加小程序后即可使用,简单方便,更易于在临床推广和应用。②本系统使用内容可定制技术研发,使得系统管理员可以在不开发任何代码的情况下,根据临床需求,更方便地对系统中的内容进行调整,随时调整,随时使用,缩短了临床需求到程序上线之间的响应周期。③医生在使用本系统研发的医学化验单OCR技术时,只需对纸质的医学化验单进行拍照,就可以识别化验单中的内容,将其作为结构化的临床信息存储到数据库中,便于构建患者完整的骨质疏松症电子档案,不仅提高了医生工作效率,也为今后数据的二次利用(如分析和挖掘)奠定了基础。
5 结论
本文基于移动医疗的内容可定制技术、临床指南数字化技术和医学化验单OCR识别技术,开发出一款骨质疏松症筛查系统。该系统可对患者进行骨质疏松量表测试,并可自动识别患者上传的化验单照片,保存成结构化的数据后,存入患者的骨质疏松健康档案中,提高了医生工作效率,方便医生收集患者数据进行临床统计和研究。未来,本系统还会根据收集的大量患者数据,利用人工智能技术搭建骨质疏松症风险预测与辅助诊断模型,通过筛查实现骨质疏松症的早发现,早治疗。