任永亮,毋 濤,李 科
(西安工程大學 計算機科學學院,陜西 西安 710600)
隨著互聯網的不斷發展,目前電商平臺極大地促進了人們足不出戶的消費方式,據調查,西裝在應用電子上午的交易占比逐年呈線性增長。為了提升交易額和增加用戶體驗,近幾年各個電商平臺使用了不同的推薦技術,使得平臺更加具有智能效果。目前,國內的熱門西裝推薦平臺中的推薦系統常常根據用戶的瀏覽記錄即協同過濾技術推薦西裝[1],但是該方法無法考慮瀏覽網頁的真實,忽略了用戶的真實操作行為,而無法達到預期的推薦效果。早期有關推薦系統的研究以及成果有阿姆斯特朗提出的Web Watcher,以及馬爾科的LIRA等;通過這些推薦系統對用戶行為的分析能夠預測出一些用戶可能感興趣的物品,因此用戶滿意度是評價該類系統的主要指標[2]。Lin等在既有研究的基礎上,提出了一種基于用戶需求喜好因素以外的需求因素的用戶模型[3]。王安琪等基于西裝搭配的四季色彩理論與計算機視覺技術,提出一種判斷優化模型,但是此模型缺乏考慮用戶之間的關系[4]。周靜等提出一種基于用戶圖像內容屬性喜好與時間因子的西裝推薦(UIACF)算法[5],改進了西裝推薦精度不高、覆蓋率低等問題。
綜上所述,目前的推薦技術基本都是基于用戶與西裝之間信息關聯性質的推薦,基于用戶自身特性的推薦很少提及,比如,基于用戶自身身體特征即用戶的身體輪廓數據的西裝推薦和基于用戶膚色的推薦。考慮到西裝的多樣性和實際性,考慮到寬松的衣服,針對人體輪廓數據的推薦比較適合用于西服的推薦。李芹提出根據人體臉部膚色,推薦適合的西裝顏色,使得用戶獲得個性化的西裝搭配建議[6]。
該文基于人體輪廓必然要先找到輪廓提取的方法,用戶在系統上傳圖片后,通過深度圖像處理圖片,獲得人體的的輪廓數據,結合專家系統知識規則庫為用戶推薦合適的西服西裝,此推薦方法也避免了冷啟動的問題。最后,通過測試用例驗證本系統的準確性與可行性。
系統是基于人體輪廓的推薦,因此提取人體輪廓方法的選取,是實現推薦西裝的前提。先前研究者在輪廓提取及測量的方向上提出了一些不同的方法,有較強的實用性,通過研究文獻做出如下簡要概述。
在自然場景下,受光線條件影響,傳統的圖像識別方法很難從照片中準確測量人體尺寸。以前使用三維掃描方法[7]或通過kinect[8]結合額外的照片深度數據的方式進行遠程非接觸式人體尺寸測量。由于操作設備限制,上述方法應用部署較難[9]。張藝等人提出了一種基于OpenCV的人體輪廓檢測研究方法。對標識和儲存的人體圖像進行去噪和圖像形態學處理,通過Canny邊緣檢測和膨脹及腐蝕處理,以閾值化等方法得到圖像輪廓[10]。為了解決圖像中輪廓不完整或未閉合時輪廓難以提取的問題,Chao等提出了一種基于全卷積的編解碼網絡的輪廓檢測算法[11]。冷新科等人提出一種非剛性人體運動動作圖像姿態輪廓提取算法實現了人體輪廓的提取[12]。
通過研究可知,每種人體輪廓提取方法都有其適用場景。Canny算法一直是作為一種標準的邊緣檢測算法,之后有不少學者對Canny算法做出了改進。如今,Canny改進算法仍然是一種優秀的邊緣檢測算法。因此該文選取Canny算法進行人體輪廓提取。
系統采用相關主流技術開發完成,根據專家知識制定推薦策略,當系統用戶達到一定的數量時,數據庫會產生一些數據基礎,系統可根據身型數據包括已注冊用戶的體型、肩型、臉型、身高等計算用戶之間相似度,參考相似用戶的購買記錄與專家規則庫相結合的方式為用戶推薦相應的西裝列表。用戶也可通過選擇季節,系統過濾出合適的成衣面料推薦,使客戶能夠體驗更加科學化、智能化的推薦服務。
1986年,Canny提出了邊緣檢測算子Canny算子,在當時背景下,可以在相對簡單的背景環境中提取部分的輪廓信息。后經過學者改進,如今是效果較好的一種輪廓提取算法[13-17]。圖像邊緣信息主要集中在高頻段,通常說圖像銳化或檢測邊緣,實質就是高頻濾波。微分運算是用來求信號的變化率,有加強高頻值,得到邊緣圖像分量的作用。在空域運算中,計算微分用于對圖像的銳化。因為數字圖像的離散信號,所以微分運算就改為計算差分或者梯度。在圖像處理中包括多種邊緣檢測梯度算子,如普通一階差分、Robert算子、Sobel算子等是基于尋找梯度強度。拉普拉斯算子是基于過零點檢測。通過計算梯度,設置閾值,得到邊緣圖像。
高斯模糊又稱高斯平滑,它的主要作用是去除噪聲。由于噪聲集中于高頻信號,很容易被識別為偽邊緣。應用高斯模糊去除噪聲,降低偽邊緣的識別。圖像邊緣信息也是高頻信號,因此對于高斯模糊的半徑選擇是比較重要的一步,半徑選擇過大會容易檢測不到一些弱邊緣。高斯模糊是一種圖像模糊濾波器,它的N維空間正態分布方程為:
(1)
圖像的邊緣指向不同方向,經典Canny算法用了四個梯度算子來分別計算水平、垂直和對角線方向的梯度。但是常用邊緣差分算子,計算水平和垂直方向的差分Gx和Gy。這樣就可以按公式(2)計算梯度模和方向:
(2)
梯度角度θ的范圍從弧度-π到π,然后近似到四個方向,分別代表水平、垂直和兩個對角線方向(0°,45°,90°,135°)。可以以±iπ/8(i=1,3,5,7)分割,每個區域的梯度角給定一個值,分別代表四個方向。
這里選擇Sobel算子計算梯度。相對于其他邊緣算子,Sobel算子計算出來的邊緣粗大而明亮。
(3)
非極大值抑制的思想是搜索局部最大值,抑制極大值,是一種邊緣細化方法。通常得出來的梯度邊緣是多個像素寬。非最大值抑制能幫助保留局部最大梯度而抑制其他梯度值。這樣的最終結果是只保留了梯度變化中最銳利的位置。算法描述如下:
(1)將當前像素的邊緣強度與正、負梯度方向上的像素的邊緣強度進行比較。
(2)如果當前像素的邊緣強度與具有相同方向的掩模中的其他像素相比是最大的(即,指向y方向的像素,則將其與其上方和下方的像素進行比較,垂直軸),則保留該值,否則抑制。
經過非極大抑制處理后的圖像依然有比較多的噪聲點。邊緣檢測算法通過一個閾值來濾除噪聲或顏色變化引起的小的梯度值,保留大的梯度值。算法應用雙閾值,即設定一個閾值上界和一個閾值下界來區分邊緣像素。如果經過邊緣像素點梯度值大于高閾值,則認為是強邊緣點。如果邊緣梯度值小于高閾值,大于低閾值,則標記為弱邊緣點,小于低閾值的點被抑制掉。
人體輪廓的提取是為西裝推薦做數據基礎,人體輪廓提取的本質是人體邊緣檢測。二維圖像人體輪廓提取方法是首先給采集到的人體圖像去噪,然后將圖片轉灰并二值化,最后在二值化圖像上使用邊緣檢測算法進行人體邊緣檢測。通過實驗驗證了本方法得出的人體輪廓圖在克服復雜背景帶來影響的同時能夠保證邊緣的完整、清晰、細膩。
首先利用手機進行人體圖片的采集,分別采集了人體正面圖和側面圖,然后使用pyCharm開發工具對圖片進行灰度化處理,灰度化結果如圖1(b)所示,在灰度圖的基礎上進行二值化處理,二值化結果如圖1(c)所示,最后利用Canny邊緣檢測算法對二值化圖進行人體輪廓的提取,提取結果如圖1(d)所示。

