站長資訊網
最全最豐富的資訊網站

抖音很火的圖片選擇題特效,用前端快速實現!

本篇文章給大家帶來了關于前端圖片特效的相關知識,其中主要給大家介紹前端如何實現一個最近抖音很火的圖片選擇題特效,非常全面詳細,下面一起來看一下,希望對需要的朋友有所幫助。

抖音很火的圖片選擇題特效,用前端快速實現!

抖音很火的圖片選擇題特效,用前端快速實現!

掘金由于安全原因沒有在 iframe標簽上設置allow="microphone *;camera *"導致攝像頭打開失?。≌堻c擊右上角“查看詳情”查看!或點擊下方鏈接查看

//復制鏈接預覽 https://code.juejin.cn/pen/7160886403805970445
登錄后復制

前言

最近抖音特效中有個圖片選擇題特別火,今天就來講一下前端如何實現,下面我主要講一下如何判斷左右擺頭。

架構和概念

抽象整體的實現思路如下

抖音很火的圖片選擇題特效,用前端快速實現!

MediaPipe Face Mesh是一個解決方案,即使在移動設備上也能實時估計468個3D面部地標。它使用機器學習(ML)來推斷3D面部表面,只需要一個攝像頭輸入,而無需專用的深度傳感器。該解決方案利用輕量級模型架構以及整個管道中的GPU加速,為實時體驗提供了至關重要的實時性能。

引入

import '@mediapipe/face_mesh'; import '@tensorflow/tfjs-core'; import '@tensorflow/tfjs-backend-webgl'; import * as faceLandmarksDetection from '@tensorflow-models/face-landmarks-detection';
登錄后復制

創建人臉模型

引入tensorflow訓練好的人臉特征點檢測模型,預測 486 個 3D 人臉特征點,推斷出人臉的近似面部幾何圖形。

  • maxFaces 默認為1。模型將檢測到的最大人臉數量。返回的面孔數量可以小于最大值(例如,當輸入中沒有人臉時)。強烈建議將此值設置為預期的最大人臉數量,否則模型將繼續搜索缺失的面孔,這可能會減慢性能。
  • refineLandmarks 默認為false。如果設置為真,則細化眼睛和嘴唇周圍的地標坐標,并在虹膜周圍輸出其他地標。(這里我可以設置false,因為我們沒有用到眼部坐標)
  • solutionPath 通往am二進制文件和模型文件所在位置的路徑。(強烈建議將模型放到國內的對象存儲里面,首次加載可以節省大量時間,大小大概10M)

