999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Haar算法的云穿衣系統研究

2020-04-08 09:52:36王金環徐衛軍李寶敏
計算機技術與發展 2020年3期
關鍵詞:特征

王金環,徐衛軍,李寶敏

(1.西安培華學院 智能科學與信息工程學院 計算機系,陜西 西安 710125;2.西安工業大學圖書館,陜西 西安 710021;3.西安工業大學 計算機學院,陜西 西安 710021)

0 引 言

網購已成為當前人們生活中一種非常普遍的消費方式。然而在網購衣服的時候,當你找到了自己心儀的衣服款式,而這種款式穿在自己身上的效果卻不得知。以往的做法:只能把衣服買回來試穿后才能感覺到是否美觀、合身、稱心。本項目解決了人們網購衣服時的困擾,從而為人們網購帶來了極大的便利。

從技術層面來講,本項目利用計算機技術和一定的算法在云網的平臺下對實物進行識別的嘗試,對于許多通過網購而需要嘗試的物品都可以通過該技術得到驗證。這一技術改變了人們身臨其境試穿的感官常規習慣和對網購物品體驗的嘗試,給人們以全新的理念和方式,給生活帶來極大的方便。它是將智能識別技術[1]在人們日常生活一些體驗進行普及推廣應用的一種嘗試,其在社會和人們日常生活中具有很實用的意義和效應,尤其在當今信息主導社會發展,將帶來一定程度的社會經濟效益。

1 云穿衣系統總體設計

(1)云穿衣系統總體架構如圖1所示。

圖1 系統總體架構

●從攝像頭獲取圖像;

●從采集的圖像中分析出人臉、人體的幾個關鍵識別點[2-3];

●將捕獲的圖像作為貼圖,放置在場景的最后面一層;

●獲取識別點的坐標[4-5];

●計算目標大小和位置;

●根據目標大小和位置,針對3D圖元進行變換;

●渲染輸出圖元;

●由OM自動合并圖像。

(2)實現部分詳述。

●預載入分類器特征文件;

●獲取圖像;

●利用積分圖對每個像素計算特征值;

●通過決策樹篩選并得到目標物體窗口;

●計算窗口大小及位置;

●根據窗口的大小、位置改變3D模型的坐標的縮放及轉換;

●將獲取的圖像轉換為Texture2D作為背景貼圖;

●渲染3D[6-7]模型;

●由DirectX 12[8]的Output Merger自動合成;

●輸出圖像。

2 Haar算法簡介

2.1 Haar算法

Haar算法[9]特征值反映了圖像的灰度變化情況。

Haar特征有邊緣特征、線性特征、中心特征和對角線特征。利用這些特征組合出僅有黑色矩形和白色矩形的特征模板,文中定義此模板的特征值為:白色矩形像素的和減去黑色矩形像素的和。以下進行舉例:

圖2 Haar算法特征值圖像

對于圖2中A、B、D三種模型,其特征值計算公式為v=Sum白-Sum黑,而對于C模型,為了使兩種矩形區域像素數目一致,需要為黑色像素和乘2,因此公式為:v=Sum白-2*Sum黑。

計算過程中,通過調整模板的大小和位置,就可以得出很多特征。這些特征的值被稱為“特征值”。由于特征量過于龐大,可以利用圖3積分圖來進行計算。

這里通過圖像大小一樣的一個二維數組來表示積分圖,在該二維數組中,(x,y)位置的值是在原始圖像中從(0,0)到(x,y)處的像素值的和。

對應圖3中的a、c圖所示的haar特征,計算公式如下:

SAT(x,y)=SAT(x,y-1)+SAT(x-1,y)+

I(x,y)-SAT(x-1,y-1)

RecSum(r)=SAT(x-1,y-1)+SAT(x+w-1,

y+h-1)-SAT(x-1,y+h-1)-SAT(x+w-1,y-1)

圖3 積分圖

