成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

純前端實現人臉識別-提取-合成

開發 前端
最近火爆朋友圈的軍裝照H5大家一定還記憶猶新,整個流程涉及的人臉識別和圖像合成兩項核心技術在前端都有對應的解決方案,因此理論上前端也可以完成人臉識別-提取-合成整個流程,實現純前端的軍裝照H5效果。

[[204016]]

最近火爆朋友圈的軍裝照H5大家一定還記憶猶新,其原理是先提取出照片中的面部,然后與模板進行合成,官方的合成處理據說由天天P圖提供技術支持,后端合成后返回給前端展示,形式很新穎效果也非常好,整個流程涉及的人臉識別和圖像合成兩項核心技術在前端都有對應的解決方案,因此理論上前端也可以完成人臉識別-提取-合成整個流程,實現純前端的軍裝照H5效果。

前端人臉識別

首先需要的是人臉識別,這個一聽就覺得高大上的東西原理并不深奧,無非是用人的面部特征規則對圖像進行匹配和識別,這項工作前端雖然可以實現,但前端實現基本就只能依據內置規則庫進行匹配,這個庫的質量就決定了識別質量,而通常更成熟的方案是引入機器學習,讓程序不斷自我修正和提高,進一步提高識別率,機器學習的前端庫倒是也有,但把這兩者結合起來的還沒發現,因此對前端人臉識別的準確率不要報太高期望。

現有的前端人臉識別庫不算多,這里我們選擇的是效果相對好點的trackingjs,這個類庫功能非常強大,庫如其名,它可以完成各種追蹤類的圖像處理任務,人臉識別只是其眾多功能之一,而且通過選配插件,還可以精確識別眼睛、鼻子等五官的位置,貌似稍微折騰一下也可以實現美圖秀秀的效果。

這里我們只用trackingjs實現面部識別,初始化一個面部識別任務的代碼如下:

  1. //實例化 
  2. var tracker = new tracking.ObjectTracker(['face']); 
  3. //識別回調 
  4. tracker.on('track'function(event) { 
  5.     if (!event.data.length) { 
  6.         return console.log('畫面中沒有人臉'); 
  7.     } 
  8.     event.data.forEach(function(rect, i) { 
  9.         console.log(rect);//單個面部數據 
  10.     }) 
  11. }) 
  12. //配置參數 
  13. ... 

 

這樣一個面部識別任務就初始化完成了,調用方式如下:

  1. tracking.track('#img', tracker); 
  2. //其中'#img'參數是目標圖像的選擇器 

 

在識別回調中event.data就是數組格式的面部數據,如果長度為0則表示圖像中沒有人臉或者識別失敗,如果識別成功,單個面部數據的格式如下:

  1.     x: number,          //面部位于原圖x軸方向位置 
  2.     y: nuber,           //面部位于原圖y軸方向位置 
  3.     width:number,       //面部區域寬度 
  4.     height:nubmer       //面部區域高度 

 

有了這個面部數據就可以很容易的將該區域從原圖中提取出來,前端當然就用canvas啦,示例如下:

  1. var img = document.getElementById("img"); 
  2. var faceCtx = document.getElementById("mycanvas").getContext('2d'); 
  3.   
  4. var theFace = ...; //假設我們識別到了theFace 
  5.   
  6. //使用drawImage()方法將面部繪制出來 
  7. faceCtx.drawImage(img, theFace.x, theFace.y, theFace.width, theFace.height, 0, 0, theFace.width, theFace.height); 

 

到這里我們已經實現了面部識別 + 提取,而且代碼量也沒多少,其實這里面有個小坑要在實踐中才會發現,那就是trackingjs的配置,文檔中能找到4個跟識別有關的配置,分別是:

  1. setClassifiers(classifiers) 
  2.  
  3. setEdgesDensity(edgesDensity) 
  4.  
  5. setScaleFactor(scaleFactor) 
  6.  
  7. setStepSize(stepSize) 

 

看不懂吧,我也看不懂,而且文檔中對他們沒有任何有用的說明,在測試中我只使用了后兩個配置,翻譯過來分別是”比例因子”和”步長”,經過枯燥的人肉測試發現,這兩個參數的有效取值范圍分別在1 - 2和1.1 - 2,其中setStepSize不能為1,否則會瀏覽器會卡死,所以從1.1開始取值,取值超過2也可以,但識別成功的概率就很低了。通過調整這兩個參數絕大多數圖像都可以成功識別,唯獨對面部大特寫很難識別,這可能需要配合另外兩個參數吧,我實在沒耐心繼續人肉測試下去了,感興趣的自己回去玩吧。

前端圖像處理

經過上一步的識別+提取我們已經得到了面部圖像,要實現合成軍裝照效果我們還需要對面部圖像進行處理,使色調與模板一致,將來才能毫無違和感的融合在一起,具體到軍裝照這個例子我們需要將面部重新著色,并達到”做舊”的老照片效果,如果用PS想必大家都會,但在前端怎么實現呢?

