前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >用 effet.js 快速搞定人脸识别和互动效果!

用 effet.js 快速搞定人脸识别和互动效果!

作者头像
爱喝兽奶的熊孩子
发布于 2024-10-29 00:16:59
发布于 2024-10-29 00:16:59
24100
代码可运行
举报
文章被收录于专栏:C语言基础C语言基础
运行总次数:0
代码可运行

用 effet.js 快速搞定人脸识别和互动效果!

简介

近年来,随着计算机视觉技术的快速发展,基于人脸的识别与互动应用已经逐渐融入我们的日常生活。无论是手机解锁、安防监控,还是互动娱乐,人脸识别技术都发挥着至关重要的作用。在这篇博文中,我们将介绍如何使用 effet.js 框架轻松实现人脸识别及互动功能。effet.js 是一个基于 facemesh.js 的二次开发框架,旨在让开发者能够更方便地在项目中引入人脸识别相关的功能,如人脸登录、打卡、睡眠检测等。本文将结合代码和示例图片,带您深入了解如何使用这个框架。

什么是 effet.js

effet.js 是一个轻量级的人脸样式框架,专注于提供简单易用的人脸识别功能,帮助开发者快速将人脸互动功能集成到他们的应用中。该框架基于 facemesh.js 构建,并进行了进一步的优化,以提供更多样化的互动功能。例如,人脸登录、打卡、睡眠检测和人脸添加等功能,这些都可以为用户带来更具吸引力的交互体验。

主要特性
  1. 人脸登录:通过眨眼、张嘴等动作进行人脸验证,提供一种趣味和安全并存的登录方式。
  2. 人脸打卡:支持在应用中打卡,适用于各种签到、考勤场景。
  3. 睡眠检测:可用于检测用户在摄像头前是否处于睡眠状态,适合于防疲劳驾驶等应用。
  4. 人脸添加:支持通过摄像头对用户人脸进行采集和注册,方便后续识别与验证。

安装与使用

在开始使用 effet.js 之前,首先需要在项目中引入它。我们可以通过 npmyarn 进行安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install face-effet.js

或者:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yarn add face-effet.js

安装完成后,我们可以在项目中引入并进行初始化。

main.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 import Vue from 'vue'
 import App from './App.vue'
 import router from './router'
 
 // 引入框架
 import 'face-effet/effet/effet.css'
 import faceEffet from 'face-effet/effet/effet.js'
 // 注册为全局
 Vue.prototype.$faceEffet = faceEffet
 
 Vue.config.productionTip = false
 
 new Vue({
   router,
   render: h => h(App)
 }).$mount('#app')
HTML 结构

在实现人脸识别功能之前,我们需要先搭建一个简单的 HTML 结构,包括视频元素用于捕获摄像头画面。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
   <div>
     <div id="dangqface">
     </div>
     <button @click="restart">重新验证</button>
   </div>
 </template>
 <script>
 export default {
   data() {
     return {
       editor: null
     };
   },
   mounted() {
       this.$faceEffet.init({
         el: 'dangqface',
         callBack: (data) => {
           console.log(data);
         }
       })
   },
   methods: {
     restart(){
       this.$faceEffet.restart()
     }
   }
 };
 </script>
 <style>
 #dangqface{
   width: 100%;
   height: 600px;
   position: absolute;
   transform: translate(-50%,-50%);
   left: 50%;
   top: 50%;
   overflow: hidden;
   border: 1px red solid;
 }
 </style>

上面的代码定义了一个用于显示摄像头视频流的 video 元素。effet.js 会将人脸识别的结果实时渲染在该视频流上。

功能演示

1. 人脸登录

effet.js 提供了多种交互方式进行人脸登录,比如眨眼、张嘴等动作。以下是具体的实现步骤:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 effet.init({
      el: 'myface',
      type:'checkLogin',
      callBack: (data) => {
          console.log(data);
      }
  });

在上面的代码中,callBack 回调函数会在检测到预设的动作后触发,例如眨眼等。

用户只需根据提示进行眨眼、张嘴等操作,即可完成身份验证。这种方式不仅增加了趣味性,还提升了安全性。

2. 人脸打卡

人脸打卡的功能适用于需要签到的场景,例如会议签到、考勤管理等。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 effet.init({
     el: 'myface',
     type:'clockIn',
     callBack: (data) => {
         console.log(data);
     }
 });

一旦检测到人脸,系统就会自动进行打卡操作。effet.js 提供了一些额外的方法,比如 startAttendance(),可以方便地调用打卡功能。

