项目实战:构建 effet.js 人脸识别交互系统的实战之路

在这里插入图片描述

📝个人主页🌹:Eternity._
🌹🌹期待您的关注 🌹🌹

在这里插入图片描述
在这里插入图片描述

❀构建 effet.js

  • 📒1. 什么是effet.js
  • 📜2. 为什么需要使用effet.js
  • 📝3. effet.js的功能
  • 📚4. 使用步骤
    • 🌱引入库
    • 🌿main.js中注册全局
    • 🍀使用
    • 🍁效果图
  • 🔖5. 其他模式讲解
    • 🍃人脸打卡
    • 🌸人脸添加
    • 🌻睡眠检测
  • 📘6. 在h5中的使用
  • 📖7. 总结


🔍前言:在当今数字化的时代,用户体验变得尤为重要,尤其是在身份验证、互动和安全性方面。传统的登录方式,如密码和短信验证码,逐渐显得繁琐而低效。人脸识别技术因其便捷性和安全性,正越来越多地被应用到各类应用场景中。

在这样的背景下,我开发了 effet.js —— 一个基于 facemesh.js 的人脸样式框架,旨在为 Web 应用提供丰富而智能的人脸交互功能。effet.js 实现了从人脸登录到睡眠检测的多样化功能,并力求在开发的灵活性与用户体验之间找到平衡。

在这里插入图片描述

在这篇博客中,我将带你了解 effet.js 的开发历程,包括它的功能实现、技术挑战和我为推广它所做的努力。如果你对如何利用 JavaScript 和前沿技术提升用户体验感兴趣,相信这篇文章会为你提供一些有趣的思路。


📒1. 什么是effet.js

face-effet 简称effet.js 是一款人脸样式框架

effet.js 是一个轻量级的人脸特效库,专注于在网页上添加栩栩如生的面部动画,如眨眼、张嘴和摇头等。它提供了一个简洁的API,使得开发者能够轻松地在用户界面上实现这些动态表情,从而增强互动性和生动性。effet.js 特别适合各种需要提升用户体验的应用场景,特别是在前端项目中需要集成复杂人脸动态效果时。

effet.js 官网地址⛰️


📜2. 为什么需要使用effet.js

Effet.js是一个轻量级的人脸样式处理工具,它能够迅速辅助我在前端实现识别与初步验证的功能。但请注意,这仅仅是整个验证流程的一部分,最终验证还需依赖后端来完成。Effet.js提供了简洁易用的API,使我们能够迅速构建起人脸登录的前端部分。至于后端,我们只需调用其他供应商提供的接口来完成最终的校验工作。

比如:

  • 虹软人脸识别
  • 百度云人脸识别
  • 阿里云人脸识别
  • 腾讯云人脸识别
  • 等等…

📝3. effet.js的功能

effet.js目前主要支持核心功能点:

标题是否支持速度体验
人脸登录█████████ 90%
人脸打卡█████████ 90%
睡眠检测█████████ 90%
人脸添加█████████ 90%
  • 人脸登录:动作检测,眨眨眼,张张嘴,左右摇头检测
  • 人脸打卡:判断摄像头距离头部远近位置来计算当前人脸是否可以打卡
  • 睡眠检测:计算眼睛闭合度来呈现当前人脸是否在睡觉
  • 人脸添加:计算人脸上下左右摇头的动画效果,完成人脸数据的返回

📚4. 使用步骤

🌱引入库

代码如下(我们已vue的人脸登录为示例,一个简单的人脸登录):

通过npm命令安装,网络不好的同学们,可以尝试切换淘宝镜像

npm config set registry https://registry.npmmirror.com

安装插件

npm i face-effet -S

🌿main.js中注册全局

代码如下(示例):

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import './plugins/element.js'
// 引入核心样式
import 'face-effet/effet/effet.css'
// 引入核心主文件
import faceEffet from 'face-effet/effet/effet.js'
// 注册为全局对象
Vue.prototype.$faceEffet = faceEffetVue.config.productionTip = falsenew Vue({router,render: h => h(App)
}).$mount('#app')

🍀使用

 <template><div><div ref="faceVueTest" id="faceId" ></div><el-button @click="startFace">开启人脸</el-button><el-button @click="restartFace">重启人脸</el-button><el-button @click="closeFace">关闭人脸</el-button></div></template><script>// $faceEffet 对象是在main.js 注册好的全局对象export default {name: "index",data(){return {}},beforeDestroy(){if (this.$faceEffet){this.$faceEffet.close();}},methods:{startFace(){// 人脸容器的初始化this.$faceEffet.init({el:this.$refs.faceVueTest, // 直接传入html元素 也可以直接传入字符 'faceId'type:'checkLogin', // 人脸登录模式callBack:this.callBack // 阶段回调函数,会打印每个执行步骤,一般是在这个方法调用后端接口})},callBack(data){// 验证过程的回调打印console.log(data)},restartFace(){// 重启人脸容器this.$faceEffet.restart()},closeFace(){// 关闭人脸容器this.$faceEffet.close();}}}</script> 

