李震
(廣東食品藥品職業學院 廣東省廣州市 510520)
隨著健康生活觀念的日漸深入人心,人們對皮膚健康需求越來越高,特別是臉部皮膚的對于個人形象有至關重要的地位。但是人們比較缺乏對自己皮膚健康程度的量化認知,對皮膚每天的變化確認精確的判斷標準。通過設計一個操作簡單的人體皮膚健康度檢測系統,有助于讓用戶了解自己皮膚的健康程度,進而有針對性的進行皮膚護理操作,情況嚴重的可以提示用戶進一步到醫院進行針對性的治療。[1]
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]
為了降低開發難度,將系統設計為單機版的應用程序,由于Python 的跨平臺屬性,開發出的程序可以分別打包成適合windows、linux 和ios 甚至安卓平臺的可執行文件,使得系統即使為單機版也具有較好的通用性。
考慮到現代女性對健康和美的追求,人體皮膚健康度檢測系統包含皮膚評價功能,美白功能,磨皮功能,亮眼功能,紅唇功能。
皮膚評價功能是根據皮膚的膚色狀況,亮度和瑕疵等情況,進行綜合評分,得到臉部的健康水平。

圖1:程序的整體結構圖

圖2:MainWindow 界面的布局結構

圖3:項目解釋器第三方包的版本配置
美白功能,是讓用戶設置合適參數,可以看到自己不同美白程度下的臉部效果,讓用戶自行增強美白參數,來比較自己美白后與美白前的顏值差別。
磨皮功能,可以提高臉部皮膚的光澤層度,適當降低臉部的痣和雀斑等瑕疵對臉部的美觀影響。
亮眼功能,是提高眼部的對比度和亮度,讓眼部看起來更有神采,提高用戶臉部的整體美顏效果。

圖4:臉部皮膚健康度檢測系統最終實現效果
紅唇功能,是提高用戶唇部的色彩飽和度,讓唇部看起來更加飽滿和性感。
每一個功能都設計了對應的槽函數來完成對應任務,程序的結構如圖1所示。
界面主要由一個MainWindow 組成,利用PyCharm 的Qt Designer 工具生成了UI 界面的代碼,儲存在了FaceBeautyGUI.py 文件中,界面結構生成了一個水平布局管理器verticalLayout,在Mainwindow 右側嵌套了一個8 行3 列的網格布局管理器gridLayout,完成了界面的構建,如圖2所示。
系統使用的開發環境是PyCharm 2020.1,安裝了PyQt5 和dlib,OpenCV 等第三方庫,具體版本配置情況如圖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。
本文介紹了一個基于Python的臉部皮膚健康度評價系統的設計與實現過程,所設計的程序簡單易用,具有多平臺通用特性,通過簡單的移植也能適配到對應型號的手機移動平臺上。通過對自己臉部拍照,使用該程序檢測,用戶可以簡單直觀的得到自己臉部皮膚的基本健康狀況,并輔助判斷是否需要就醫,提高用戶對自己臉部皮膚的健康程度掌握情況,緩解愛美人士對自身無謂的焦慮情況,具有較好的推廣應用前景。后期,可以增加個人健康數據庫,通過每天記錄用戶的皮膚健康圖片分析數據,繪制用戶的臉部皮膚健康曲線,獲得更大的應用推廣價值。