async createDetector(){     const model = faceLandmarksDetection.SupportedModels.MediaPipeFaceMesh;     const detectorConfig = {         maxFaces:1, //檢測到的最大面部數量         refineLandmarks:false, //可以完善眼睛和嘴唇周圍的地標坐標,并在虹膜周圍輸出其他地標         runtime: 'mediapipe',         solutionPath: 'https://cdn.jsdelivr.net/npm/@mediapipe/face_mesh', //WASM二進制文件和模型文件所在的路徑     };     this.detector = await faceLandmarksDetection.createDetector(model, detectorConfig); }
登錄后復制

抖音很火的圖片選擇題特效,用前端快速實現!

人臉識別

返回的面孔列表包含圖像中每個面孔的檢測面。如果模型無法檢測到任何面孔,列表將是空的。 對于每個面,它包含一個檢測到的面孔的邊界框,以及一個關鍵點數組。MediaPipeFaceMesh返回468個關鍵點。每個關鍵點都包含x和y,以及一個名稱。

現在,您可以使用探測器來檢測人臉。estimateFaces方法接受多種格式的圖像和視頻,包括:HTMLVideoElement、HTMLImageElement、HTMLCanvasElementTensor3D

  • flipHorizontal 可選。默認為false。當圖像數據來自相機時,結果必須水平翻轉。

async renderPrediction() {     var video = this.$refs['video'];     var canvas = this.$refs['canvas'];     var context = canvas.getContext('2d');     context.clearRect(0, 0, canvas.width, canvas.height);     const Faces = await this.detector.estimateFaces(video, {         flipHorizontal:false, //鏡像     });     if (Faces.length > 0) {         this.log(`檢測到人臉`);     } else {         this.log(`沒有檢測到人臉`);     } }
登錄后復制

抖音很火的圖片選擇題特效,用前端快速實現!

該框表示圖像像素空間中面部的邊界框,xMin、xMax表示x-bounds、yMin、yMax表示y-bounds,寬度、高度表示邊界框的尺寸。 對于關鍵點,x和y表示圖像像素空間中的實際關鍵點位置。z表示頭部中心為原點的深度,值越小,鍵點離相機越近。Z的大小使用與x大致相同的比例。 這個名字為一些關鍵點提供了一個標簽,例如“嘴唇”、“左眼”等。請注意,并非每個關鍵點都有標簽。

如何判斷

找到人臉上的兩個兩個點

第一個點 額頭中心位置第二個點 下巴中心位置

const place1 = (face.keypoints || []).find((e,i)=>i===10); //額頭位置 const place2 = (face.keypoints || []).find((e,i)=>i===152); //下巴位置 /*               x1,y1                 |                 |                 |   x2,y2  -------|------- x4,y4               x3,y3  */  const [x1,y1,x2,y2,x3,y3,x4,y4] = [       place1.x,place1.y,       0,place2.y,       place2.x,place2.y,       this.canvas.width, place2.y  ];
登錄后復制

通過canvas.width 額頭中心位置下巴中心位置計算出 x1,y1,x2,y2,x3,y3,x4,y4

抖音很火的圖片選擇題特效,用前端快速實現!

getAngle({ x: x1, y: y1 }, { x: x2, y: y2 }){     const dot = x1 * x2 + y1 * y2     const det = x1 * y2 - y1 * x2     const angle = Math.atan2(det, dot) / Math.PI * 180     return Math.round(angle + 360) % 360 } const angle = this.getAngle({         x: x1 - x3,         y: y1 - y3,     }, {         x: x2 - x3,         y: y2 - y3,     }); console.log('角度',angle)
登錄后復制

抖音很火的圖片選擇題特效,用前端快速實現!

通過獲取角度,通過角度的大小來判斷左右擺頭。

推薦:《web前端開發視頻教程》

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久热精品视频第一页| 亚洲欧洲精品成人久久曰| 国产偷久久久精品专区| 九九免费久久这里有精品23| 国产成人精品免费直播| 亚洲日韩在线第一页| 久久久国产精品va麻豆| 精品国产乱子伦一区二区三区 | 精品国产AV一区二区三区| 久久亚洲国产成人精品性色| 国产网红无码精品视频| 久久伊人精品青青草原日本| 国产福利电影一区二区三区,亚洲国模精品一区 | 久久国产成人精品麻豆| 国内精品久久久久久久久电影网 | 99re视频精品全部免费| 国产成人精品日本亚洲| 国精品无码一区二区三区左线 | 亚洲精品无码久久毛片波多野吉衣| 久久精品国产99精品国产2021| 国产女主播精品大秀系列 | 久久精品国产亚洲AV天海翼| 香蕉视频国产精品| 国产在线精品香蕉麻豆| 精品福利视频网站| 97精品国产手机| 日韩精品久久久久久久电影| 国产精品自拍一区| 精品国产成人亚洲午夜福利| 国产精品美女久久福利网站| 97视频热人人精品免费| 无码日韩精品一区二区免费| 五月天精品视频在线观看| 夜精品a一区二区三区| 最新国产精品自在线观看| 精品72久久久久久久中文字幕| 精品国产日韩一区三区| 精品久久久中文字幕二区| 国产精品va在线观看无| 国产精品第100页| 中文字幕日韩第十页在线观看|