李震
(廣東食品藥品職業(yè)學(xué)院 廣東省廣州市 510520)
隨著健康生活觀念的日漸深入人心,人們對(duì)皮膚健康需求越來(lái)越高,特別是臉部皮膚的對(duì)于個(gè)人形象有至關(guān)重要的地位。但是人們比較缺乏對(duì)自己皮膚健康程度的量化認(rèn)知,對(duì)皮膚每天的變化確認(rèn)精確的判斷標(biāo)準(zhǔn)。通過(guò)設(shè)計(jì)一個(gè)操作簡(jiǎn)單的人體皮膚健康度檢測(cè)系統(tǒng),有助于讓用戶了解自己皮膚的健康程度,進(jìn)而有針對(duì)性的進(jìn)行皮膚護(hù)理操作,情況嚴(yán)重的可以提示用戶進(jìn)一步到醫(yī)院進(jìn)行針對(duì)性的治療。[1]
Python 是一種跨平臺(tái)的計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言。是一個(gè)高層次的結(jié)合了解釋性、編譯性、互動(dòng)性和面向?qū)ο蟮哪_本語(yǔ)言。其具有開(kāi)源、跨平臺(tái)等特點(diǎn),數(shù)據(jù)處理速度快、功能強(qiáng)大且易快速搭建開(kāi)發(fā)平臺(tái),具有海量擴(kuò)展模塊,方便開(kāi)發(fā)者快速開(kāi)發(fā)應(yīng)用。[2]
OpenCV 是一個(gè)基于BSD 許可(開(kāi)源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)軟件庫(kù),可以運(yùn)行在Linux、Windows、Android 和Mac OS 操作系統(tǒng)上。它用C++語(yǔ)言編寫,它具有C ++,Python,Java 和MATLAB 接口,并支持Windows,Linux,Android 和Mac OS,OpenCV 主要傾向于實(shí)時(shí)視覺(jué)應(yīng)用,具有強(qiáng)大的圖形圖像處理功能。[3]
dlib 是一個(gè)用C++編寫的,已經(jīng)封裝好API 接口的第三方庫(kù),導(dǎo)入Python 程序后,可以實(shí)現(xiàn)人臉識(shí)別、機(jī)器學(xué)習(xí)和圖形圖像處理的功能強(qiáng)大第三方庫(kù)。在人體皮膚健康度檢測(cè)系統(tǒng)實(shí)現(xiàn)上,主要完成圖片的人臉部分的識(shí)別和定位,給出Rect 數(shù)據(jù),方便功能函數(shù)的后續(xù)處理。[4]
Qt 也是由C++編寫開(kāi)發(fā)的圖形庫(kù),是完全面向?qū)ο蟮耐暾缙脚_(tái)軟件開(kāi)發(fā)框架,其相比MFC 有許多優(yōu)點(diǎn),特別是命名方面保持了和功能的一致性,提高調(diào)用方式的連貫性和邏輯性,大大提高了開(kāi)發(fā)的便利性和穩(wěn)定性。[5]
PyCharm 是由JetBrains 打造的一款Python IDE 開(kāi)發(fā)編輯軟件。具備完整IDE 的功能,比如,調(diào)試、語(yǔ)法高亮、Project 管理、代碼跳轉(zhuǎn)、智能提示、自動(dòng)完成、單元測(cè)試、版本控制等,同時(shí)JetBrains 還友好的提供了免費(fèi)的community 版本。利用強(qiáng)大的Pycharm 構(gòu)建Python IDE 開(kāi)發(fā)環(huán)境,擴(kuò)展人臉識(shí)別庫(kù)dlib 和界面UI 庫(kù)Qt,融入自行開(kāi)發(fā)的皮膚健康度評(píng)分算法,實(shí)現(xiàn)了人體皮膚健康度檢測(cè)系統(tǒng)。[6]
為了降低開(kāi)發(fā)難度,將系統(tǒng)設(shè)計(jì)為單機(jī)版的應(yīng)用程序,由于Python 的跨平臺(tái)屬性,開(kāi)發(fā)出的程序可以分別打包成適合windows、linux 和ios 甚至安卓平臺(tái)的可執(zhí)行文件,使得系統(tǒng)即使為單機(jī)版也具有較好的通用性。
考慮到現(xiàn)代女性對(duì)健康和美的追求,人體皮膚健康度檢測(cè)系統(tǒng)包含皮膚評(píng)價(jià)功能,美白功能,磨皮功能,亮眼功能,紅唇功能。
皮膚評(píng)價(jià)功能是根據(jù)皮膚的膚色狀況,亮度和瑕疵等情況,進(jìn)行綜合評(píng)分,得到臉部的健康水平。
圖1:程序的整體結(jié)構(gòu)圖
圖2:MainWindow 界面的布局結(jié)構(gòu)
圖3:項(xiàng)目解釋器第三方包的版本配置
美白功能,是讓用戶設(shè)置合適參數(shù),可以看到自己不同美白程度下的臉部效果,讓用戶自行增強(qiáng)美白參數(shù),來(lái)比較自己美白后與美白前的顏值差別。
磨皮功能,可以提高臉部皮膚的光澤層度,適當(dāng)降低臉部的痣和雀斑等瑕疵對(duì)臉部的美觀影響。
亮眼功能,是提高眼部的對(duì)比度和亮度,讓眼部看起來(lái)更有神采,提高用戶臉部的整體美顏效果。
圖4:臉部皮膚健康度檢測(cè)系統(tǒng)最終實(shí)現(xiàn)效果
紅唇功能,是提高用戶唇部的色彩飽和度,讓唇部看起來(lái)更加飽滿和性感。
每一個(gè)功能都設(shè)計(jì)了對(duì)應(yīng)的槽函數(shù)來(lái)完成對(duì)應(yīng)任務(wù),程序的結(jié)構(gòu)如圖1所示。
界面主要由一個(gè)MainWindow 組成,利用PyCharm 的Qt Designer 工具生成了UI 界面的代碼,儲(chǔ)存在了FaceBeautyGUI.py 文件中,界面結(jié)構(gòu)生成了一個(gè)水平布局管理器verticalLayout,在Mainwindow 右側(cè)嵌套了一個(gè)8 行3 列的網(wǎng)格布局管理器gridLayout,完成了界面的構(gòu)建,如圖2所示。
系統(tǒng)使用的開(kāi)發(fā)環(huán)境是PyCharm 2020.1,安裝了PyQt5 和dlib,OpenCV 等第三方庫(kù),具體版本配置情況如圖3。
4.3.1 文件輸入輸出
打開(kāi)文件的實(shí)現(xiàn)利用了QT5 自帶的QFileDialog.getOpenFileName 函數(shù)來(lái)獲得有效文件路徑。簡(jiǎn)要實(shí)現(xiàn)代碼如下:
4.3.2 圖像處理
臉部皮膚圖像的處理主要包含四個(gè)功能:美白、磨皮、亮眼和紅唇。這里實(shí)現(xiàn)的代碼比較多,在系統(tǒng)開(kāi)發(fā)上,設(shè)計(jì)了四個(gè)函數(shù)實(shí)現(xiàn)了對(duì)應(yīng)功能,分別為whiten,smooth,sharpen,brighten。
4.3.3 皮膚評(píng)價(jià)
對(duì)皮膚的健康度評(píng)價(jià),設(shè)計(jì)了skin_evaluation 函數(shù)來(lái)實(shí)現(xiàn)皮膚的評(píng)價(jià),主要采用了基于HSV 顏色空間H,S,V 范圍篩選法,據(jù)資料顯示,正常黃種人的H 分量大約在7 至20 之間,S 分量大約在28 至256 之間,V 分量大約在50 至256 之間。根據(jù)識(shí)別到的健康皮膚區(qū)域占全部皮膚區(qū)域的權(quán)重比值,得到最終的皮膚健康度評(píng)價(jià)分?jǐn)?shù)。[7]
4.3.4 圖像顯示
將處理好的圖像數(shù)據(jù)顯示在MainWindow 上,首先涉及到了圖片格式的轉(zhuǎn)換,代碼如下:
中間數(shù)據(jù)存儲(chǔ)額功能上,由于在對(duì)圖片的操作上,會(huì)產(chǎn)生撤銷上一步的操作,這里設(shè)計(jì)了self.temp_bgr[:]來(lái)保存中間數(shù)據(jù),self.im_ori[:]來(lái)保存原始圖片數(shù)據(jù),可以完成撤銷和恢復(fù)圖片等操作。
最后使用Label 控件,調(diào)用Label.setPixmap()函數(shù)完成圖像的顯示。最終,程序?qū)崿F(xiàn)效果如圖4。
本文介紹了一個(gè)基于Python的臉部皮膚健康度評(píng)價(jià)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)過(guò)程,所設(shè)計(jì)的程序簡(jiǎn)單易用,具有多平臺(tái)通用特性,通過(guò)簡(jiǎn)單的移植也能適配到對(duì)應(yīng)型號(hào)的手機(jī)移動(dòng)平臺(tái)上。通過(guò)對(duì)自己臉部拍照,使用該程序檢測(cè),用戶可以簡(jiǎn)單直觀的得到自己臉部皮膚的基本健康狀況,并輔助判斷是否需要就醫(yī),提高用戶對(duì)自己臉部皮膚的健康程度掌握情況,緩解愛(ài)美人士對(duì)自身無(wú)謂的焦慮情況,具有較好的推廣應(yīng)用前景。后期,可以增加個(gè)人健康數(shù)據(jù)庫(kù),通過(guò)每天記錄用戶的皮膚健康圖片分析數(shù)據(jù),繪制用戶的臉部皮膚健康曲線,獲得更大的應(yīng)用推廣價(jià)值。