日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

前端實(shí)現(xiàn)人類(lèi)動(dòng)作捕捉,怎么辦?幾十行代碼輕松搞定!

來(lái)源: 責(zé)編: 時(shí)間:2024-06-12 17:25:22 142觀看
導(dǎo)讀Hello,大家好,我是 Sunday。昨天有個(gè)同學(xué)問(wèn)我:“Sunday 老師,我們公司要做一個(gè)動(dòng)作捕捉的功能,竟然要前端去做!這玩意前端弄不了吧?”這樣的功能,如果完全從 0 去寫(xiě),自然是非常復(fù)雜,但是目前早已有了對(duì)應(yīng)的實(shí)現(xiàn)類(lèi)庫(kù),它就是 Handt

Hello,大家好,我是 Sunday。YdM28資訊網(wǎng)——每日最新資訊28at.com

昨天有個(gè)同學(xué)問(wèn)我:“Sunday 老師,我們公司要做一個(gè)動(dòng)作捕捉的功能,竟然要前端去做!這玩意前端弄不了吧?”YdM28資訊網(wǎng)——每日最新資訊28at.com

這樣的功能,如果完全從 0 去寫(xiě),自然是非常復(fù)雜,但是目前早已有了對(duì)應(yīng)的實(shí)現(xiàn)類(lèi)庫(kù),它就是 HandtrackJS!基于它,我們可以很輕松的實(shí)現(xiàn)對(duì)應(yīng)的功能!YdM28資訊網(wǎng)——每日最新資訊28at.com

01:什么是 HandtrackJS

HandtrackJS 是一個(gè)基于 JavaScript 的開(kāi)源庫(kù),用于實(shí)時(shí)手部檢測(cè)和手勢(shì)識(shí)別。它利用了機(jī)器學(xué)習(xí)模型來(lái)檢測(cè)手的位置和姿勢(shì),使得開(kāi)發(fā)者可以在網(wǎng)頁(yè)和其他 JavaScript 環(huán)境中輕松地實(shí)現(xiàn)手勢(shì)控制和交互功能。YdM28資訊網(wǎng)——每日最新資訊28at.com

HandtrackJS 提供了對(duì)應(yīng)的案例,我們可以一起來(lái)看下對(duì)應(yīng)的效果:YdM28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片YdM28資訊網(wǎng)——每日最新資訊28at.com

根據(jù)示例 DEMO 我們可以發(fā)現(xiàn),利用 HandtrackJS 可以直接捕獲到人像與手勢(shì),同時(shí)還可以根據(jù)不同的手勢(shì)進(jìn)行識(shí)別,如下圖所示:YdM28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片YdM28資訊網(wǎng)——每日最新資訊28at.com

整個(gè)手勢(shì)的狀態(tài)被識(shí)別并分為了:open、pinch、closed 三種不同的狀態(tài)YdM28資訊網(wǎng)——每日最新資訊28at.com

02:實(shí)現(xiàn)一個(gè)動(dòng)作捕捉功能

整個(gè) HandtrackJS 使用也非常方便,根據(jù)官方文檔所示,我們可以分別通過(guò) npm 或 cdn 的形式直接進(jìn)行安裝,這里為了方便,直接通過(guò) cdn 的形式引入:YdM28資訊網(wǎng)——每日最新資訊28at.com

html 部分

<body class="bx--body p20"> <div class="mb10">  <button   id="trackbutton"   class="bx--btn bx--btn--secondary"   type="button"   disabled  >   點(diǎn)擊啟動(dòng)  </button> </div> <!-- 捕捉和展示實(shí)時(shí)視頻流 --> <video  class="videobox canvasbox"  autoplay="autoplay"  id="myvideo"  style="display: none" ></video> <!-- 視頻流渲染到 canvas 之中 --> <canvas id="canvas" class="border canvasbox"></canvas> <!-- cdn 引入 handtrack --> <script src="lib/handtrack.min.js"></script> <script src="js/index.js"></script></body>

在上面代碼中,核心有兩個(gè)標(biāo)簽:YdM28資訊網(wǎng)——每日最新資訊28at.com

  1. video:它的主要作用是開(kāi)啟一個(gè)視頻流,用來(lái)捕獲攝像頭圖像的。但是真正的展示并不是通過(guò)它來(lái)做,所以這里直接 display: none 隱藏即可
  2. canvas:這是真正用來(lái)展示捕獲內(nèi)容的界面