這里我們需要借助騰訊前端團隊出品的AlloyImage,這是一個堪稱前端PS的前端圖像處理類庫,比如要實現上述效果,我們只需要這樣:

  1. var faceImg = document.getElementById("theFace"); 
  2. faceImg.loadOnce(function() { 
  3.     AlloyImage(this).act("灰度處理").add
  4.         AlloyImage(this.width, this.height, "#808080"
  5.         .act("高斯模糊", 4) 
  6.         .act("色相/飽和度調節", 22, 45, 0, true), 
  7.         "疊加" 
  8.     ).replace(this); 

 

然后你就得到了一個做舊的人臉,還是非常簡單的,AlloyImage的使用基本可以說是傻瓜化,感興趣的就自己花個五分鐘去看下官方文檔吧,這里不再贅述。

然后就要說一下我們這個圖像處理和人家天天P圖的差距了,雖然我們得到了理想的色調,但要想把隨便一張人臉與特定模板做合成,有兩件事必不可少。首先是面部角度矯正,如果模板是正的而你的照片是歪的,直接暴力拼接肯定很違和,所以需要先識別出面部角度,并糾正到指定角度;然后是面部中心定位,因為人臉識別的結果提取出來后不一定是以面部中心為中心的,所以在合成之前要識別出面部中心線,并以此為依據與模板進行定位。然而這些我們都沒有,所以我們只能對輸入的圖像的要求更高,如果輸入了嘴歪眼斜的圖片,結果就只能尷尬了。

***的圖片合成部分就更簡陋了,先將處理好的面部畫到畫布指定位置,然后將摳好圖的臉部透明png模板鋪在上面,完成。實際過程中需要處理一些小問題,比如要根據模板的面部尺寸將面部圖像縮放到合適的尺寸;摳模板時要將邊緣模糊處理,而且盡量保留模板本來的面部輪廓,只將五官摳掉。即便這樣,合成結果還是很容易穿幫,不過純前端處理也沒有更好的辦法了。

效果展示

好了,說的再多不如看個例子,示例提供三種圖片輸入源,分別是本地圖片、遠程圖片、內置示例。其中內置的圖片大部分是提前在PS中糾正過角度的,而且內置圖片會自動匹配到我事先調校好的參數,不出意外可以直接識別出人臉;如果選擇本地圖片作為圖片源,***選擇頭部姿態垂直的正面照,同時參考內置圖片的 參數設置調節參數,一次識別不成功很正常,需要多調幾次;也可以使用遠程圖片識別,但因為canvas受到跨域策略影響,遠程圖片只能識別不能提取和合成。

示例:純前端軍裝照合成(http://refined-x.com/projects/codes/tracking.html)

后記

最初是抱著好奇的心態開始搗鼓這個項目的,雖然最終的合成效果遠遠達不到生產要求,但整個示例擼下來后對人臉識別和圖片處理技術都有了基本的認識,對canvas操作中一些細節問題的解決也略微補足了一下這方面的知識空白,算略有收獲吧。 

責任編輯:龐桂玉 來源: 前端大全
相關推薦

2021-05-10 11:08:00

人工智能人臉識別

2021-03-09 09:20:09

人臉識別人工智能智能手機

2023-07-03 07:40:13

VueGolangweb

2017-09-21 15:31:49

2018-01-31 13:09:35

Pythonface_recogn人臉識別

2022-10-20 09:33:35

2024-05-30 08:09:33

2023-11-14 08:38:43

Golang人臉識別

2023-12-15 10:21:20

Java聲音識別

2021-12-07 23:00:55

人臉識別安全技術

2020-11-18 09:43:29

人臉識別AI人工智能

2021-02-03 14:43:40

人工智能人臉識別

2015-02-10 10:08:59

JavaScript

2019-07-24 15:25:29

框架AI開發

2020-11-06 18:55:56

人臉識別刷臉安全

2021-08-26 10:36:02

人臉識別人工智能技術

2022-10-31 08:47:21

人臉識別按鍵鍵盤

2021-07-01 09:32:14

人臉識別AI人工智能

2024-09-30 06:04:02

人臉識別Python機器學習

2024-06-12 12:57:12

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美区在线观看 | 国产福利视频在线观看 | 黄色在线免费观看视频 | 在线视频91 | 久久亚洲精品视频 | 成人视屏在线观看 | 国产乱精品一区二区三区 | 亚洲精品一区二区三区中文字幕 | 国产精品一区二区三级 | 精品美女在线观看 | 九久久 | 日本精品视频一区二区 | 日本午夜免费福利视频 | 一级a性色生活片久久毛片 午夜精品在线观看 | 欧洲一区二区在线 | 日韩喷潮 | 91福利网址 | 亚洲高清视频一区二区 | 久久91精品国产 | 亚洲精品在线视频 | 国产精品视频一二三区 | 91高清视频在线观看 | 国产无套一区二区三区久久 | 久久精品一区 | 亚洲一区二区在线播放 | 亚洲成人久久久 | 51ⅴ精品国产91久久久久久 | a a毛片 | 亚洲人成人一区二区在线观看 | 国产一区二区久久 | 先锋资源吧 | 欧美日在线 | 中文字幕 在线观看 | 毛片韩国 | 亚洲一区二区 | av性色| 国产精品久久久久久福利一牛影视 | 性福视频在线观看 | 久久精品久久久久久 | 国产精品日韩在线 | 中文字幕亚洲区 |