其中,SAT表示積分圖中的值,RecSum表示(x,y)處的長寬為(w,h)的區域的和。以RecSum為基礎來計算haar特征。同理,對b圖和d圖對應的haar特征計算公式如下:

RSAT(x,y)=RSAT(x-1,y-1)+RSAT(x+1,

y-1)+I(x,y)-RSAT(x,y-2)+I(x,y)+I(x,y-1)

RecSum(r)=RSAT(x-h+w,y+w+h-1)+

RSAT(x,y-1)-RSAT(x-h,y+

h-1)-RSAT(x+w,y+w-1)

2.2 級聯分類器(CASCADE)實現概述

2.2.1 弱分類器

弱分類器用來表示一個最基本的Haar-like[10]特征,通過對輸入圖像計算得到的Haar-like特征值與最初的弱分類器的特征值進行比較,來判斷所輸入的圖像是否為目標物體。弱分類器通過孵化訓練就成為最優弱分類器。

一個弱分類器h是由x、f、p、θ(x:子窗口圖像,f:一個特征,θ:閾值)四部分組成。p的作用是控制不等式的方向,使得不等式都是<號,形式方便。這里是通過分類和回歸樹進行識別,如圖4所示。

在分類的應用中,每一個非葉子節點都表示一種判斷,每一條路徑都代表一種判斷的輸出,每一個葉子節點代表一種類別,并作為最終判斷的結果。

一個弱分類器就是圖4類似的決策樹,最基本的弱分類器只包含一個Haar-like特征,也就是說它的決策樹只有一層,被稱為樹樁(stump)。

要注意的是如何來確定每一個節點判斷的輸出,在對輸入圖像的特征值與弱分類器中的特征進行比較時,需要有一個閾值才可以。判定其為人臉的條件是:只有當輸入圖像的特征值大于該閾值時才成立。對最優弱分類器的訓練過程就是在尋找一個合適的分類器的閾值,使得該分類器對所有現有的樣本的判讀誤差降為最低。獲得閾值的操作過程如下:

(1)對于每個特征f,計算所有訓練樣本的特征值,并將其排序。

圖4 回歸樹

(2)對排好序的特征值掃描一遍,對每個元素,計算求得以下四個值:

(a)全部人臉樣本的權重的和t1;

(b)全部非人臉樣本的權重的和t0;

(c)在此元素之前的人臉樣本的權重的和s1;

(d)在此元素之前的非人臉樣本的權重的和s0。

(3)最終在獲得每個元素的分類誤差對應表中尋找r值最小的元素,并將該元素作為最優閾值。

r=min(s1+(t0-s0),(s0+(t1-s1)))

2.2.2 強分類器

強分類器需要T輪的迭代,具體操作如下:

(1)給定訓練樣本集S(共N個樣本),其中X和Y分別對應于正樣本和負樣本,T為訓練的最大循環次數;

(2)初始化樣本權重為1/N,即為訓練樣本的初始概率分布;

(3)第一次迭代訓練N個樣本,得到第一個最優弱分類器,步驟見2.2.1節

(4)提高上一輪中被誤判的樣本的權重;

(5)將新的樣本和上次被誤判的樣本放在一起進行新一輪的訓練。

(6)循環執行步驟4-步驟5,T輪后得到T個最優弱分類器。

(7)對T個最優弱分類器組合得到強分類器。

組合方式如下:

強分類器的結果就是由所有弱分類器加權求和的結果與其分類結果平均值進行比較得到最終結果。

2.2.3 目標Haar分類器

為了使得檢測的結果更加準確,需要進行級聯分類器訓練。這涉及到Haar分類器的另一個體系—檢測體系。檢測體系是以現實中的一幅大圖像作為輸入,然后對圖像進行多區域、多尺度的檢測。由于訓練的時候用的照片一般都是20*20 mm左右的小圖片,所以對于大的目標物體,還需要進行多尺度的檢測。在區域放大的過程中會出現同一個人臉被多次檢測,這還需要進行區域的合并。