🍁效果图

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

上面案例主要介绍了,只需简单的代码就可以完成,眨眨眼,张张嘴,左右摇头的效果


🔖5. 其他模式讲解

🍃人脸打卡

this.$faceEffet.init({el:this.$refs.faceVueTest, // 直接传入html元素 也可以直接传入字符 'faceId'type:'clockIn', // 人脸打卡callBack:this.callBack // 阶段回调函数,会打印每个执行步骤,一般是在这个方法调用后端接口})

🌸人脸添加

this.$faceEffet.init({el:this.$refs.faceVueTest, // 直接传入html元素 也可以直接传入字符 'faceId'type:'addFace', // 人脸打卡callBack:this.callBack // 阶段回调函数,会打印每个执行步骤,一般是在这个方法调用后端接口})

🌻睡眠检测

this.$faceEffet.init({el:this.$refs.faceVueTest, // 直接传入html元素 也可以直接传入字符 'faceId'type:'checkSleep', // 人脸打卡callBack:this.callBack // 阶段回调函数,会打印每个执行步骤,一般是在这个方法调用后端接口})

其实差异不大,唯一变化的是type的参数值

具体使用可以查看文档:具体使用官方文档

在官方文档中讲解了入参的具体对象


📘6. 在h5中的使用

详细代码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Face-effet.js 人脸登录示例</title><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="stylesheet" href="https://unpkg.com/face-effet/effet/effet.css"><script src="https://unpkg.com/face-effet/effet/effet.js"></script><style>#myface{margin-top: 350px;}</style><script>document.addEventListener("DOMContentLoaded", function() {effet.init({el: 'myface',callBack: (data) => {console.log(data);}});});</script>
</head>
<body>
<!-- 用于渲染人脸识别的容器 -->
<div id="myface"></div>
<button onclick="effet.restart()">重新检测</button>
</body>
</html>

📖7. 总结

effet.js 是一个基于 facemesh.js 的人脸交互框架,旨在为 Web 应用提供便捷而智能的人脸识别功能,包括登录、打卡和睡眠检测等。通过这篇博客,我将分享 effet.js 的开发历程、功能实现、以及面临的技术挑战,希望能为有兴趣提升用户体验的开发者提供一些启发。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/452655.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS NEXT 应用开发实战(五、页面的生命周期及使用介绍)

HarmonyOS NEXT是华为推出的最新操作系统&#xff0c;arkUI是其提供的用户界面框架。arkUI的页面生命周期管理对于开发者来说非常重要&#xff0c;因为它涉及到页面的创建、显示、隐藏、销毁等各个阶段。以下是arkUI页面生命周期的介绍及使用举例。 页面的生命周期的作用 页面…

聊聊Go语言的异常处理机制

背景 最近因为遇到了一个panic问题&#xff0c;加上之前零零散散看了些关于程序异常处理相关的东西&#xff0c;对这块有点兴趣&#xff0c;于是整理了一下golang对于异常处理的机制。 名词介绍 Painc golang的内置方法&#xff0c;能够改变程序的控制流。 当函数调用了pan…

T113 内核中 adbd相关配置1

准备工作 1. 配置 系统&#xff1a;ubuntu24.04docker&#xff08;ubuntu18.04&#xff09; 软件vscode, sdk:Tina-linux&#xff08;BingPi-M2&#xff09; 2. 构建环境直接使用自带的 source ./build/envsetup.sh lunch 选择 6 编译开启16线程 make -j16boot编译 mboot 打包…

设计模式——装饰者模式(8)

一、定义 指在不改变现有对象结构的情况下&#xff0c;动态地给该对象增加一些职责&#xff08;即增加其额外功能&#xff09;的模式。我们先来看一个快餐店的例子。快餐店有炒面、炒饭这些快餐&#xff0c;可以额外附加鸡蛋、火腿、培根这些配菜&#xff0c;当然加配菜需要额…

【网络安全】简单P1:通过开发者工具解锁专业版和企业版功能

未经许可,不得转载。 文章目录 前言发现过程前言 在探索一个SaaS平台的过程中,我发现了一个漏洞,使得我能够在无需订阅的情况下解锁高级(专业/企业)功能。 发现过程 我使用一个没有任何高级功能的基本用户账户进行常规登录。在浏览平台时,我注意到某些按钮和功能上带有…

基于微信小程序的购物系统【附源码、文档】

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

web前端--html 5---qq注册

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>qq注册</title> <link rel"impo…

[Linux#66][TCP->IP] 面向字节流 | TCP异常 | filesocket | 网络层IP

目录 1. 面向字节流 思考&#xff1a;对于UDP协议来说&#xff0c;是否也存在“粘包问题”呢&#xff1f; 2.TCP 异常情况 3.知识 1.UDP实现可靠传输(经典面试题) 2. 网络抓包 | 爬虫 3.打通文件和 socket 的关系 4.网络层&#xff1a;IP 前置知识 1. 面向字节流 udp…

java逻辑运算符 C语言结构体定义

1. public static void main(String[] args) {System.out.println(true&true);//&两者均为true才trueSystem.out.println(false|false);// | 两边都是false才是falseSystem.out.println(true^false);//^ 相同为false&#xff0c;不同为trueSystem.out.println(!false)…

git 安装

文章目录 一、ubuntu 安装 git二、centos 安装 git三、检查安装 git 一、ubuntu 安装 git sudo apt-get install get -y二、centos 安装 git sudo s install git -y三、检查安装 git git --version出现此标志git版本号&#xff0c;表示git安装完成。

《Effective C++》 笔记

让自己习惯C&#xff0c;Accustoming Yourself to C 1. 视C为一个语言联邦&#xff0c;View Cas a federation of languages. 将 C视为一个由相关语言组成的联邦而非单一语言。在其某个次语言&#xff08;sublanguage&#xff09;中&#xff0c;各种守则与通例都倾向简单、直观…

【win11】终端/命令提示符/powershell美化

文章目录 1.设置字体1.1. 打开win11的终端/命令提示符/powershell其中之一1.2. 打开终端设置&#xff0c;修改所有终端默认字体为新宋体 2. 修改powershell背景色为蓝色 win11的默认终端/命令提示符/powershell主题风格让人感觉与win10撕裂太大&#xff0c;尤其是字体、背景色&…

Excel:vba实现筛选出有批注的单元格

实现的效果&#xff1a;代码&#xff1a; Sub test() Dim cell As RangeRange("F3:I10000").ClearlastRow Cells(Rows.Count, "f").End(xlUp).Row MsgBox lastrow For Each cell In Range("a1:a21")If Not cell.Comment Is Nothing ThenMsgBox…

从DexMV、VideoDex、MimicPlay到SeeDo:从人类视频中学习:机器人的主流训练方法之一

前言 在此文《UMI——斯坦福刷盘机器人&#xff1a;从手持夹持器到动作预测Diffusion Policy(含代码解读)》的1.1节开头有提到 机器人收集训练数据一般有多种方式&#xff0c;比如来自人类视频的视觉演示 有的工作致力于从视频数据——例如YouTube视频中进行策略学习 即最常见…

推荐一款非常优秀的3D建模软件:PTC Creo

PTC Creo是美国PTC公司最新研发出来的一款超级强大的3D建模辅助类大型软件&#xff0c;这款软件是针对产品设计以及开发的软件&#xff0c;它具有一系列3D CAD、CAM、CAE等开发工具和套件&#xff0c;而且可用性极高。从概念设计一直到制造出产品&#xff0c;本软件都可以完成任…

Windows API 一 ----起步

目录 1.介绍主函数入口参数。 2. 简单介绍 Windows.h 这个头文件 小结&#xff0c;也聊一聊 1.介绍主函数入口参数。 第一个参数: HINSTANCE 类型的 参数&#xff0c; 称为“实例句柄“&#xff0c;这个参数唯一标志了我们写的这个程序。 第二个参数&#xff1a; HINSTANCE…

ORA-12541: TNS: 无监听程序

目录 1. 检查服务是否开启2. ip的原因 ORA-12541: TNS: 无监听程序 &#xff08;特别感谢&#xff09;参考链接&#xff1a;https://blog.csdn.net/qq_43540696/article/details/102522292 Traceback (most recent call last): File "D:\D01-software\D01010-PyCharm_co…

Java爬虫:获取直播带货数据的实战指南

在当今数字化时代&#xff0c;直播带货已成为电商领域的新热点&#xff0c;通过直播平台展示商品并进行销售&#xff0c;有效促进了产品的曝光和销售量的提升。然而&#xff0c;如何在直播带货过程中进行数据分析和评估效果&#xff0c;成为了摆在商家面前的一个重要问题。本文…

STM32调试,发现HAL_Init();之后无法调试,甚至无法让程序停下来

参考文档&#xff1a; STM32调试,发现HAL_Init();之后无法调试,甚至无法让程序停下来 - asml - 博客园 症状 最近开始学习STM32Cube,发现新建工程后无法正常调试,过了HAL_Init();之后就无法继续调试了. 无法进行让程序暂停以及停止等操作.并在输出窗口不断刷出 ERROR: Can n…

Golang | Leetcode Golang题解之第486题预测赢家

题目&#xff1a; 题解&#xff1a; func PredictTheWinner(nums []int) bool {return total(nums, 0, len(nums) - 1, 1) > 0 }func total(nums []int, start, end int, turn int) int {if start end {return nums[start] * turn}scoreStart : nums[start] * turn total…