基于Android系统的光谱传感物联网移动终端设计

2019-03-19 01:01,,,,
计算机测量与控制 2019年3期
关键词:微分光谱服务器

,, ,,

(1.中国科学院上海技术物理研究所 传感技术联合国家重点实验室,上海 200083;2.中国科学院上海技术物理研究所 中国科学院红外成像材料与器件重点实验室, 上海 200083;3.中国科学院大学,北京 100049; 4.上海科技大学,上海 200083)

0 引言

近红外光谱是指波长在780-2526nm范围内的电磁波[1]。由于绝大多数无机化合物和有机化合物的化学键的振动在近红外光谱区会产生的倍频和合频的吸收,通过对物质的近红外光谱分析可定性或定量的分析其组分[2]。近红外光谱分析技术具有无损、快速高效、便于在线分析以及测量结果稳定性好等优点[3],已经广泛应用于农业、医药、食品、纺织、石油化工等多个领域[4]。将近红外采集设备与物联网结合起来也是当下的研究热点。

据工信部报道,世界物联网用户已经突破十亿,并且每一季度仍保持2.5%的增速[5]。在物联网的飞速发展中,感知层成功实现了温湿度信息、位置信息、视频监控等信息的获取和感知,关于物质光谱的定性、定量分析可以通过近红外技术来实现。传统的光谱分析仪器由于体积和成本的限制,难以直接应用于物联网领域。为方便用户随时随地获取物质光谱信息,本课题组以自研光谱感知节点[6],搭建了光谱传感物联网。如图1所示,光谱传感物联网由节点区域(BLOCK,包括光谱节点与环境节点,其中环境节点包括二氧化碳浓度节点、温度节点、湿度节点以及光照强度节点)、云服务器、数据库、移动终端四部分构成。光谱节点采集光谱数据上传到云数据库,移动终端通过访问云服务器请求数据,云服务器从云数据库获取移动终端所请求的对应时间、区域的光谱数据传输给移动终端。

图1 光谱传感物联网结构

近年来国内微型光谱仪移动终端软件发展迅速。哈尔滨工业大学赵杨进行了基于Android平台的激光光谱仪数据处理的研究,作者采用Android平台,利用USB接口连接光谱仪与移动终端实现数据传输[7]。江苏大学耿德春进行了基于Android平台近红外光谱仪控制及工作状态监测的开发研究,实现通过移动终端对光谱仪的硬件控制,光谱扫描,数据与处理,模型调用等功能[8]。桂林电子科技大学糜荣,王永,熊显名等进行了基于Android平台的微型光谱仪数据传输与显示研究,通过wifi网络将光谱仪与移动终端进行连接[9]。但应用于光谱传感物联网的移动终端软件研究未见报道。

光谱传感物联网可突破感知节点与终端设备距离的限制,用户在蜂窝网络下即可获取数据。其中移动终端是用户与光谱传感物联网数据交互的媒介,本文对光谱传感物联网专用移动终端软件设计进行了研究。可展示物联网下光谱节点及环境节点信息,通过蜂窝网络获取数据并以图形化形式显示,以及对图像进行保存,进一步在移动终端上实现了光谱数据的归一化,一阶微分,二阶微分,峰值寻找的数据处理功能。

1 移动终端总体设计

近年来Android系统发展迅速,测控系统和仪器设备有使用基于Android操作系统的移动设备代替计算机设备的趋势,从而具有体积小、轻便易携、功耗低、处理能力强等优点[10]。Android是由谷歌公司推出的移动设备操作系统,基于Linux,主要包括应用程序层、应用程序框架层、程序库、Android运行库和Linux内核等部分[11]。

本项目开发的移动终端重点在于实现手机与云服务器之间的通信及数据交互,使用户在使用蜂窝网络时可以随时随地访问数据库获取任意时刻的光谱或者环境数据,进行图形化展示及光谱数据的预处理,并将结果保存在手机。

1.1 移动终端功能设计

移动终端作为用户与光谱传感物联网交互的入口,需要实现登录注册,节点信息获取,数据获取与处理,图像数据保存功能。可分为三大模块:用户信息模块、节点信息模块以及数据信息模块,移动终端系统功能图由图2所示。

图2 移动终端系统功能结构图

用户信息模块实现登录与注册功能。节点信息模块中由于光谱节点与环境节点是以Block为区域进行排布的,一个Block中包含数十个光谱节点与环境节点。为了提高查找对应节点信息的效率,先获取其所在Blcok信息,再从中进行查找。数据信息模块包括访问数据库获取数据,数据绘图,数据处理以及将图像保存在系统相册的功能。

