APP下载

远程协同手术指导平台的研究

2019-07-02李晋芳陈基荣李二芳莫建清李浩勇

实验室研究与探索 2019年6期
关键词:客户端远程服务器

李晋芳, 陈基荣, 李二芳, 莫建清, 李浩勇

(1.广东工业大学 机电工程学院, 广州 510006; 2.河南理工大学 河南理工大学医院, 河南 焦作 454150)

0 引 言

随着虚拟现实技术和医疗结合的深入,虚拟手术训练技术已趋于成熟,给现代医学领域带来了很多的便利。如今的虚拟手术系统还是存在着许多缺点和不完善的地方,使其不能成为一个成熟的虚拟现实交互平台。这些不足,根据虚拟现实技术的基本特征及虚拟手术中的一些实际需求,可以总结为3个方面:沉浸感不强;交互方式单一;不能实现远程协同。

基于虚拟医疗领域的这种现状,搭建一个高沉浸感的、拥有徒手交互等多种交互方式、可远程协同进行操作的高效手术训练平台具有很大的现实意义[1]。它的实现可以让医生便捷、高效的进行异地远程医疗培训及手术指导,特别是对于缓解我国中西部地区医疗资源紧张的情况将会起到很好的作用[2]。

为了实现该远程协同手术指导平台,本文对混合现实中的虚实场景叠加、交互方式、手术中患者身高数据采集、数据传输、虚拟场景信息的同步等相关技术进行了研究[3]。

1 指导平台总体设计

1.1 设计原则

在远程协同指导过程中,虚拟患者是不可缺少的元素。基于增强现实的远程手术指导是将指导医生和被指导医生置于同一个增强现实环境中[4]。在此环境中,他们可以看到由手术室真实画面和虚拟患者模型组成的画面,指导过程则通过指导医生对虚拟患者的姿态控制及双方的语音通话完成[5]。为此,远程协同手术指导平台应遵循如下原则:

(1) 能逼真的模拟真实患者。所采用的虚拟患者模型,应和真实患者具有相同或相似的身高、体态及各关节长度,以使其在手术指导过程中能和真实患者图像实现较好的三维空间上的重叠,使被指导的医生可以获得较精确的姿态调整信息。

(2) 可感知对方的存在和行为。被指导的医生需要通过增强现实场景观察到指导医生的手部动作,以判断操作的具体过程。指导医生需要实时观察到被指导医生的操作过程和真实患者的姿态,以调整自己的指导过程[6]。

(3) 协同对象间可进行实时沟通和交流。除了可通过图像的方式相互感知对方,远程手术指导的双方还可通过语音交流这一最自然的交流方式,进行更加充分的交流[7]。

1.2 系统整体框架设计

本文采用分层结构思想构建该系统平台的体系结构,如图1所示。整个系统采用客户端/服务器(Client/Server,C/S)网络架构,通过远程服务器实现实习端和指导端两个客户端的互联[8]。在服务器中,交互层用于用户账号信息、虚拟患者模型的管理、协同过程中场景信息的同步及双方语音和视频数据信息的传输;数据库用于存储用户账号信息数据、虚拟患者模型数据、指导平台操作规则及一些其他的数据。在两个客户端中,实习端的主要功能为实现虚拟患者模型和真实手术场景的叠加、同指导端进行语音通话以及对真实患者身高数据的采集;指导端除了有虚实场景叠加和语音通话,还可通过手势交互的方式对虚拟患者姿态进行控制。

图1 远程协同手术指导平台框架结构

2 平台硬件与软件结构

2.1 硬件组成

这里以膝关节镜手术的虚拟训练与指导为实例,介绍系统的硬件平台搭建,如图2所示。

图2 系统硬件组成

从输入设备、本地数据处理设备、服务器、输出设备4个方面, 可以将此硬件平台表示为如图3所示的框架结构。

图3 系统硬件框架

(1) 输入设备。输入设备由Kinect、Leap Motion、虚拟膝关节镜手术交互设备、Oculus定位仪、陀螺仪[9]及鼠标键盘组成。其中Oculus定位仪用于定位佩戴者头部所处的空间位置,它通过对头盔表面红外灯阵列的识别实现定位。Oculus陀螺仪内置于头盔中,用于感知使用者头部的空间旋转角度。鼠标键盘则用于进入手术训练系统前的用户账号登录等操作。