無論哪一種搜索方法,都會為輸入的圖像輸出大量的子窗口圖像,這些子窗口圖像,經過篩選式級聯分類器多次地被每一個節點篩選、拋棄或通過。它的結構如圖5所示。

圖5 Haar分類器結構

級聯強分類器的策略一般是:將若干個強分類器由簡單到復雜排列,經過訓練使得每個強分類器獲得較高檢測率和低的誤識率,比如幾乎99%的目標物體可以通過,但50%的非目標物體也可以通過,這樣如果有20個強分類器級聯,那么它們的總識別率為0.99^20,約為98%,錯誤接受率也僅為0.5^20,約為0.000 1%。這樣的效果就可以滿足現實的需要。

設K是一個級聯檢測器的層數,D是該級聯分類器的檢測率,F是該級聯分類器的誤識率,di是第i層強分類器的檢測率,fi是第i層強分類器的誤識率。如果要訓練一個級聯分類器,達到給定的F值和D值,只需要訓練出每層的d值和f值:

dk=D,fk=F

級聯分類器的要點就是如何訓練每層強分類器的d值和f值使其達到指定要求。級聯分類器在訓練時要考慮弱分類器的個數和計算時間的平衡,以及強分類器檢測率和誤識率之間的平衡。

3 云穿衣系統3D模型

3D模型:通過調用DirectX3D[11]接口實現對3D模型的渲染。

3.1 圖形管線綜述

圖形管線是運行在圖形硬件上處理流程中的一部分,叫做Stages。將數據推入圖形管線就可以獲取3D場景的2D圖像。還可以利用Stream Output Stage來流式輸出處理后的集合體。某些圖形管線可以被編程,可以被編程的圖形管線被稱作Shaders,編程圖形管線使用高級著色語言(HLSL)。

3.1.1 圖形管線中的著色器

圖形管線中的著色器如圖6所示。

圖6 圖形管線著色圖

3.1.2 著色器各部分的功能

(1)The Compute Shader(CS)。

CS專門用來進行任何類型的計算,CS利用CPU平行計算的優勢,可以處理很多對性能要求較高的計算,如碰撞檢測等。

(2)Input Assembler (IA) Stage。

這是圖形管線中的第一個Stage,這個Stage是靜態的,不可編程的。用D3D Device配置IA,以便IA可以理解如何創建圖元。需要提供輸入布局給IA,以便IA了解如何讀取頂點數據。IA還有一個功能,就是將圖元放到一起,并附加到系統根據圖元生成的數據上。這些數據被稱為“語義”。例如輸入布局可以是這樣的:

D 3D11_INPUT_ELEMENT_DESC layout[]=

{

{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0,

D 3D11_INPUT_PER_VERTEX_DATA, 0},

};

這個輸入布局告訴IA,每個頂點緩沖區有一個元素,語義為“Position”。它還說明了這個元素從第一個頂點字節包括了3個浮點數,每一個是32位,4個字節。

(3)Vertex Shader (VS) Stage。

VS是第一個可編程Stage (Shader),必須為這個Stage編寫獨立的程序。VS Stage用來處理所有圖元的頂點數據。VS可以處理頂點的變換、縮放、光照、置換貼圖等。

最簡單的VS程序如下所示,它直接將輸入的頂點輸出。

float4 main(float4 pos:POSITION) : SV_POSITION

{

return pos;

}

Vertex shader直接返回了輸入的位置。注意參數中的POSITION在Pos的后面,這是語義的簡單的例子。在輸入給IA的頂點緩沖區布局中說明了數據的語義為POSITION,于是在這里通過POSITION獲取。

(4)Hull Shader (HS) Stage。

這是三個可選著色器中的第一個著色器。三個可選著色器統稱為Tesslation Stages,包含了Hull Stage、Tessellator、Domain Shader,它們一起工作并實現了如何進行曲面細分。

曲面細分取出一個圖元對象,然后劃分成多個小部分,以便增加模型的細節。它可以以極快的速度在圖元出現在屏幕之前在GPU上創建新的圖元。

