基于Django的金属在线硬度检测系统的设计与实现
2019-09-25
(北京工业大学 信息学部,北京 100124)
0 引言
随着我国建造业的蓬勃发展,人们对于金属零部件的品质和使用寿命越来越关注,而其中最为重视的当为金属的硬度。硬度是指金属材料抵抗形变或破坏的能力,是判断金属材料软硬程度与品质的重要指标。金属硬度的检测方法大致可分为两种:有损检测与无损检测。有损检测是指通过破坏性的方法获得金属的硬度信息,例如静压、拉伸等。但这些方法或多或少都会对金属本身造成破坏性影响,既费时又昂贵,并且不能应用于正在服役的金属器件。因此无损检测这种不会损坏金属本身的硬度检测方法被人提出。
金属的无损检测是利用物质的声、光、磁和电等特性,来对金属特性,缺陷等一系列信息进行检测,而在这个过程中并不破坏或不影响检测对象的使用性能[1]。常用的无损检测方法包括电阻应变发、超声波检测法、微磁检测法等,在上述的方法中,使用微磁信号进行无损检测较为常用[2],而巴克豪森噪声信号就是一种典型的微磁信号。巴克豪森噪声信号是由德国科学家H.Barkhausen于1919年发现的可测噪声信号,巴克豪森噪声信号是由于外加磁场变化导致磁畴壁的不连续运动导致的[3],这些不连续的运动会产生一种类似于噪声的信号。巴克豪森信号会受金相,含碳量,晶格尺寸等一系列因素[4-5]的影响。对于金属外在属性来说,巴克豪森噪声与金属的硬度,残余应力等特性有关,大范围的应用于金属硬度的无损检测中。
Aki Sorsa等人[6]初步建立了以信号预处理、特征提取、基于wrapper的特征挑选、回归分析四步为核心的材料性能预测方法;南京航空航天大学的王平等人[7]提出了巴克豪森信号新的特征值——峰宽比,引入了新的概念——半高全宽, 即包络线的峰值与半高全宽之比,将这些特征与以往的经典时域特征相结合输入到BP神经网络中,利用得到的模型构建了一套铁磁材料的应力和硬度进行验证性检测的系统,然而这些系统并没有采用线上的方式进行检测。
本文设计的基于Django的金属在线硬度检测系统,以轻量级web框架Django为基础,利用机器学习的方法,对金属的巴克豪森噪声信号进行信号分析与特征提取并训练,将训练好的模型加载到系统中以供硬度检测,并且在系统中加入巴克豪森噪声信息管理功能,可以上传或下载巴克豪森噪声信息文件,极大的方便了金属硬度检测的过程。
1 系统结构设计与响应流程
1.1 系统结构设计
系统采用的是浏览器/服务器结构,使用权限分为两种,分别是用户权限和管理员权限,在登录时为两种权限提供两个界面。系统为用户提供的是用户主界面,可用来在线检测和查询金属试件信息。系统为管理员提供的是管理员主界面,除了包括用户权限的所有功能之外,可以对用户信息和金属试件进行维护工作。
1.2 系统响应流程
用户首先通过浏览器向系统服务器发出HTTP请求,Django接受到这个请求后会将它转化为然后该对象被传递给 Request中间件处理,如果该中间件返回了Response,则直接传递给Response中间件做收尾处理,否则的话 Request中间件将访问URL映射文件。在Django框架中,url.py文件定义了系统中所有的URL路由表,通过正则表达式的方法匹配对应的URL-pattern,从而调用对应的处理函数。本项目全部的处理函数被定义在view.py文件中,根据不同的请求调用view.py文件中指定的函数,从而实现用户的请求。当处理函数需要访问数据库时,Django框架通过内置的MySQL适配器访问本系统的MySQL数据库,将需要的数据取出并加载到用户请求对应的模板页面上,经过渲染成HTML代码后响应给浏览器,最终展示给用户。
2 系统主要功能
整个系统包括两部分:用户系统和管理员系统,在登录模块可以识别用户类型。
用户系统分为两个子模块,分别为试件信息查询模块和硬度检测模块。用户可以通过上传金属试件的巴克豪森噪声信号文件进行在线的金属硬度检测,并可以查询存储在系统中的金属试件信息,系统还为用户提供了文件下载功能,可以获取平台提供的已经标注硬度的金属试件的巴克豪森噪声信号文件,以供用户分析与研究。
管理员系统分为3个子模块,分别为用户信息管理模块、试件信息管理模块和硬度检测模块。管理员具有比用户更高的权限,除了拥有在线硬度检测和试件信息查询功能外,还可以对用户信息、金属试件信息、金属试件的巴克豪森噪声信号文件进行管理,管理员可以添加、删除、修改、查询用户的信息和金属试件信息,上传新的金属试件的巴克豪森噪声信号文件到系统服务器中,扩充系统的金属试件样本数量。下面对上述的子模块从系统登录模块、信息管理模块和硬度检测模块详细介绍本系统。
2.1 系统登录模块
为了实现既能随时修改与添加存储于系统中的金属试件信息又能防止这些信息被非专业人员随意修改,本系统设立了管理员和用户两个权限,系统登录模块就是实现在进入系统时区分两种权限,这个模块设计的好坏直接影响着用户体验与系统的安全性能。系统登录的业务逻辑如图1所示。
有效管理的课堂是指运行顺利、时间使用经济、学生能够充分获得学习机会的课堂。学生在学习之前需要一些必要的指导,比如该如何做、什么时候可以以什么样的方式在教室里活动、该坐在哪里、什么时候可以或不可以打断教师说话、音量不能超过多少分贝,等等。如果缺乏相关引导,那么教师的教学无法开展,学生的学习也无法取得成效。
图1 系统登录逻辑图
在系统登录界面需要填写两个信息,分别是Username和Password,提交后前端将两个数据传递到后台,与MySQL数据库中存储的用户信息和管理员信息进行比较,若Username不存在,则返回用户名错误,若Username正确但Password错误,则返回密码错误,全正确后会会根据被赋予的不同权限进入各自的系统。
2.2 信息管理模块
信息管理模块的主要功能是实现管理员对系统中所有信息进行维护管理,包括用户信息与金属试件信息。由于本系统的Django框架在与数据库交互上采用的是ORM(Object Relational Mapping)机制,可以根据对接的数据库引擎,翻译成对应的sql语句,无需专门编写数据库访问层代码,直接编写python代码即可。在用户信息管理模块中包括用户名和密码两个信息,管理员可以对现有的用户进行编辑与删除操作,也可以添加新的用户;在金属试件信息管理系统中包括试件原号、维氏硬度和巴克豪森噪声文件,试件原号、维氏硬度与用户的用户名和密码操作相同,均为文本信息,在这里需要特别说明的是巴克豪森噪声文件。作为金属试件硬度检测的依据,系统会为每一个用户提供试件的巴克豪森噪声文件以供研究使用。管理员可以对信号文件进行上传与删除处理,将上传的文件放在服务器指定的路径中,并与试件通过试件原号进行绑定,使得用户在需要时可以随时下载。
2.3 硬度检测模块
本模块是系统中最为核心的部分,完成了对用户上传的金属试件样本的硬度检测功能。主要分为3个步骤:特征提取、模型训练和在线检测。
2.3.1 特征提取
根据阅读华中科技大学罗教授的文章可知[9],对于不同硬度材料的巴克豪森噪声的AR谱同阶展开的峰值的高度会随着硬度的变化而变化,并且不易于受其他因素(如塑性形变、残余应力等)的影响,与硬度呈单一关系,比基于时域的信号分析方法鲁棒性与准确性更强,因此本系统采用基于基于AR谱估计的信号分析方法。AR谱分析是利用AR模型计算随机信号的能量谱、功率谱,即随机信号自回归分析,是一种被广泛使用的现代功率谱计算方法[10]。AR谱估计分为三步:第一步,假设出于观测的数据相符合的阶数P,本系统为了更好的拟合数据,使用了5个阶次的展开,分别是4、8、16、32、64;第二步,根据部分采集的数据去估计AR谱中的参数。在自回归模型中,利用式(1)检测一个时间序列{X(n)}中的未知数据点的数值:
(1)
Y=XA+ε
(2)
其中:
Y=[x(p),x(p+1), …,x(N)]T
(3)
A=[a1,a2,…,ap]T
(4)
(5)
(6)
上述公式中,N为输入信号的总数量,a1,a2,…,ap为所求的AR谱特征参数,u(p),u(p+1), …,u(N)为白噪声,T表示矩阵的转置;根据最小二乘法原理可得到模型参数A的估计为:
A=(XTX)-1XTY
(7)
从而得到AR谱特征参数。
第三步,利用步骤二所得到的参数计算功率谱与能量谱。根据AR模型的假设,计算单边功率谱密度根据式(8)即可得到:
(8)
经过上述步骤,p值分别取4、8、16、32、64,从而得到了巴克豪森噪声5个阶次的AR谱。但是因为采集到的巴克豪森信号的 AR 谱上峰的数量并不相同,特征维度不统一,所以无法直接使用特征选择方法结合机器学习或神经网络来进行自动预测。本发明先对AR谱求一阶导,滤除噪声。然后求二阶导数,把一阶导数的两部分融合成一个谷,从而去除冗余信息,因此最后对于每一个巴克豪森噪声信号来说,特征源是 AR谱信号的二阶导数,而提取的特征分别的是AR 二阶导数的每个谷的谷宽,谷深和谷值点所在的位置3个特征。得到上述特征后再使用kmeans算法对所有谷进行聚类,并按照每个谷所归属的类别对得到的特征进行编码,规则为若一个有某类谷则标1,无则标0。从而将每个样本的特征数量进行了统一。
2.3.2 模型训练
本步骤的输入为上一步得到的归一化后的特征,将特征输入到改进BP神经网络。BP神经网络是一种基于感知机的多层神经网络,其主要特点是信号前向传递,而误差后向传播,通过不断调节网络权重值,拟合真实输出[12]。但由于随机初始权值的设定导致每次训练的结果不同,使得BP神经网络模型的性能不稳定,为了提高模型的鲁棒性,本系统采用改进的BP神经网络模型。改进BP神经网络的方法是先采用行采样的方式,每次抽取训练集的75%作为训练子集,一共采样10次。经过这些子集就学习出10个BP神经网络,将需要检测的样本分别放入其中,得到10个检测结果,检测结果求和取均值则为最终检测结果,整体流程如图2所示。本系统的模型是在离线环境下训练的,训练集为720个巴克豪森噪声信号文件,标签为金属的硬度,单位是维氏硬度。
图2 集成化BP神经网络训练流程图
将此模型在测试集中进行测试,其中测试集包含180个信号文件作为测试样本,测试结果的均方误差为82.4,而传统算法(使用巴克豪森噪声信号的峰值、矫顽力、左半峰宽、右半峰宽、包络线大于阈值的平均值、剩磁作为输入特征)结果的均方误差为229.8,说明本模型具有良好的性能。
2.3.3 在线检测
通过上述的步骤训练好模型后,需要将模型导入到服务端与系统对接。为了方便调用和数据模型的持久化存储,本系统采用的方案是将上述训练好的10个BP神经网络模型通过python的pickle模块保存成.pkl格式文件,导入到服务器端以供调用。pickle模块可以将数据对象保存到文件,在调用时可通过读取.pkl文件重构成python对象。
用户在线上传需检测的金属试件信号文件,后台得到文件后对其进行特征提取,将提取好的特征输入到10个模型中,对得到的预测结果加和求均值,得到的数值则为系统预测的金属硬度,后台将金属硬度传递到前端的展示页面,从而完成了在线检测功能。
3 系统功能实现与展示
本系统采用的开发模式为MTV模式,进系统分为3个部分:模型(Model)、模板(Template)和视图(View)[13],其中模型是数据存取层,处理与数据相关的业务,负责业务对象和数据库的关系映射(ORM);模板是展示层,负责如何把页面展示给用户(html);视图是业务逻辑层,负责业务逻辑,并在适当时候调用Model和Template。这种开发模式关键的优势在于各种组件都是松耦合的。这样,每个由 Django驱动的Web应用都有着明确的目的,并且可独立更改而不影响到其它的部分。
3.1 信息查询模块的实现
用户可以在此模块对系统中提供的信息进行查询,包括金属试件的硬度信息的查询和金属试件信号文件的下载,如图3所示。
图3 信息查询页面展示
3.2 信息管理模块实现
本模块需要管理员权限才能使用,管理员可以查询与管理用户和试件信息,包括对信息的增查改删,并均已弹窗的方式进行展现,如图询用户信息并对用户进行一系列操作,包括对现有用户的编辑与删除和新增用户,如图4(a)和4(b)所示。
图4 信息管理展示
3.3 硬度检测模块实现
在本模块中,用户可以通过上传金属试件的巴克豪森噪声文件进行硬度检测。页面详情如图5(a)所示,首先点击“选择文件”按钮,从本地选择待检测文件并上传,后台读取到文件后对文件进行特征提取,将提取的特征输入到离线训练好的10个改进的BP神经网络模型中,加和求均值后将最后的结果展现在页面上,如图5(b)所示。
图5 在线检测模块
4 结论
基于Django框架,结合MySQL数据库和改进BP神经网络模型,设计并开发了一套在线硬度检测系统。系统包括用户和管理员两个权限,提供了金属信息查询、金属试件巴克豪森噪声文件下载、用户信息维护管理和金属硬度检测功能。经试验证明,系统有如下几个优点:第一,使用了新的硬度检测方法,在测试集(共有180个测试样本)中的均方误差为82.4,而传统算法的均方误差为229.8,说明本方法完全优于传统方法;第二,系统能够极大的方便金属硬度检测过程,并可以对金属数据进行有效的存储与调用下载,解决了以往数据管理不规范的问题;第三,系统搭建使用了Django,此框架方便部署,强大的缓存技术提高了页面的加载速度,使得用户获得了更好的使用体验。综上所述,基于Django的金属在线硬度检测系统,在金属试件硬度检测方面有着广阔的应用场景。