(2) 数据处理设备。数据处理设备指本文中的客户端主机,它是整个本地客户端的核心部分,为客户端系统提供后台服务和对数据的分析、计算等处理,同时也是输入设备、输出设备、远程服务器三者的通信桥梁。

(3) 服务器。服务器是各客户端之间进行连接的桥梁,也是实现远程协同通信的关键部件。本文原型系统开发阶段的服务器主要用于实现手术训练过程中,各客户端之间音、视频、场景信息等数据的同步以及用户账号的管理。

(4) 输出设备。输出设备包括Oculus头盔显示器、耳机及主机显示器。整个远程协同手术系统,在从本地输入设备和远程服务器获取到音、视频及虚拟场景数据信息后,经过客户端主机的数据处理,最终会将所得数据以 Oculus双目立体视觉和声音的形式呈现在用户的头盔显示器和耳机中。

2.2 软件框架

如图4所示,整个系统的软件框架由3层结构组成。底层是由操作系统、 Unity虚拟现实引擎、 Photon服务器框架、设备驱动、开发应用程序编程接口(Application Programming Interface,API)等组成的支撑环境。中间层是由远程协同通信核心功能模块组成的远程手术指导系统平台。顶层是由膝关节镜手术相关的虚拟场景模型、手术过程规范、关节镜设备交互方案等组成一个应用实例。

图4 平台软件系统框架

在底层,客户端相关功能逻辑主要由Unity引擎进行开发,本系统提供了渲染管线、碰撞检测、场景模型数据读写、GUI用户交互界面设计等功能。并且本系统中客户端主机与Leap Motion、Oculus、Kinect及膝关节镜手术外设设备等硬件的通信也是以Unity为桥梁,并借助相应的硬件驱动及开发API实现的。而服务器端与各客户端的通信则都是运用Photon服务器框架及SQL Server数据库实现的。另外,本文中客户端和服务器端的所有编程及代码编译工作都由Microsoft Visual Studio编程工具完成。由于其对.NET开发平台及C#编程语言的原生支持,并且由于Unity虚拟现实引擎及Photon服务器框架的底层的都是基于.NET平台进行开发,使得本文中系统的性能更加稳定并且开发效率更高。

在中间层,是以远程协同通信相关功能等4个功能模块的研究和实现为基础开发的系统平台。

在顶层是本文基于中间层系统平台开发的虚拟膝关节镜手术训练指导应用实例。该系统中的应用实例层是可扩展的。即可以基于中间层系统平台中的核心功能模块开发出其它手术训练应用实例[10],如:眼科手术、腹腔镜手术等。

3 远程协同手术指导关键支撑技术

3.1 虚拟患者模型骨骼绑定

在本系统中的远程手术指导过程中,指导医生需要通过调整虚拟患者模型的体位和膝部姿态,以使膝关节腔的形状满足内窥镜等手术器械的最佳入刀位置,从而为实习端医生做出正确示范。因此在本系统中的患者模型必须是一个可发生网格形变且各个关节可以灵活运动的模型,这就需要在人体视觉模型的基础上对其进行骨骼绑定。

骨骼绑定是在三维交互和虚拟现实领域常用的一种对于需要进行姿态变换的人物模型进行的附加操作。视觉模型即为一个不可变形的表面网格体,因此想要在交互过程中对本文中患者模型的动作、姿态进行控制,就需要通过骨骼绑定,给视觉模型中的每一个需要运动的关节点(如:膝关节、脊椎、手臂)生成相对应的有6个空间自由度的坐标点。

在骨骼绑定过程中,首先需要在3ds max中对可能发生运动的关节部位创建骨骼,骨骼创建应尽量模拟真实的人体骨骼的形态,但也要兼顾到手术仿真系统的性能,更多的骨骼关节点意味着更大的性能消耗。在满足交互需求的前提下,可简化骨骼创建的个数而只创建关键关节。如:人体脊柱有33块脊椎骨,它们都属于半活动关节,运动幅度并不大,可以将其关节数量减为3个。如图5所示,为患者视觉模型及创建好的与其相匹配的人体骨骼。骨骼创建完成之后,需要与模型进行相连,也叫做骨骼蒙皮。在此阶段,通过3ds max自动完成模型与骨骼的绑定,并默认每个关节点对周围模型各顶点具有一定权重的控制,控制权重值为0~1。1为完全连带关系,0则相反。蒙皮之后模型的每个顶点都和周围若干个骨骼关节点产生不同程度的连带关系,即每个关节点的移动都会不同程度地影响周围模型顶点的位置。