圖1 人體正面輪廓提取過程
側面人體輪廓提取的方法與正面人體輪廓提取的方法一致,提取過程如圖2所示。由實驗可知,圖片通過灰度化、二值化處理再利用Canny邊緣檢測算法可以提取出人體輪廓,并且效果較好,滿足了后續推薦系統對西裝進行推薦的需求。

圖2 人體側面輪廓提取過程
(1)西裝版型。
在西裝版型分類中,主要分為四類:歐版西裝、英版西裝、美版西裝、日版西裝。
歐版西裝:歐版西裝的基本輪廓是肩寬收腰的倒梯形,這類西裝不適合身材偏瘦小的男性。
英版西裝:一般是三個扣子,基本輪廓也是倒梯型,是歐版西裝的一個變種。兩側開衩叫騎馬衩,這和英國人的馬術運動有關,還有一種衩是中間衩,中間開衩,西裝領子比較寬廣,比較狹長,適合臉型較長的人[18]。
美版西裝:美國版西裝的一般輪廓特點是O形。寬松,休閑。所以美版西裝以單件者居多,寬衣大褲,強調舒適,隨意是美國人的習慣[18]。
日版西裝:日版西裝的基本輪廓是H形,亞洲男人一般為H形身型,亞洲男性一般沒有寬肩和細腰。一般為單排扣式,衣后不開衩。這樣的設計理念使其比較適合亞洲人中等身材的人穿著[18]。
(2)西裝領口。
西裝領口類型主要分為三種:平駁領、戧駁領、青果領。
平駁領口特點:造型呈現菱形狀,屬于鈍領的一種,領子下半片和上半片通常有一個夾角,適合國字臉和體型健壯的男性群體。
戧駁領特點:呈現上窄下寬,下領片的領角向上呈銳角突起,適合圓臉、娃娃臉的男性人群。
青果領特點:領面形似青果形狀的領型,適合圓臉和臉部肉較多、文質彬彬及體型纖細的男性人群。
(3)西裝制衣面料。
西服制衣有多種可供選擇的面料,不同的面料因其材質具有不同的特點。比如春夏秋冬西服就需要采用不同的面料進行成衣制作。大多數消費者不具備面料專業知識來對面料進行區分,此時如果將不同面料適合不同季節作為考量,會使推薦系統更加智能化。下面從季節的角度對不同部分面料進行分類。
春季:需要透氣性強如桑蠶絲,高捻度羊毛,馬海毛,愛爾蘭亞麻等。
夏季:輕薄如棉布,羊毛,泡泡紗,意大利亞麻等。
秋季:垂感強如燈芯絨,牛仔布,精紡法蘭絨,斜紋凡布等。
冬季:保暖性好如法蘭絨,粗花呢,羊毛,羊絨等。
(1)體型分類。
體型主要分為:O形體型、H形體型、正三角體型、細沙漏形體型、長方形體型、倒三角體型。
H形體型:肩、腰、臀寬相似,肩窄,腰部無明顯曲線。
正三角體型:肩小于臀、腰不太細,屬矮胖身材。
細沙漏形體型:肩膀與臀部寬度相似,腰部偏窄。
O形體型:臀、肩、腰圓厚,腰圍比肩、臀寬,體型偏胖。
倒三角體型:肩膀相對比較寬,腰部小于肩膀比較勻稱、臀部偏窄。
(2)肩型分類。
人體肩型主要分為:平肩、寬肩、窄肩、溜肩。
(3)臉型分類。
臉型主要分為:鉆石臉、方形臉、橢圓形臉、鵝蛋臉、圓形臉、心形臉、五角形臉、三角形臉[19]。
本系統采用非自動的知識獲取模式。為了保證規則庫設計的準確性和適用性,設計規則庫相關專業知識通過對書籍文獻的分析研究,得出季節-制衣面料、身型-西裝版型、臉型-西裝領型、肩型-是否墊肩等多方面的西裝推薦知識[20],通過對規則知識的分析,使用產生式表示法表達知識,然后將這些知識存儲到系統規則庫中。
(1)面料推薦規則庫設計。
面料推薦思想是根據季節與制衣面料的映射關系,設計出與面料與季節匹配的規則庫,本小節在季節規則庫中選取了一部分面料與季節的匹配關系進行展示,描述如下:
春季:桑蠶絲,高捻度羊毛,馬海毛,愛爾蘭亞麻等。
夏季:棉布,羊毛,泡泡紗,意大利亞麻等。
秋季:燈芯絨,牛仔布,精紡法蘭絨,斜紋凡布等。
冬季:法蘭絨,粗花呢,羊毛,羊絨等。
(2)西裝推薦規則庫設計。
西裝推薦系統的思想是根據客戶的身型和西裝版型、臉型和西裝領口、肩型和墊背之間的映射關系[21],設計出與客戶的身型特征相匹配的規則知識庫,使得用戶在識別出自身輪廓特點后按此規則推薦給客戶相應的服裝,詳細如表1所示。