1.2 移动终端开发环境

计算机系统:macOS 64位操作系统;Java Jdk版本:1.8.0;Android 开发工具:Eclipse 及 Android Sdk; Android调试环境:Android虚拟机及魅族手机一台。

云服务器:阿里云服务器,配置是1核cpu,2 G内存,1 Mbps带宽。

数据库版本:SQL Server 2008。

2 移动终端功能实现

2.1 用户信息模块

用户信息模块实现了登录与注册这两种移动终端常用功能。

注册功能要求用户录入账户名称、密码、手机号码以及常用邮箱。当用户点击确认注册按钮时,先判断注册信息是否符合格式:格式不符合要求时会提醒用户更改注册信息,格式正确的话使用Socket与服务器进行通信。服务器端判断数据库中用户表里是否已经存在此账户名,如果存在则提示用户“用户名已存在,请更换”,如果不存在且用户各项信息格式正确,则在数据库用户表中新增用户,并在手机上显示注册成功。

在注册时用到的Socket又称“套接字”,其本质是编程接口,对TCP/IP进行封装。客户端和服务器进行通信,两者都要实例化一个Socket对象。客户端和服务器端的Socket是不一样的,客户端可以实现远程连接服务器、发送数据、接收数据、关闭连接等功能;服务器端还需实现绑定端口、监听到达的数据、接受来自远程机器的连接等功能。Android在包java.net里提供了两个类:Socket和ServerSocket,前者用于实例化客户端Socket对象,后者用于实例化服务器Socket对象[12]。客户端向服务器发送注册信息步骤如下:

1)创建Socket对象

Socket socket = new Socket(ip,port);

2)创建输出流

DataOutputStream ds = new DataOutputStream

(socket.getOutputStream());

3)将注册信息传送给服务器

ds.writeUTF(register_info);

4)关闭输出流与Socket

ds.close();

socket.close();

其中ip指服务器IP地址,port指服务器连接端口,register_info指客户端发送至服务器的注册信息。

登录功能的实现使用Soap协议与服务器进行通信(Soap协议将在节点信息模块介绍),服务器端将用户名和密码与数据库用户表中的信息进行匹配,匹配成功后登录成功。

2.2 节点信息模块

在移动终端节点展示界面上采用双List列表形式展示,左边一列展示Block信息,右边一列显示所选Block下的节点信息。为了区分光谱节点以及环境节点,在界面底部设置菜单栏,分别为光谱信息、环境信息及个人信息,由图3所示。底部菜单栏的设计提高了移动终端功能开发的灵活性,因为各个菜单栏下的开发相互独立,可以分别开发最后合并,方便日后由于移动终端功能的改变对于模块的增加修改。

为实现菜单栏左右滑动切换页面view的效果,移动终端中采用ViewPager类。其为Android扩展包v4中的类。建立底部菜单栏的方法如下:

1)为底部菜单栏新建一个布局。

2)将ViewPage添加到页面布局,其下方添加底部菜单栏布局。

3)为每个菜单对应的页面内容建立各自的布局,通过适配器关联各个页面与ViewPager。

4) 监听ViewPager与底部菜单栏事件,进行页面的切换展示。

图3 节点信息展示界面

登陆成功后会跳转到节点显示界面,此界面默认获取云数据库中用户名下的Block并进行显示。在光谱信息菜单栏时,当选择具体的Block后,移动终端会向服务器上传用户名以及Block信息以请求对应Block下的光谱节点信息,云服务器从数据库中获取对应数据后传输给移动终端进行展示。

环境节点包括温度、湿度、二氧化碳浓度与光照强度节点。页面上的环境信息节点被选择后会跳转环境节点数据显示页面,此页面会显示4种环境节点采集的最新数据。特定选择某一个环境节点后会跳转到时间段选择页面,用户可以选择时间段从而获取此时间段内采集的所有环境信息。环境信息菜单请求服务器获取数据的方式与光谱信息菜单的方式相同。

以上所涉及到的网络通信均采用Soap协议。Soap(简单对象访问协议)是一种标准化的通信规范,主要用于Web服务。Soap基于XML标准,用于在分布式环境中发布信息,并执行远程过程调用。使用Soap不用考虑任何特定的传输协议(通常选用HTTP协议),就能使数据序列化[12]。本实例中Soap调用WebService的获取光谱数据具体步骤如下:

1) 添加ksoap2包。WebService是一种基于SOAP协议的远程调用标准,通过WebService可以将不同的操作系统平台,不同技术,不同语言整合在一块。在Android SDK中没有提供调用WebService的库,因此需要使用第三方的SDK来调用WebService。在这里采用ksoap2第三方SDK。

