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

前端實現人類動作捕捉,怎么辦?幾十行代碼輕松搞定!

開發 前端
HandtrackJS 是一個基于 JavaScript 的開源庫,用于實時手部檢測和手勢識別。它利用了機器學習模型來檢測手的位置和姿勢,使得開發者可以在網頁和其他 JavaScript 環境中輕松地實現手勢控制和交互功能。

Hello,大家好,我是 Sunday。

昨天有個同學問我:“Sunday 老師,我們公司要做一個動作捕捉的功能,竟然要前端去做!這玩意前端弄不了吧?”

這樣的功能,如果完全從 0 去寫,自然是非常復雜,但是目前早已有了對應的實現類庫,它就是 HandtrackJS!基于它,我們可以很輕松的實現對應的功能!

01:什么是 HandtrackJS

HandtrackJS 是一個基于 JavaScript 的開源庫,用于實時手部檢測和手勢識別。它利用了機器學習模型來檢測手的位置和姿勢,使得開發者可以在網頁和其他 JavaScript 環境中輕松地實現手勢控制和交互功能。

HandtrackJS 提供了對應的案例,我們可以一起來看下對應的效果:

圖片圖片

根據示例 DEMO 我們可以發現,利用 HandtrackJS 可以直接捕獲到人像與手勢,同時還可以根據不同的手勢進行識別,如下圖所示:

圖片圖片

整個手勢的狀態被識別并分為了:open、pinch、closed 三種不同的狀態

02:實現一個動作捕捉功能

整個 HandtrackJS 使用也非常方便,根據官方文檔所示,我們可以分別通過 npm 或 cdn 的形式直接進行安裝,這里為了方便,直接通過 cdn 的形式引入:

html 部分

<body class="bx--body p20">
 <div class="mb10">
  <button
   id="trackbutton"
   class="bx--btn bx--btn--secondary"
   type="button"
   disabled
  >
   點擊啟動
  </button>
 </div>
 <!-- 捕捉和展示實時視頻流 -->
 <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>

在上面代碼中,核心有兩個標簽:

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

JS 部分

搞定了 html 之后,接下來我們來處理 js 的內容

1:利用 handTrack 加載模型

handTrack 是 HandtrackJS 的核心類,可以利用它的 load 方法加載配置、模型:

let model = null // 存儲加載的模型
let trackButton = document.getElementById('trackbutton') // 獲取按鈕元素

// 模型參數配置
const modelParams = {
 maxNumBoxes: 20, // 最大檢測框數量
 iouThreshold: 0.5, // IOU閾值
 scoreThreshold: 0.6 // 分數閾值
}

// 加載模型
handTrack.load(modelParams).then((lmodel) => {
 model = lmodel // 保存加載的模型
 trackButton.disabled = false // 啟用按鈕
})

2:按鈕按下,開啟視頻捕捉

監聽 trackButton 按鈕的點擊行為,利用 video 開啟攝像頭

// 獲取HTML中的video和canvas元素
const video = document.getElementById('myvideo')
const canvas = document.getElementById('canvas')
const context = canvas.getContext('2d') // 獲取canvas的2D繪圖上下文

let isVideo = false // 標記視頻是否正在播放

// 開始視頻捕捉
function startVideo() {
 handTrack.startVideo(video).then(function (status) {
  if (status) {
   // 如果視頻啟動成功
   isVideo = true // 設置視頻狀態為正在播放
   runDetection() // 開始檢測
  } else {
   // 視頻啟動失敗處理(未實現)
  }
 })
}

// 運行檢測
function runDetection() {
 model.detect(video).then((predictions) => {
  model.renderPredictions(predictions, canvas, context, video) // 在canvas上繪制檢測結果
  if (isVideo) {
   requestAnimationFrame(runDetection) // 如果視頻正在播放,繼續檢測
  }
 })
}

// 切換視頻播放狀態
function toggleVideo() {
 if (!isVideo) {
  startVideo() // 如果視頻未播放,則啟動視頻
 } else {
  handTrack.stopVideo(video) // 停止視頻
  isVideo = false // 設置視頻狀態為未播放
 }
}

// 按鈕點擊事件監聽,點擊按鈕時切換視頻狀態
trackButton.addEventListener('click', function () {
 toggleVideo()
})

至此整個的檢測就已經全部完成了,是不是還是挺簡單的。咱們來看看效果!

圖片圖片

責任編輯:武曉燕 來源: 程序員Sunday
相關推薦

2022-03-14 09:57:30

Python代碼

2018-07-13 16:26:46

編程語言Python微信

2022-07-07 15:50:19

Python開發功能

2017-03-27 15:10:16

軟件卸載智能卸載

2020-12-03 11:31:05

AI飛槳框架百度

2023-06-25 13:31:44

2024-06-21 14:47:52

2019-10-14 09:37:48

PC電腦PC軟件網頁

2018-10-16 14:30:22

Python微信朋友圈

2022-11-07 07:04:25

2016-03-29 10:08:07

2025-06-18 10:05:26

2020-11-08 14:44:37

VSCode代碼編碼

2023-04-12 11:18:51

甘特圖前端

2022-03-23 15:32:38

Python開發代碼

2022-01-25 12:51:58

Python代碼證件照

2019-05-05 09:46:01

Python代碼神經網絡

2023-12-06 18:09:01

2022-02-24 10:31:14

前端API命令

2022-07-21 10:08:59

代碼K線圖
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲成色777777在线观看影院 | 午夜免费福利片 | 成人精品视频99在线观看免费 | 2022精品国偷自产免费观看 | 国产人成精品一区二区三 | 91亚洲一区 | 成人不卡在线 | 国内精品视频在线观看 | 又黄又爽的网站 | 国产亚洲精品久久久久久豆腐 | 国产区一区二区三区 | 亚洲成人一区 | 久久久免费在线观看 | 国产一区二区三区网站 | 亚洲日本一区二区三区四区 | 男人天堂网址 | 久久草视频 | 亚洲国产aⅴ精品一区二区 免费观看av | 欧美精品黄| 国产精品久久久久影院色老大 | k8久久久一区二区三区 | 亚洲视频二区 | 国产欧美在线观看 | 999久久久国产精品 欧美成人h版在线观看 | 狠狠草视频 | 99pao成人国产永久免费视频 | 国产中文原创 | 亚洲在线免费 | 久久久久久女 | 日韩精品一区二区三区中文字幕 | 日本成人在线播放 | 日韩一二三区 | 一本在线 | 国产高清视频一区 | 亚洲三级av| 国产激情在线 | 天天天天操 | 日韩精品免费 | 亚洲免费在线观看 | 欧美嘿咻| 日本三级电影在线观看视频 |