3.2 虚实场景叠加

本文采用leap motion和虚拟现实头盔oculus相结合的方式,实现场景的虚实叠加。Leap motion(见图6)两颗广角红外摄像头,可获取真实世界的立体灰阶图像。将leap motion获得的双目真实场景图像,和虚拟患者三维模型实时叠加,输出到oculus头盔,即可使用户观察到虚拟和现实场景相叠加的画面。

图6 Leap Motion硬件结构

图像的叠加需要通过Leap Motion SDK中提供frame.images()函数获取两个红外摄像机生成的200 F/s原生图像,并将其与虚拟患者模型在增强现实场景中实现叠加。首先需要将虚拟患者模型加载到虚拟场景中,并将其初始化位置设定在两个虚拟相机中间点连线的y轴正前方,如图7所示。之后,还需要通过设置渲染层级属性将虚拟患者的渲染层级置于矩形面片之前这样场景运行时,虚拟患者画面始终先于矩形面片上的双目图像被渲染,从而可以防止错误的遮挡关系出现。

图7 虚拟患者在场景中的放置

如图8所示,经过增强现实场景的搭建,并在其基础之上将Leap Motion双目图像和虚拟患者三维模型分别在同一虚拟相机中叠加渲染,实现了虚实场景的叠加。

图8 虚拟患者和真实场景的叠加

3.3 徒手交互及设备误差校正

本系统采用以Leap Motion的徒手交互作为主要交互方式,主要考虑到增强现实设备的应用不同于普通的二维平面应用程序,用户体验到的是一个真实世界和虚拟三维相叠加的空间,因此与之相对应的虚拟空间交互方式也应与现实世界中相似,这样才能大大的提升用户的交互体验和沉浸感。

要实现Leap Motion的徒手交互,首先需要获取手部运动追踪数据。这个过程可通过Leap Motion API为开发者提供的用于获取追踪数据的函数来实现。如通过调用Leap命名空间下的hand.PalmPostion()函数,可获取手掌的位置信息。

同时,由于Leap Motion设备在安装到Oculus上时难免发生角度以及位移的偏差,并且Leap Motion还使用了与Unity引擎不同的右手坐标系,这使得通过调用Leap Motion API所得到的初始追踪数据不能被直接同步给虚拟手模型,而需要通过测出相应的装置角度和位置偏差并对其进行相应的数据转换。本系统中对用户手部动作的追踪是通过安装于Oculus头盔正前方的Leap Motion来实现的。因此,安装位置的偏差量将会直接影响追踪数据的精度。如图9所示,在将Leap Motion绑定到Oculus正前面后,理论上应当使Leap Motion的原点位于设备佩戴者两个瞳孔中间点的正前方8 cm处,同时上下位置与Oculus视点保持一致。如果安装时出现误差则需要对其进行测量,并在后续进行补偿。

图9 Leap Motion标准安装位置

3.4 患者身高数据采集

在进行增强现实(Augmented Reality,AR)手术指导过程中,由于真实患者的身高各不相同,为了实现其和虚拟患者各关节在混合现实设备中的准确叠加,以使实习端医生能对真实患者进行更为精确的姿态调整,必须在手术指导开始前根据真实患者的身高对虚拟患者身高进行自动调整,使其相互匹配。同时,为了提高手术效率和数据精度,最佳的方式是可以由系统对身高数据自动进行采集并将其分别同步给实习端和指导端的虚拟患者,而不是由实习医生手动测量并输入系统。因此,考虑借助Kinect深度相机并通过适当算法来对患者身高数据进行检测。

利用Kinect的视场角并结合一些三角形几何运算,可以较精确的测量出人体身高。该身高测量方法的基本原理为,通过实时获取Kinect深度相机所获取的空间点三维数据并将其转化为空间点云信息,之后以此进行身高估算测量。首先,Kinect深度相机的水平视场角和垂直视场角分别为57°和43°。因此,可以根据图10所示的原理,并结合上一步中所计算出的深度值,对患者的实际高度进行测量。