3. 睡眠检测

通过睡眠检测功能,应用可以检测到用户的状态,以判断用户是否睡着。这在防止疲劳驾驶等场景中非常有用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
effet.init({
    el: 'myface',
    type:'checkSleep',
    callBack: (data) => {
        console.log(data);
    }
});

当检测到用户长时间闭眼时,onSleepDetected 回调函数会被触发,通知系统用户可能已经睡着,从而可以采取一些安全措施,比如发出警告音。

性能优化与多线程加载

由于 effet.js 依赖于多个文件,包括 facemesh.js 和其他模型文件,初始化加载可能较慢。因此,使用cache方法来事先缓存

在 JavaScript 中,以下是一个示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
   <div>
     <el-row v-if="faceLoginState">
       <el-col :span="24">
         <el-form ref="form" :model="form" label-width="80px">
 
           <el-form-item label="账号">
             <el-input v-model="form.name"></el-input>
           </el-form-item>
 
           <el-form-item label="密码">
             <el-input v-model="form.pwd"></el-input>
           </el-form-item>
 
           <el-form-item label="登录">
             <el-button>登录</el-button>
             <el-button @click="faceLoginChange">切换人脸登录</el-button>
           </el-form-item>
 
         </el-form>
       </el-col>
     </el-row>
 
     <el-row v-if="!faceLoginState">
       <el-col :span="24">
         <div ref="faceVueTest" id="faceId"></div>
       </el-col>
       <el-col :span="24">
         <el-button @click="faceLoginChange">切换密码登录</el-button>
       </el-col>
     </el-row>
   </div>
 </template>
   
  <script>
  // $faceEffet 对象是在main.js 注册好的全局对象
  export default {
    name: "index",
    data(){
      return {
       form:{
         name:"",
         pwd:""
       },
       faceLoginState:true,
       faceInitState:false,// 用于标记人脸是否已经初始化,如果初始化则重启
      }
    },
    created(){
        // 在当前页面刚刚加载的时候,可以先进行缓存操作,因为在init函数也会调用当前cache函数
        // 如果已缓存,则会忽略掉,所以不必担心重复缓存的问题,
        // 从而调用init函数是不需要缓存而提升人脸容器加载速度
        this.$faceEffet.cache();
    },
    // 页面销毁的时候,需要调用close函数
    beforeDestroy(){
      if (this.$faceEffet){
        this.$faceEffet.close();
      }
    },
    methods:{
      faceLoginChange(){
          this.faceLoginState = !this.faceLoginState
          if (!this.faceLoginState){
              // 人脸登录模式 
              if (this.faceInitState){
                  this.$faceEffet.restart()
                  return;
              }
              this.faceInit()
              this.faceInitState = true // 标记已经初始化
          }else {
              // 密码登录模式
          }
      },
      faceInit(){
         this.$faceEffet.init({
             el:this.$refs.faceVueTest, // 直接传入html元素 也可以直接传入字符 'faceId'
             callBack:this.callBack // 阶段回调函数,会打印每个执行步骤,一般是在这个方法调用后端接口
         })
      },
      callBack(data){
          if (data.progressMessage === 'success'){ // 判断阶段是否成功
                 let array = data.base64Array; 
                 if (!data.base64Array || data.base64Array.length === 0){
                     return;
                 }
                 Promise.all(data.base64Array).then((base64Strings) => {
                     // base64Strings 是一个人脸图片数组
                     // 这个是模拟请求后端接口,请切换你自己的请求接口
                     http.post('/login/face',{base:base64Strings}).then(res=>{
                          if (res.code === 200){
                              // 登录成功
                              // 这里登录成功应该把后端token带过来存入前端,
                          }else {
                              // 登录失败 重启人脸容器,开始新的一轮验证
                              this.$faceEffet.restart()
                          }
                     })
                 }).catch((error) => {
                     console.error("Error resolving promises:", error);
                 });
          }        
      }
    }
  }
  </script> 

使用场景与实际案例

1. 在线教育与考勤

在线教育场景中,effet.js 可以用于学生的签到与考勤管理。通过人脸打卡功能,教师可以轻松确认每个学生的出勤情况,并将数据实时同步到后台。

2. 企业考勤管理

在企业应用中,effet.js 可用于考勤管理系统,无需额外的硬件设备,仅通过普通摄像头即可实现高效的考勤签到。

3. 汽车安全监测

在汽车驾驶中,结合睡眠检测功能,可以实时监测驾驶员的状态,防止因疲劳驾驶而导致的交通事故,提升驾驶安全性。