表1 身型與西裝款式規則庫
(1)用戶身型相似度定義。
在為用戶進行西裝推薦過程中,將參考用戶身型相似度和推薦策略兩個因素來形成西裝推薦列表,首先是對用戶身型相似度的定義,如表2所示。

表2 用戶身型相似度定義
(2)西裝推薦規則定義。
根據用戶與其他用戶相似度和是否存在購買記錄,來定義參考系統規則庫的權重,從而設計出西裝推薦規則,如表3所示。

表3 西裝推薦列表規則
根據系統設計的可行性和有效性需求,基于人體特征結合專家系統的西裝推薦使用筆記本win10系統,12G運行內存,pyCharm2020開發工具,GPU為Intel(R) HD Graphics 520,開發工具使用idea2019和Pycharm2020。前端采用JavaScript,html,css語言,后端采用Spring Boot框架,在Windows系統中搭建開發環境,用Java實現后臺數據處理,用Python3.8庫實現對圖片的處理,采用sqLSever關系型數據庫對數據進行存儲。
根據需求分析設計出西裝推薦系統的總體架構,如圖3所示。

圖3 推薦系統總體結構設計
根據上述有關技術完成了對系統的開發工作,下面對推薦系統的主要功能進行詳細測試。
(1)提取人體輪廓信息的實現。
測試選取筆者一張全身照和側面照為例,上傳一張正面照和側面照,系統會提取出相應的輪廓進行顯示,系統根據輪廓圖后臺進行處理得出用戶各項數據信息并顯示出來,作為后序推薦的基礎數據。此外,用戶需要選擇是否墊背和季節進行推薦,使得系統過濾出適合該季節穿的西服,效果如圖4所示。

