创新实训日记一:clmtrackr.js初探

本周的主要任务为学习使用clmtrackr.js,使用js进行简单的人脸检测和相关部位的提取。

clmtrackr是一个javascript库,用于将面部模型拟合到视频或图像中的面部,并实现纯js的人脸检测,并且clmtrackr跟踪一个面部并按照下面模型的编号将面部模型的坐标位置输出为数组

 面部各个位置的点位坐标


通过该js库能实现的功能主要包括以下几个方面:
  • 跟踪图像
  • 跟踪视频
  • 面部替换
  • 面部遮蔽
  • 实时面部变形
  • 表情检测
  • 漫画

在本次的学习过程中,我主要学习的部分是对于视频图像中的面部图像的追踪,至于其他部分可以到github项目下亲自体验。

以下是我根据GitHub中clmtrackr项目的相关介绍,进行的相关的实践



调用clmtrackr中人脸识别的demo代码如下

html部分(clmtrackr.js文件即为所需要的js库)

<!DOCTYPE html>
<html>
<head>
	<title>this is a test</title>
	
</head>
<body>
	
	<video id="webcam" width="400" height="300" autoplay loop></video>
	<canvas id="overlay" width="400" height="300"></canvas>
	<style>/*video和canvas标签位置重合使显示出来的人脸模型和视频重合*/
        #webcam, #overlay {
            position: absolute;
            top: 0;
            left: 0;
        }
    </style>

	<!-- 导入相关的js文件 -->
	<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <script src="clmtrackr.js"></script>
    <script src="main.js"></script>
	
</body>
</html>

main.js部分

$(document).ready(function() {
  const video = $('#webcam')[0];
  const overlay = $('#overlay')[0];
  const overlay_eye = overlay.getContext('2d');
  const ctrack = new clm.tracker();
  ctrack.init();

// 根据输出的数组中人脸相应位置的坐标,圈出眼睛的位置
  function getEyes(positions) {
    const minX = positions[23][0] - 6;
    const maxX = positions[28][0] + 6;
    const minY = positions[24][1] - 6;
    const maxY = positions[26][1] + 6;

    const width = maxX - minX;
    const height = maxY - minY;

    return [minX, minY, width, height];
  }

  // 持续监测人脸
  function detect() {
    // 检查是否检测到人脸
    requestAnimationFrame(detect);
    let currentPosition = ctrack.getCurrentPosition();

    overlay_eye.clearRect(0, 0, 400, 300);
    if (currentPosition) {
      //  在overlay canvas上画出检测到的人脸:
      ctrack.draw(overlay);

      // 用红色画出人眼位置:
      const eyesRect = getEyes(currentPosition);
      overlay_eye.strokeStyle = 'red';
      overlay_eye.strokeRect(eyesRect[0], eyesRect[1], eyesRect[2], eyesRect[3]);
      
    }
  }

  function onStreaming(stream) {
    video.srcObject = stream;
    ctrack.start(video);
    detect();
  }

  navigator.mediaDevices
    .getUserMedia({
      video: true,
    })
    .then(onStreaming);

});


效果如下图

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值