JS 部分

搞定了 html 之后,接下來(lái)我們來(lái)處理 js 的內(nèi)容YdM28資訊網(wǎng)——每日最新資訊28at.com

1:利用 handTrack 加載模型

handTrack 是 HandtrackJS 的核心類(lèi),可以利用它的 load 方法加載配置、模型:YdM28資訊網(wǎng)——每日最新資訊28at.com

let model = null // 存儲(chǔ)加載的模型let trackButton = document.getElementById('trackbutton') // 獲取按鈕元素// 模型參數(shù)配置const modelParams = { maxNumBoxes: 20, // 最大檢測(cè)框數(shù)量 iouThreshold: 0.5, // IOU閾值 scoreThreshold: 0.6 // 分?jǐn)?shù)閾值}// 加載模型handTrack.load(modelParams).then((lmodel) => { model = lmodel // 保存加載的模型 trackButton.disabled = false // 啟用按鈕})

2:按鈕按下,開(kāi)啟視頻捕捉

監(jiān)聽(tīng) trackButton 按鈕的點(diǎn)擊行為,利用 video 開(kāi)啟攝像頭YdM28資訊網(wǎng)——每日最新資訊28at.com

// 獲取HTML中的video和canvas元素const video = document.getElementById('myvideo')const canvas = document.getElementById('canvas')const context = canvas.getContext('2d') // 獲取canvas的2D繪圖上下文let isVideo = false // 標(biāo)記視頻是否正在播放// 開(kāi)始視頻捕捉function startVideo() { handTrack.startVideo(video).then(function (status) {  if (status) {   // 如果視頻啟動(dòng)成功   isVideo = true // 設(shè)置視頻狀態(tài)為正在播放   runDetection() // 開(kāi)始檢測(cè)  } else {   // 視頻啟動(dòng)失敗處理(未實(shí)現(xiàn))  } })}// 運(yùn)行檢測(cè)function runDetection() { model.detect(video).then((predictions) => {  model.renderPredictions(predictions, canvas, context, video) // 在canvas上繪制檢測(cè)結(jié)果  if (isVideo) {   requestAnimationFrame(runDetection) // 如果視頻正在播放,繼續(xù)檢測(cè)  } })}// 切換視頻播放狀態(tài)function toggleVideo() { if (!isVideo) {  startVideo() // 如果視頻未播放,則啟動(dòng)視頻 } else {  handTrack.stopVideo(video) // 停止視頻  isVideo = false // 設(shè)置視頻狀態(tài)為未播放 }}// 按鈕點(diǎn)擊事件監(jiān)聽(tīng),點(diǎn)擊按鈕時(shí)切換視頻狀態(tài)trackButton.addEventListener('click', function () { toggleVideo()})

至此整個(gè)的檢測(cè)就已經(jīng)全部完成了,是不是還是挺簡(jiǎn)單的。咱們來(lái)看看效果!YdM28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片YdM28資訊網(wǎng)——每日最新資訊28at.com

YdM28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-93347-0.html前端實(shí)現(xiàn)人類(lèi)動(dòng)作捕捉,怎么辦?幾十行代碼輕松搞定!

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 日本 Rapidus 宣布將同 IBM 開(kāi)發(fā) 2nm 制程芯粒封裝量產(chǎn)技術(shù)

下一篇: Python 常量使用的五個(gè)優(yōu)秀實(shí)踐

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
Top 主站蜘蛛池模板: 遂昌县| 成安县| 德化县| 本溪市| 冕宁县| 上杭县| 张北县| 武邑县| 绍兴县| 阳高县| 历史| 当涂县| 咸阳市| 东平县| 巴彦县| 泸西县| 南郑县| 井陉县| 盱眙县| 临城县| 河源市| 剑川县| 新竹市| 通江县| 陆河县| 崇仁县| 吉木乃县| 龙川县| 保靖县| 承德市| 资阳市| 贵德县| 凤城市| 从化市| 巴楚县| 子长县| 承德县| 青阳县| 杭锦后旗| 会昌县| 高州市|