圖4 輪廓提取效果
(2)推薦西裝結果。
根據上一步輪廓提取的信息,系統會根據所保存的用戶信息,推薦出與圖片人體相符的西服,同時用戶還可通過對季節的選擇,篩選出適合當季穿的面料,通過點擊圖片可查看西裝的詳細信息,通過左右箭頭進行翻頁,用戶還可以在搜索框輸入關鍵字完成對西服的搜索并顯示,通過左右箭頭進行翻頁查看操作,實現效果如圖5所示。

圖5 西裝推薦效果
筆者批量選取了不同體型的人體圖片上傳到系統進行輪廓提取并進行了西裝的推薦,驗證了該方法的可行性和有效性,雖然在一些相似服裝上存在一定的誤差,但可以滿足實際需求。選取幾個測試用例,實驗結果如表4所示。為了保護個人隱私,這里只展示提取后的輪廓提取和系統分析結果,通過實驗測試結果可知,該系統可以根據提取的人體輪廓準確地推薦出合適的西裝,由于測試用例三和用例一的體型相似度較高并且按照推薦策略應推薦一樣的服裝,因此展示推薦服裝基本相同,以供用戶選擇,具有很好的實際應用價值。
表4 用例測試

系統通過選取Canny邊緣檢測算法完成對人體輪廓的提取,然后結合人體身型分類和推薦策略設計等相關知識來推薦用戶適合的服裝,完成了對系統的開發,通過系統測試,推薦準確度較高,可以滿足市場應用。由于人體圖片會存在干擾性較強的情況,希望通過后期改進Canny算法完成對復雜圖片更加精確的人體輪廓提取和更好的推薦策略,以提高推薦準確度。