图10 身高测试原理图

由于在使用Kinect对患者身高进行测量时,患者是躺在手术台上的,因此d为其到Kinect的实际距离;θ为摄像头水平视场角的1/2;Hr是待测量的患者实际身高;Hp为已检测到的人体像素高度;Hb为Kinect深度图像的像素高度。具体运算公式如下:

b=d×tanθ

通过上述方法,可以最终计算出真实患者较精确的身高值。其中,实际深度值d的计算,是通过将患者人体所在深度像元的深度值取平均值获得。这是因为人体是凹凸不平的,需要通过取平均值的方式对距离进行平均化,以使测量数据更为准确。

3.5 数据传输

3.5.1 音频数据传输

本文开发的是一个原型系统,同时在线用户量并不会很大,不会对服务器造成太大压力,因此采用单服C/S架构。即服务器端所有逻辑,均在一台服务器主机上完成。其大致结构如图11所示,属于星型网络结构[11]。在这种网络框架下的远程音频传输的实现过程可大致描述为:客户端1对音频信号进行采集并序列化处理,将其发送给服务器。通过服务器的实时广播功能,将此音频信号同步给其他需要接收的音频信号的客户端,如客户端2和客户端3,服务器在此充当数据中转站功能。接收到音频信号的客户端2和客户端3会对其反序列化并进行实时播放。

图11 本系统C/S架构图

在本系统中,音频信号的传输主要是为了让用户可以方便的进行远程的实时语音通话。客户端音频数据的采集需要借助Unity官方API中的Microphone和Audio Clip两个类来完成。其中Microphone类中,Unity提供了获取本地麦克风设备devices(),开始录音Start(),停止录音End(),获得录音样本位置GetPosition()等函数。通过它来获取本地录音设备并控制音频输入流通道的建立和关闭。获取到的音频数据将以AudioClip类的实例化对象形式存储起来,并通过录音数据压缩将其通过服务器发送给指导端或实习端。另一端接收数据后,同样通过音频数据的解压并将其播放出来。其中,数据压缩和解压的过程通过Zlib压缩算法完成。

3.5.2 视频数据传输

视频信号的传输主要是为了让指导医生端可以通过头盔显示器实时的看到虚拟患者和通过实习端混合现实头盔拍摄的真实患者图像相叠加的画面。获取真实患者图像是为了让指导端医生判断处于实习端的真实患者姿态是否符合膝关节镜手术的要求,如不符合就会通过Leap Motion徒手交互方式调节与之叠加的虚拟患者姿态,并且此调节过程可以被实习端医生通过混合现实头盔实时的观察到,实习医生只需要将躺在手术台上的真实患者姿态调整为和虚拟患者重合即可。

视频传输的大致设计思路,如图12所示。在实习医生客户端,通过访问Leap Motion API,从其中获取位图格式的实时视频帧数据,然后通过Divx编码器对视

图12 视频传输流程

频帧进行压缩。DivX是一项视频压缩技术[12],可将视频图像压缩至原来的10%,非常适合于网络视频传输中的压缩与解压缩。之后数据被传输给Photon服务器并通过服务器中转给待接收的指导端。接收到视频帧的指导端同样需要通过DivX对其进行实时解压,最后通过Oculus头盔实现视频显示。

3.5.3 虚拟场景信息同步

虚拟场景信息的同步包括虚拟患者身体姿态信息及指导医生虚拟模型手的姿态信息同步[13]。要实现虚拟场景的信息同步,需要选择适当的用于传输场景信息的传输协议,本文中虚拟场景信息同步环节的传输协议将选用JSON。

在本系统中,需要进行实时同步的场景信息主要是用指导医生双手的Leap Motion虚拟手模型、虚拟患者模型的动作信息[14]。以Leap Motion虚拟手为例,如图13所示,需要同步的信息为模型各关节点局部坐标系相对于世界坐标的空间6个自由度坐标值。在此手部模型中一共有16个关节点,可以将其信息通过一个复合JSON对象描述出来。

图13 Leap Motion虚拟手关节点局部坐标系