2) 指定命名空间和调用的方法名,如:

String namespace ="http://spectrum_data";

Stringmethodname = "spectrum_data";

SoapObjectreq = new SoapObject(namespace, methodname);

3) 设置调用方法的参数值:

req.addProperty("username", username);

req.addProperty("block", blockname);

req.addProperty("lightnode", lightnode);

req.addProperty("time", time);

4) 生成调用WebService方法的Soap请求信息。该信息由SoapSerializationEnvelope描述:

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);

envelope.bodyOut = req;

5) 创建HttpTransportsSE对象,访问云服务器url:

String URL = "IP_port" + /spectrumdata

/services/spectrum_data";

HttpTransportSE transport = new HttpTransportSE(URL);

6) 使用call方法调用WebService方法:

transport.call(null, envelope);

7) 使用getResponse方法获得WebService返回的结果:

result = (SoapObject) envelope.getResponse();

8) 解析返回的内容。

在进行网络请求时需创建一个新的线程。Android4.0之后在主线程里执行网络请求会报NetworkOnMainThreadException的异常。网络请求会耗费大量时间,造成主线程的阻塞,使移动终端运行时出现阻塞卡顿,所以不能在主线程里进行网络请求。创建线程并启动的方法为:

Thread t1 = new Thread(webInstance);

t1.start();

其中webInstance是创建的网络请求类的对象。

2.3 数据信息模块

2.3.1 数据绘图

经光谱感知节点采集到的数据信息为204个离散的光谱数据点,格式为“波长-强度”。波长范围为939~1 688 nm,强度范围为0~1。有机分子的基团会对特定近红外波长产生吸收,因此光谱数据中蕴含着丰富的物质成分信息。但将原始数据直接以数字的方式在移动终端上进行显示,会对用户观测光谱数据造成诸多不便。因此移动终端进行光谱数据的图形化展示,这样做更为直观的展现不同波长所对应光谱的变化。

Android中绘图常用Paint、Canvas类或MPAndroidChart、AChartEngine等开源图表库。本软件数据绘图部分采用Android开源项目AChartEngine,其为一个制作常用图表的框架,该框架支持丰富的图表展示(如条形图、折线图、散点图、积图、气泡图等)[13]。数据绘图的过程如下:

1)创建二维多系列数据集用以存储光谱数据或者环境信息数据:

XYMultipleSeriesDataset dataset;

创建二维多系列画图器,用作设置图表的基本属性:

XYMultipleSeriesRenderer renderer;

创建GraphicalView对象,用以作为显示图表的View:

GraphicalView line;

2)创建XYSeries对象存储图表的x,y轴数据,即光谱数据波长与吸光度,或环境信息时间与环境数据。并添加其至dataset。

XYSeriesspseries;

dataset.addSeries(spseries);

for(i = 0; i< y_set.lenth-1;i++){

spseries.add(s_set[i],y_set[i]);

}

3)使用ChartFactory.getLineChartInten方法绘图至GraphicalView对象,并将此对象添加至界面View。

line=ChartFactory.getLineChartIntent(this, dataset, renderer);

layout.addView(line, 0);

2.3.2 数据处理

由于光谱感知节点本身固有的原因,所采集到的光谱数据中除了样本信息以外,还会包含其他干扰信息,如杂散光、散射光、仪器噪声等。这会对光谱图像精确性产生影响,如导致光谱的基线漂移,因此对采集到的近红外光谱数据进行预处理操作是十分必要的。

本软件中使用了两种数据处理方法,分别是归一化与微分去噪,微分方法包括一阶微分及二阶微分。实际应用中可根据需要进行预处理方法的选择。

1)归一化[14]:

归一化使数据处于同一范围内,可以有效减小奇异样本数据导致的误差影响。其对应的计算公式如下:

(1)

式中,x指处理前的吸光度,x'指处理后的吸光度。

2)微分处理[8]:

在近红外光谱分析中,微分(一阶微分,二阶微分)是常用的光谱处理方法,主要作用是消除基线漂移。

一阶微分:

(2)

二阶微分:

(3)

式中,g指微分窗口宽度,在本软件中一阶微分中g取3,二阶微分中g取6;x指处理前的吸光度,x'指处理后的吸光度。

光谱处理以及处理后的图像如图4所示。可以发现归一化处理将数据范围缩小至0~1.0,一阶微分给出了整张谱图数据的变化率,二阶微分表示谱图变化率的变化情况,可以显示出原始谱图中的肩峰的确切峰位。

图4 光谱数据处理

3)峰值寻找:

近红外光谱主要是有机分子倍频与合频在近红外区域的吸收光谱[13]。是光谱图像中蕴含物质信息最丰富的位置。因此波峰的寻找对于物质光谱的分析具有重要意义。

本软件存使用两个数组存储光谱数据,一个数组存储波长,另一个数组存储波长所对应的强度。在寻峰时使用寻找数组峰值的方法,遍历数组元素,与其周围元素进行比较,当差大于阈值(光谱数据最大值最小值之差的十分之一)时则可认为是寻找的峰值。

2.3.3 图像保存

移动终端每进行一次光谱数据请求都会将数据绘制成为图像。为方便用户记录保存图像以及将前后光谱图像进行对比,将图像保存到系统相册以备后续调用是移动终端必须的功能。

将Android界面上的光谱图像以图片格式保存至系统相册,方法是:

1)将对应区域的View转换为bitmap对象:

Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache);2)获取手机SD卡,设置存储路径:

File sdCardDir = Environment;

getExternalStorageDirectory();

String strpath = "/IOT记录/" + time + "图像.png";

File file = new File(sdCardDir, strpath);

3)使用Bitmap的compress方法指定压缩格式为PNG格式:

bitmap.compress(CompressFormat.PNG,100,fos);

4)存储到系统相册中时需使用sendBroadcast方法向系统进行广播:

Intent intent = new Intent(Intent.

ACTION_MEDIA_SCANNER_SCAN_FILE);

Uri uri = Uri.fromFile(file);

intent.setData(uri);

sendBroadcast(intent);

经测试,可以将显示图像的区域保存为PNG格式图片到相册,满足了用户保存图像的需求。

3 试验结果与分析

为检验移动终端软件运行情况,于2018年6月14日早9:00进行试验。

试验时以云数据库中用户liming为登录账号,其名下有2个block,其中BLOCK1中有3个光谱节点,6个环境节点。

光谱节点1号最新存储数据采集时间为2018年6月13日上午10:05:00,参见图5。开启软件,登录liming账号后选择BLOCK1中的光谱节点1号,然后选择2018年6月13日10:00,来检测移动终端的光谱数据获取、数据处理及保存功能。试验结果如图6所示。

图5 数据库截图

图6 移动终端数据处理检测结果

由光谱图像及微分处理图像可知,一阶微分图像可以分析光谱图像中的肩峰。一阶微分给出了光谱曲线的变化率,其最大值最小值点不是光谱曲线的最大值最小值点,而是光谱曲线的最大斜率点。在一阶微分图像中,肩峰变窄,更容易识别。

二阶微分图像表示光谱曲线变化率的变化情况,可以找到光谱曲线的确切峰位。二阶微分比一阶微分基线噪声更多,每做一次微分,噪声就会增加,但是信号强度却减小,可以降低信噪比。

环境节点1号最新数据为2018年6月10日的数据,如图7所示,温度,湿度,二氧化碳浓度,光照强度展示的为最新检测结果。阶段性的环境数据获取以温度为例,获取2018年6月10日10:29至15:29的数据,绘制图像见图8。

图7 节点1号的环境信息

图8 节点1号温度曲线图

由试验结果可得移动终端成功从云服务器请求光谱数据进行处理并绘制出图像,找出峰值。期间网络请求流畅,图像绘制精准,数据处理无误,可将光谱数据简单形象的呈现给用户。对于环境信息,此移动终端可以实时展示最新环境数据,以及获取对应时间段的环境数据绘制图像,直观的将环境信息变化情况用图像展现,可以辅助用户对生产生活做出决策。此移动终端与服务器完成通信,数据获取、绘图、保存以及处理功能实现正常,实现了开发的预期效果,满足了光谱传感物联网专用移动终端的需求。

4 结束语

本文设计的软件实现了光谱传感物联网移动终端的基本功能。界面简洁,与用户交互性好。移动终端与服务器通信稳定,可以方便用户获取数据并处理。使移动端光谱处理软件突破与光谱仪节点距离的限制,在蜂窝网络环境下随时随地访问光谱及环境信息,在将来的智能农业,智慧城市等领域会有广泛用处。

猜你喜欢
微分光谱服务器
基于三维Saab变换的高光谱图像压缩方法
基于3D-CNN的高光谱遥感图像分类算法
一类带有Slit-strips型积分边值条件的分数阶微分方程及微分包含解的存在性
薄膜光伏组件在不同光谱分布下的测试差异
PowerTCP Server Tool
BlackJumboDog
2018年全球服务器市场将保持温和增长
基于跟踪微分器的高超声速飞行器减步控制
微分在近似计算中的应用
基于微分对策理论的两车碰撞问题