基于Python的脸部皮肤健康度检测系统设计与实现
2020-02-02李震
李震
(广东食品药品职业学院 广东省广州市 510520)
1 引言
随着健康生活观念的日渐深入人心,人们对皮肤健康需求越来越高,特别是脸部皮肤的对于个人形象有至关重要的地位。但是人们比较缺乏对自己皮肤健康程度的量化认知,对皮肤每天的变化确认精确的判断标准。通过设计一个操作简单的人体皮肤健康度检测系统,有助于让用户了解自己皮肤的健康程度,进而有针对性的进行皮肤护理操作,情况严重的可以提示用户进一步到医院进行针对性的治疗。[1]
2 主要开发技术
Python 是一种跨平台的计算机程序设计语言。是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。其具有开源、跨平台等特点,数据处理速度快、功能强大且易快速搭建开发平台,具有海量扩展模块,方便开发者快速开发应用。[2]
OpenCV 是一个基于BSD 许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android 和Mac OS 操作系统上。它用C++语言编写,它具有C ++,Python,Java 和MATLAB 接口,并支持Windows,Linux,Android 和Mac OS,OpenCV 主要倾向于实时视觉应用,具有强大的图形图像处理功能。[3]
dlib 是一个用C++编写的,已经封装好API 接口的第三方库,导入Python 程序后,可以实现人脸识别、机器学习和图形图像处理的功能强大第三方库。在人体皮肤健康度检测系统实现上,主要完成图片的人脸部分的识别和定位,给出Rect 数据,方便功能函数的后续处理。[4]
Qt 也是由C++编写开发的图形库,是完全面向对象的完整跨平台软件开发框架,其相比MFC 有许多优点,特别是命名方面保持了和功能的一致性,提高调用方式的连贯性和逻辑性,大大提高了开发的便利性和稳定性。[5]
PyCharm 是由JetBrains 打造的一款Python IDE 开发编辑软件。具备完整IDE 的功能,比如,调试、语法高亮、Project 管理、代码跳转、智能提示、自动完成、单元测试、版本控制等,同时JetBrains 还友好的提供了免费的community 版本。利用强大的Pycharm 构建Python IDE 开发环境,扩展人脸识别库dlib 和界面UI 库Qt,融入自行开发的皮肤健康度评分算法,实现了人体皮肤健康度检测系统。[6]
3 系统整体设计
为了降低开发难度,将系统设计为单机版的应用程序,由于Python 的跨平台属性,开发出的程序可以分别打包成适合windows、linux 和ios 甚至安卓平台的可执行文件,使得系统即使为单机版也具有较好的通用性。
3.1 功能分析
考虑到现代女性对健康和美的追求,人体皮肤健康度检测系统包含皮肤评价功能,美白功能,磨皮功能,亮眼功能,红唇功能。
皮肤评价功能是根据皮肤的肤色状况,亮度和瑕疵等情况,进行综合评分,得到脸部的健康水平。
图1:程序的整体结构图
图2:MainWindow 界面的布局结构
图3:项目解释器第三方包的版本配置
美白功能,是让用户设置合适参数,可以看到自己不同美白程度下的脸部效果,让用户自行增强美白参数,来比较自己美白后与美白前的颜值差别。
磨皮功能,可以提高脸部皮肤的光泽层度,适当降低脸部的痣和雀斑等瑕疵对脸部的美观影响。
亮眼功能,是提高眼部的对比度和亮度,让眼部看起来更有神采,提高用户脸部的整体美颜效果。
图4:脸部皮肤健康度检测系统最终实现效果
红唇功能,是提高用户唇部的色彩饱和度,让唇部看起来更加饱满和性感。
3.2 结构设计
每一个功能都设计了对应的槽函数来完成对应任务,程序的结构如图1所示。
4 系统实现
4.1 界面结构
界面主要由一个MainWindow 组成,利用PyCharm 的Qt Designer 工具生成了UI 界面的代码,储存在了FaceBeautyGUI.py 文件中,界面结构生成了一个水平布局管理器verticalLayout,在Mainwindow 右侧嵌套了一个8 行3 列的网格布局管理器gridLayout,完成了界面的构建,如图2所示。
4.2 开发环境配置
系统使用的开发环境是PyCharm 2020.1,安装了PyQt5 和dlib,OpenCV 等第三方库,具体版本配置情况如图3。
4.3 具体实现
4.3.1 文件输入输出
打开文件的实现利用了QT5 自带的QFileDialog.getOpenFileName 函数来获得有效文件路径。简要实现代码如下:
4.3.2 图像处理
脸部皮肤图像的处理主要包含四个功能:美白、磨皮、亮眼和红唇。这里实现的代码比较多,在系统开发上,设计了四个函数实现了对应功能,分别为whiten,smooth,sharpen,brighten。
4.3.3 皮肤评价
对皮肤的健康度评价,设计了skin_evaluation 函数来实现皮肤的评价,主要采用了基于HSV 颜色空间H,S,V 范围筛选法,据资料显示,正常黄种人的H 分量大约在7 至20 之间,S 分量大约在28 至256 之间,V 分量大约在50 至256 之间。根据识别到的健康皮肤区域占全部皮肤区域的权重比值,得到最终的皮肤健康度评价分数。[7]
4.3.4 图像显示
将处理好的图像数据显示在MainWindow 上,首先涉及到了图片格式的转换,代码如下:
中间数据存储额功能上,由于在对图片的操作上,会产生撤销上一步的操作,这里设计了self.temp_bgr[:]来保存中间数据,self.im_ori[:]来保存原始图片数据,可以完成撤销和恢复图片等操作。
最后使用Label 控件,调用Label.setPixmap()函数完成图像的显示。最终,程序实现效果如图4。
5 结语
本文介绍了一个基于Python的脸部皮肤健康度评价系统的设计与实现过程,所设计的程序简单易用,具有多平台通用特性,通过简单的移植也能适配到对应型号的手机移动平台上。通过对自己脸部拍照,使用该程序检测,用户可以简单直观的得到自己脸部皮肤的基本健康状况,并辅助判断是否需要就医,提高用户对自己脸部皮肤的健康程度掌握情况,缓解爱美人士对自身无谓的焦虑情况,具有较好的推广应用前景。后期,可以增加个人健康数据库,通过每天记录用户的皮肤健康图片分析数据,绘制用户的脸部皮肤健康曲线,获得更大的应用推广价值。