小结

effet.js 是一个非常强大且易用的人脸识别框架,帮助开发者更简单地实现多样化的人脸交互功能。无论是人脸登录、打卡还是睡眠检测,都能够有效提高应用的用户体验和安全性。通过结合 JavaScript 多线程的性能优化手段,我们还可以确保在提供丰富功能的同时保持系统的高效与流畅。

希望通过这篇博文,您能够对 effet.js 有更深入的了解,并能够在自己的项目中实践这些功能。如果您对 effet.js 感兴趣,不妨在自己的应用中试一试吧!

更多资源

欢迎加入我们的社区,一起探讨与交流更多关于人脸识别和交互的有趣想法!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Quick-Task 动态脚本支持框架之使用介绍篇
文章链接:https://liuyueyi.github.io/hexblog/2018/07/19/180719-Quick-Task-动态脚本支持框架之使用介绍篇/
一灰灰blog
2018/07/29
3920
Quick-Task 动态脚本支持框架之使用介绍篇
Quick-Task 动态脚本支持框架之结构设计篇
文章链接:https://liuyueyi.github.io/hexblog/2018/07/23/180723-Quick-Task-动态脚本支持框架之结构设计篇/
一灰灰blog
2018/07/29
6360
Quick-Task 动态脚本支持框架之结构设计篇
180723-Quick-Task 动态脚本支持框架之结构设计篇
文章链接:https://liuyueyi.github.io/hexblog/2018/07/23/180723-Quick-Task-动态脚本支持框架之结构设计篇/
一灰灰blog
2022/01/17
2680
180723-Quick-Task 动态脚本支持框架之结构设计篇
Quick-Task 动态脚本支持框架之任务动态加载
前面几篇博文分别介绍了整个项目的基本架构,使用说明,以及整体框架的设计与实现初稿,接下来则进入更细节的实现篇,将整个工程中核心实现捞出来,从为什么这么设计到最终的实现给予说明
一灰灰blog
2018/07/29
5000
Quick-Task 动态脚本支持框架之任务动态加载
Quick-Task 动态脚本支持框架之Groovy脚本加载执行
上一篇简答说了如何判断有任务动态添加、删除或更新,归于一点就是监听文件的变化,判断目录下的Groovy文件是否有新增删除和改变,从而判定是否有任务的变更;
一灰灰blog
2018/08/07
1.2K0
Quick-Task 动态脚本支持框架之Groovy脚本加载执行
借助GitHub搭建属于自己的maven仓库
在Github上也写了不少的项目了,然后经常遇到的一个问题就是,很多自己写的项目,希望在另外一个项目中使用时,只能把这个项目下载下来,相当之不方便
一灰灰blog
2018/02/13
1.8K0
借助GitHub搭建属于自己的maven仓库
Quick-Media 中文二维码支持
Quick-Media 项目提供了一些列多媒体操作的开箱即用工具类,比如图片编辑合成,markdown/html/svg渲染,音频处理;当然还有本文重点说明的二维码生成解析
一灰灰blog
2020/06/30
5520
Quick-Media 中文二维码支持
Quick-Media 中文二维码支持
Quick-Media 项目提供了一些列多媒体操作的开箱即用工具类,比如图片编辑合成,markdown/html/svg渲染,音频处理;当然还有本文重点说明的二维码生成解析
一灰灰blog
2020/07/01
3860
Quick-Media 中文二维码支持
SpringBoot 系列教程 Mybatis+xml 整合篇
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
一灰灰blog
2020/02/11
9750
SpringBoot 系列教程 Mybatis+xml 整合篇
【SpringBoot Mybatis系列】MapperMapper接口与Sql绑定几种姿势
通常我们在使用Mybatis进行开发时,会选择xml文件来写对应的sql,然后将Mapper接口与sql的xml文件建立绑定关系,然后在项目中调用mapper接口就可以执行对应的sql
一灰灰blog
2021/07/26
1.1K0
【SpringBoot Mybatis系列】MapperMapper接口与Sql绑定几种姿势
SpringBoot高级篇搜索Solr之 文档新增与修改使用姿势
大多涉及到数据的处理,无非CURD四种操作,对于搜索SOLR而言,基本操作也可以说就这么几种,在实际应用中,搜索条件的多样性才是重点,我们在进入复杂的搜索之前,先来看一下如何新增和修改文档
一灰灰blog
2019/07/02
1.2K0
SpringBoot高级篇搜索Solr之 文档新增与修改使用姿势
SpringBoot系列教程JPA之基础环境搭建
JPA(Java Persistence API)Java持久化API,是 Java 持久化的标准规范,Hibernate是持久化规范的技术实现,而Spring Data JPA是在 Hibernate 基础上封装的一款框架。JPA作为标准,实际上并没有说局限于某个固定的数据源,事实上mysql,mongo, solr都是ok的。接下来我们将介绍下springboot结合jpa 来实现mysql的curd以及更加复杂一点的sql支持
一灰灰blog
2019/07/02
5930
SpringBoot系列教程JPA之基础环境搭建
SpringBoot实战基于异常日志的邮件报警
相信所有奋斗在一线的小伙伴,会很关心自己的系统的运行情况,一般来说,基础设施齐全一点的公司都会有完善的报警方案,那么如果我们是一个小公司呢,不能因为基础设施没有,就失去对象的感知能力吧;如果我们的系统大量异常却不能实时的触达给我们,那么也就只会有一个结果--杀个程序猿祭天
一灰灰blog
2021/08/12
6630
SpringBoot实战基于异常日志的邮件报警
徒手撸一个扫码登录示例工程
不知道是不是微信的原因,现在出现扫码登录的场景越来越多了,作为一个有追求、有理想新四好码农,当然得紧跟时代的潮流,得徒手撸一个以儆效尤
一灰灰blog
2020/04/24
6191
徒手撸一个扫码登录示例工程
SpringBoot系列教程web篇之Thymeleaf环境搭建
上一篇博文介绍了如何使用Freemaker引擎搭建web项目,这一篇我们则看一下另外一个常见的页面渲染引擎Thymeleaf如何搭建一个web项目
一灰灰blog
2019/08/23
5410
SpringBoot系列教程web篇之Thymeleaf环境搭建
Spring MVC之基于xml配置的web应用构建
直接用SpringBoot构建web应用可以说非常非常简单了,在使用SpringBoot构建后端服务之前,一直用的是Spring + SpringMVC基于xml的配置方式来玩的,所以在正式进入SpringBoot Web篇之前,有必要看一下不用SpringBoot应该怎么玩的,也因此方便凸显SpringBoot的优越性
一灰灰blog
2019/03/17
1.1K0
Spring MVC之基于xml配置的web应用构建
SpringBoot基础系列@Value 之字面量及 SpEL使用知识点介绍篇
[【SpringBoot 基础系列】@Value 之字面量及 SpEL 知识点介绍篇](http://mp.weixin.qq.com/s?__biz=MzU3MTAzNTMzMQ==&mid=224
一灰灰blog
2021/06/21
3721
SpringBoot基础系列@Value 之字面量及 SpEL使用知识点介绍篇
【SpringBoot + Mybatis系列】Mapper接口注册的几种方式
SpringBoot项目中借助Mybatis来操作数据库,对大部分java技术栈的小伙伴来说,并不会陌生;我们知道,使用mybatis,一般会有下面几个
一灰灰blog
2021/07/26
1K0
【SpringBoot + Mybatis系列】Mapper接口注册的几种方式
SpringBoot基础系列@Value 之字面量及 SpEL使用知识点介绍篇
承接上一篇博文【SpringBoot 基础系列】@Value 中哪些你不知道的知识点 中提及到但没有细说的知识点,这一篇博文将来看一下@Value除了绑定配置文件中的属性配置之外,另外支持的两种姿势
一灰灰blog
2021/06/16
6951
SpringBoot基础系列@Value 之字面量及 SpEL使用知识点介绍篇
SpringBoot系列教程web篇之重定向
前面介绍了spring web篇数据返回的几种常用姿势,当我们在相应一个http请求时,除了直接返回数据之外,还有另一种常见的case -> 重定向;
一灰灰blog
2019/10/12
3.4K0
SpringBoot系列教程web篇之重定向
推荐阅读
相关推荐
Quick-Task 动态脚本支持框架之使用介绍篇
更多 >
LV.3
Server后端 & 爬虫 & IT & DBA
目录
  • 用 effet.js 快速搞定人脸识别和互动效果!
    • 简介
    • 什么是 effet.js
      • 主要特性
    • 安装与使用
      • HTML 结构
    • 功能演示
      • 1. 人脸登录
      • 2. 人脸打卡
      • 3. 睡眠检测
    • 性能优化与多线程加载
    • 使用场景与实际案例
      • 1. 在线教育与考勤
      • 2. 企业考勤管理
      • 3. 汽车安全监测
    • 小结
    • 更多资源
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档