Hull Shader是一個可編程的Stage,Hull Shader可以為曲面細分后的圖元添加細節,它會將數據發送給Tessellator Stage和Domain Shader Stage。

(5)Tessellator (TS) Stage。

Tessellator Stage是曲面細分的第二Tessllator Stage不可編程。它從HullShader中獲取數據,然后將圖元進行細分,最后將數據輸出給Domain Shader。

(6)Domain Shader (DS) Stage。

這是曲面細分的第三步。這是一個可編程的Stage。這個Stage從Hull Shader中取出頂點位置,然后變換從Tessllator Stage中取出頂點來為圖元添加細節。

(7)Geometry Shader (GS) Stage。

這是另一個可選的可編程Shader。它接受圖元作為輸入,然后輸出另一個圖元,與Vertex Shader不同的地方在于,這個Shader可以利用一個圖元創建另一個圖元,而Vertex Shader不能創建新的圖元。這個Shader常常用來創建粒子特效。

(8)Stream Output (SO) Stage。

這個Stage用來從管線中獲得頂點數據。

(9)Rasterizer Stage (RS)。

光柵器輸入向量信息(圖形或圖元),然后將它們轉換為像素。它還將不出現在視口中的圖元裁剪掉。

(10)Pixel Shader (PS) Stage。

這個Stage計算和修改每個將會在屏幕上出現的像素,比如光照信息等,這是一個可編程Shader。

PS的功能在于,計算每個Pixel Fragment的最終顏色,Pixel Fragment是每個可能被顯示在屏幕上的像素。舉個例子,有一個單面的矩形在一個單面的圓后面,矩形的像素和圓的像素都是Pixel Fragments,它們都有機會被寫入屏幕,它發現圓的深度數據小于矩形的,于是只有圓的像素會被顯示到屏幕上。PS將會輸出一個4D的顏色數據。舉一個簡單的例子:

float4 main():SV_TARGET

{

return float4(1.0f,1.0f,1.0f,1.0f);

}

這個像素著色器直接將每個將會出現在屏幕上的像素設置為白色。

(11)Output Merger (OM) Stage。

這是渲染管線的最后一個部分。這個Stage將會獲取每個Pixel Fragment的深度、鏤空信息,來決定最終哪些像素可以被渲染到渲染目標上。

3.2 Direct X12工作

DirectX12工作主要包括以下四個方面:

(1)Pipeline State Objects (PSO)。

PSO指的是ID3D12PipelineState這個接口,利用Device的CreateGraphics Pipeline State()方法來創建。這個結構體將會決定渲染管線的狀態。

(2)The Device。

Device指的是ID3D12Device接口。Device是一個用來創建CL,PSO,Root Signatures,CA,Command Queues,Fences,Resources,Descriptors以及Descriptor Heaps的虛擬適配器。通過D3D12CreateDevice()函數來創建Device。

(3)Command Lists (CL)。

CL指的是ID3D12CommandList接口,使用CL來分配需要在GPU上執行的命令。

(4)Bundles。

Bundles指的是ID3D12CommandList接口,Bundles是一組經常被重用的命令,因為CPU在創建命令的時候很浪費時間,因此命令的重用對提升效率很有作用。

3.3 Command Queues (CQ)

CQ指的是ID3D12CommandQueue接口,CQ還用來更新資源映射。

3.3.1 Command Allocators (CA)

CA指的是D3D12CommandALlocator接口,是顯存中CL和Bundles所儲存的空間。

3.3.2 Resource

Resource包括在構造場景時需要用到的數據。它是儲存了幾何體、貼圖、著色器數據的可以被圖形管線訪問的大塊內存。

3.4 資源類型

資源類型是指資源所保存的數據的類型。包括:Texture1D、Texture1DArray、Texture2D、Texture2DArray、Texture2DMS、Texture2DMSArray、Texture3D、Buffers (ID3D12Resource)。