具体代码如下:{

"thumb":

[

{"joint":"bone1","position":[40,210,30],"rotation":[90,61,105]},

{"joint":"bone2","position":[81,25.4,30],"rotation":[21,35,76]},

{"joint":"bone3","position":[36,21,38],"rotation":[66,24,18]}

],

"index":

[

{"joint":"bone1","position":[93,24,88],"rotation":[101,31.3,105]},

{"joint":"bone2","position":[33,64,79],"rotation":[85,61.1,135]},

{"joint":"bone3","Position":[65,94,25],"rotation":[90,21,10]}

]

……

}

此JSON对象即为虚拟手模型数据的传输模型。对象中的最外层为手指名称和一个复合型JSON数组组成的变量。数组值又由3个复合型对象组成,每个对象分别存放:手指关节名、在虚拟世界坐标系中的空间坐标值、绕世界坐标系X、Y、Z3个坐标轴的旋转角度,关节点对象中的数据结构及数据类型见表1。同时,由于此传输模型内容较多,因此在上述复合JSON对象中,只列出了其中的拇指和食指的JSON模型数据,之后的中指、无名指、小拇指以及手掌、前臂等予以省略。通过复合JSON对象即可实现虚拟场景数据的在实习端和指导端之间的同步。

表1 各关节点的JSON对象数据结构

4 应用实例及分析

如图14(a)所示,在远程协同手术指导平台中,当指导端医生和实习端医生创建协同组并实现互联后,系统会在场景初始化阶段自动激活架设在手术台旁的Kinect对真实患者身高进行检测,并将此数据同步给实习端和指导端的虚拟患者模型,以使其身高尺寸同真实患者相匹配。图14(b)为同步后的虚拟患者同真实患者叠加后的图像,从混合现实头盔视角观察,其和真实患者在三维空间中实现了较好的叠加。图14(c)和14(d)则是从手术台正上方角度观察真实患者,以及通过混合现实头盔从该角度观察到的虚实患者叠加情况。

(a) Kinect患者身高检测(b) 虚实患者叠加画面1

(c) 患者真实画面(d) 虚实患者叠加画面2

如图15(a)所示,指导端医生开始通过Leap Motion徒手交互的方式调整虚拟患者膝关节姿态,为实习端医生做出膝关节镜手术术前姿态调整的示范。图15(b)为指导端医生混合现实头盔中呈现的虚实患者叠加画面,其中的真实患者背景画面为通过网络从实习端医生Leap Motion双目摄像头实时传输过来的,用于让指导端医生判断处于异地的实习端手术现场状况。同时,指导端医生通过驱动虚拟场景中的Leap Motion虚拟手调整虚拟患者姿态。

(a) 指导端操作实景(b) 指导端虚实叠加画面

如图16(a)和16(b)所示,当实习端医生接收到通过网络实时同步的指导端虚拟患者姿态后,便可以此为依据对真实患者膝关节姿态进行调整,并从各角度观察其和虚拟患者膝关节姿态是否完全叠加。如图16(c)和16(d)所示,实习端医生已将两者空间位置调整为完全重合,说明此姿态已符合指导端医生标准。

(a) 实习端操作实景(b) 实习端虚实叠加画面1

(c) 实习端操作实景(d) 实习端虚实叠加画面2

5 结 语

远程协同手术指导平台是一个集三维手术操作演示、语音视频沟通于一体的手术培训及指导系统[15]。它的实现可以让医生进行异地远程的医疗手术培训及手术指导,可以部分缓解我国中西部兑取医疗及手术资源紧张的问题[16]。同时,将本系统将增强现实技术、远程协同技术与虚拟手术相结合,也是对将虚拟现实技术应用到医疗领域的一种全新尝试。该模式可以被扩展到多种手术的远程指导中,如:眼科手术、腹腔镜手术,甚至可以用于汽车发动机维修等各种非医疗领域。

猜你喜欢

客户端远程服务器
让人胆寒的“远程杀手”:弹道导弹
远程工作狂综合征
通信控制服务器(CCS)维护终端的设计与实现
远程诈骗
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
基于Vanconnect的智能家居瘦客户端的设计与实现
得形忘意的服务器标准
计算机网络安全服务器入侵与防御
客户端空间数据缓存策略