3.5 Descriptors (Resource Views)

Descriptors是一個結構體,用來告訴Shaders哪里可以找到資源,以及如何解釋資源數據。可以為同一個資源創建多個描述符,用來以不同的方式傳遞給不同的Stage。

舉個例子,可以創建一個Texture2D資源,然后創建一個渲染目標視圖以便使用資源作為輸出緩存的管線。描述符只能被放置在描述符堆中,不能儲存在內存中。

3.5.1 Descriptor Tables (DT)

Descriptor Tables是一個描述符數組。Shader可以從描述符堆中訪問描述符,通過Root Signature的Descriptor Tables的索引。為了從Shader中訪問描述符,應該給Root Signatures的Descritpro Tables進行索引。

3.5.2 Descriptor Heaps (DH)

描述符堆表示的是ID3D12 Descriptor Heap接口,是一個占用大段內存的描述符列表。

3.6 Root Signatures (RS)

Root Signatures定義了Shader訪問的數據(資源)。Root Signatures類似于一個函數的參數列表,函數就是Shader,參數列表就是Shader訪問的數據的類型。

(1)Root Constants是一個內聯的32位數據(DWORD)。這些數據直接儲存在Root Signature中,因為內存限制了Root Signature,所以把Shader可以訪問的經常改變的數值放置到這里。

(2)Root Descriptors是可以被Shader經常訪問的內聯的Descriptors。占用64位虛擬地址(2 DWORDS)。

(3)Descriptor Tables由偏移量和長度組成,位于Descriptor Heap中,Descriptor Tables只有32位。不限制其中保存的Descriptor數量。

3.7 Resource Barriers

Resource Barriers被用來改變資源的狀態或者資源的子資源的使用。

有三種資源的種類:

(1)Transition Barrier用來轉換資源以及子資源的狀態。

(2)Aliasing Barriers與Tiled Resources一起使用。

(3)UAV Barriers用來確保讀寫操作已經完成。

3.8 Fences與Fence Events

Fences與Fence Events會指示GPU是否在執行CQ。Fences指的是ID3D12Fence接口,通過Device的CreateFence()來創建,Fence Events通過CreateEvent()方法來創建。

4 關鍵技術實現

通過計算機軟件建立人體以及人臉的模型,利用Haar算法對采集到的數據進行匹配,匹配成功后則判定該物體為人體,通過硬件發射激光測量出深度場,并結合光源方向、物體明暗情況、人體模型的匹配結果,綜合判定人體的旋轉角度,然后將旋轉角度賦予衣服的模型,將渲染獲得的圖像與采集到的圖像[12]疊加,最后顯示到顯示屏上,就得到了穿上衣服的效果。

通過網格平均采樣的方式,獲得圖像中部分點的亮度,根據亮度判斷物體明暗情況,并結合圖像背景,判斷出光源位置。

云服務器負責接收商戶提交的關于衣服的數據(照片、尺寸等),建立出衣服的3D模型,并輸出一些有關衣服與人體適配的參數,提供給客戶端進行下載,客戶端需要結合參數合成衣服的動畫并渲染模型以及合成。

具體要解決的技術問題:(1)首先解決采集物的信息,采集手段與信息的處理;(2)對采集到的人與物等信息進行識別;(3)在云平臺上[13]進行人與衣服匹配的信息處理;(4)將處理后的信息提交給人去鑒賞。

5 實驗效果

從攝像頭或客戶端捕獲圖像,見圖7。

圖7 捕獲圖像

從收到的圖像中識別出人臉、肩膀部位,見圖8。

圖8 識別圖像

基于機器學習[14]以及Haar算法識別出特定的物體,如人臉,調用DirectX進行渲染,通過DirectX 12用顯卡,進行圖元的渲染。

由DirectX 12渲染管線中的OM直接合成圖像,然后繪制到hwnd上或輸出圖片,見圖9。

圖9 合并圖像

6 結束語

本項目在實踐初期經常遇到識別不準的問題。經過研究發現,是由于樣本數量不足導致的,后期將精力放在了樣本的采集上,使得識別精確度大幅提高。

(1)利用物體識別算法對物體大小的偵測并不完全靠譜,應當對物體的某些小區域進行識別,根據多個小區域之間的距離計算出物體的大小,這才是合適的做法。

(2)在物體識別的過程中,攝像頭扮演的角色十分重要,因此,需要高精度攝像頭,攝像頭產生的雜色會嚴重影響到物體識別的精確度。

(3)這是智能識別技術在網購衣物方面的一次嘗試,尚存在許多不盡人意的地方,有待今后更進一步的研究和學習,使其更加趨于完善和成熟。

猜你喜歡
特征
抓住特征巧觀察
離散型隨機變量的分布列與數字特征
具有兩個P’維非線性不可約特征標的非可解群
月震特征及與地震的對比
如何表達“特征”
被k(2≤k≤16)整除的正整數的特征
中等數學(2019年8期)2019-11-25 01:38:14
不忠誠的四個特征
當代陜西(2019年10期)2019-06-03 10:12:04
詈語的文化蘊含與現代特征
新聞傳播(2018年11期)2018-08-29 08:15:24
抓住特征巧觀察
基于特征篩選的模型選擇
主站蜘蛛池模板: 国内嫩模私拍精品视频| 88av在线| 男女精品视频| 国产女人在线观看| 美女免费精品高清毛片在线视| 久久综合伊人77777| 成年人午夜免费视频| 伊人久久婷婷| 久久综合色天堂av| 国产人人干| 亚洲伦理一区二区| 2024av在线无码中文最新| 秋霞一区二区三区| 国产精品福利一区二区久久| 国产精品精品视频| AⅤ色综合久久天堂AV色综合| www.91中文字幕| 欧洲一区二区三区无码| 天天色天天综合| 色噜噜狠狠色综合网图区| 欲色天天综合网| 国产va在线| 2020久久国产综合精品swag| 国产女同自拍视频| 国产精品无码AV片在线观看播放| 免费人成又黄又爽的视频网站| 四虎国产成人免费观看| 精品五夜婷香蕉国产线看观看| 日日碰狠狠添天天爽| 2022国产无码在线| 四虎国产永久在线观看| 99久久精品国产自免费| 日日噜噜夜夜狠狠视频| av一区二区无码在线| 国产剧情一区二区| 国产视频大全| 91美女视频在线| 亚洲综合九九| 国产高清色视频免费看的网址| 第九色区aⅴ天堂久久香| 午夜免费小视频| 奇米影视狠狠精品7777| 一区二区日韩国产精久久| 欧美精品1区| 中国精品久久| 99re在线观看视频| 尤物精品国产福利网站| 美女国内精品自产拍在线播放 | 极品国产一区二区三区| 亚洲一区二区在线无码| 亚洲一区二区三区国产精华液| 国产在线自揄拍揄视频网站| 国产真实乱子伦精品视手机观看| 54pao国产成人免费视频 | 亚洲精品欧美重口| 欧美午夜小视频| 在线观看免费国产| 国产av色站网站| 亚洲精品动漫| 热久久这里是精品6免费观看| 无码中字出轨中文人妻中文中| 国产成人精品视频一区二区电影| 久久国产亚洲偷自| 国产在线小视频| 久久精品中文字幕免费| 国产爽歪歪免费视频在线观看 | 666精品国产精品亚洲| 色一情一乱一伦一区二区三区小说| 午夜影院a级片| 亚洲最大在线观看| 欧美成人手机在线观看网址| 国产成人精品一区二区三在线观看| 亚洲欧美日韩综合二区三区| 在线观看国产黄色| 亚洲欧美日韩另类| 国产91透明丝袜美腿在线| 一级香蕉人体视频| 秋霞一区二区三区| 国产一二三区视频| 久久久久国产一区二区| 国产在线精彩视频论坛| 国产男女免费完整版视频|