【face-api.js】前端实现,人脸捕获、表情识别、年龄性别识别、人脸比对、视频人脸追踪、摄像头人物识别

这篇具有很好参考价值的文章主要介绍了【face-api.js】前端实现,人脸捕获、表情识别、年龄性别识别、人脸比对、视频人脸追踪、摄像头人物识别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

face-api.js


效果展示

【face-api.js】前端实现,人脸捕获、表情识别、年龄性别识别、人脸比对、视频人脸追踪、摄像头人物识别【face-api.js】前端实现,人脸捕获、表情识别、年龄性别识别、人脸比对、视频人脸追踪、摄像头人物识别


准备工作

  • 官网看下简介,在线预览看下效果
  • 官方的github文件拷下来
  • npm i face-api.js
  • 把模型文件拷进你的项目
    【face-api.js】前端实现,人脸捕获、表情识别、年龄性别识别、人脸比对、视频人脸追踪、摄像头人物识别

主要布局

主要是在图片或视频元素上,盖一个相同大小的canvas

<template>
  <div>
    <!--  图片/视频 捕获区  -->
    <div class="detectBox">
      <img
        v-show="!trackVideoFaces && !trackCameraFaces"
        :src="base64"
        alt=""
        width="500"
        ref="img"
        id="myImg"
        @load="detectFactory"
      >

      <video
        v-if="trackVideoFaces"
        width="500"
        ref="video"
        id="myVideo"
        muted
        playsinline
        preload
        loop
        @durationchange="$refs.video.play()"
        @play="videoStatus = 1"
        @pause="videoStatus = 0"
      >
        <source src="./media/shylock.mp4" type="video/mp4">
        抱歉,您的浏览器不支持嵌入式视频。
      </video>

      <video
        v-if="trackCameraFaces"
        @loadedmetadata=""
        ref="video"
        id="myVideo"
        autoplay
        muted
        playsinline
        @play="videoStatus = 1"
        @pause="videoStatus = 0"
      />

      <canvas ref="canvas" />
    </div>
  </div>
</template>

加载训练模型

import * as faceapi from 'face-api.js';

export default {
	methods: {
	  	// 加载模型
	    init() {
	      const toast = this.$createToast({
	        txt: '模型加载中...',
	        mask: true
	      })
	
	      toast.show();
	
	      // 加载训练好的模型
	      // ageGenderNet:          年龄、性别识别模型,大约420KB
	      // faceExpressionNet:     人脸表情识别模型,识别表情,开心,沮丧,普通,大约310KB
	      // faceLandmark68Net:    68个点人脸地标检测模型(默认模型),大约350KB
	      // faceLandmark68TinyNet:68个点人脸地标检测模型(小模型),大约80KB
	      // faceRecognitionNet:    人脸识别模型,可以比较任意两个人脸的相似性,大约6.2MB
	      // ssdMobilenetv1:       SSD 移动网络 V1,大约5.4MB,准确的最高,推理时间最慢
	      // tinyFaceDetector:      微型人脸检测器(实时人脸检测器),与 SSD Mobilenet V1 人脸检测器相比,它速度更快、体积更小且资源消耗更少,但在检测小人脸方面的表现略逊一筹。移动和网络友好
	      // mtcnn                  大约2MB
	      // tinyYolov2             识别身体轮廓的算法,不知道怎么用
	      Promise.all([
	        faceapi.nets.faceRecognitionNet.loadFromUri('./models'),
	        faceapi.nets.faceLandmark68Net.loadFromUri('./models'),
	        faceapi.nets.faceLandmark68TinyNet.loadFromUri('./models'),
	        faceapi.nets.ssdMobilenetv1.loadFromUri('./models'),
	        faceapi.nets.tinyFaceDetector.loadFromUri('./models'),
	        faceapi.nets.mtcnn.loadFromUri('./models'),
	        faceapi.nets.faceExpressionNet.loadFromUri('./models'),
	        faceapi.nets.ageGenderNet.loadFromUri('./models'),
	        // faceapi.nets.tinyYolov.loadFromUri('./models')
	      ])
	          .then((res) => {
	            this.entryFaces();
	            toast.hide();
	          })
	    },
	},
	mounted () {
    this.init();
  }
}

人脸识别

先是录入一些图片的描述信息,然后比较描述信息,判断人脸的相似度

    /**
     * @description 录入人脸数据
     *
     * 大脸照、黑白照可能识别不出来,可以修改配置,降低人脸的置信度
     * */
    async entryFaces() {
      const imgs = document.querySelectorAll('.faceCompare img');

      for (const img of imgs) {
        /** 注意:这里不能传options,不然会报错 */
        const singleResult = await faceapi
            .detectSingleFace(img)
            .withFaceLandmarks()
            .withFaceDescriptor()
        ;

        this.faces = [
          ...this.faces,
          new faceapi.LabeledFaceDescriptors(
              img.alt,
              [singleResult.descriptor]
          )
        ]
      }
    },

   // 比较相似度
    async compareFaces() {
      const detection1 = await faceapi.detectSingleFace('reference').withFaceLandmarks().withFaceDescriptor();
      const detection2 = await faceapi.detectSingleFace('toCompare').withFaceLandmarks().withFaceDescriptor();

      if (detection1 && detection2) {
        this.similarity = Math.round(faceapi.utils.round(1 - faceapi.euclideanDistance(detection1.descriptor, detection2.descriptor)) * 100);
      } else {
        this.similarity = 0;
      }
    }

人脸检测器

人脸检测器有两种,SSDTiny两种,SSD较大,Tiny用于动态视频检测,精度可能没SSD高,但推算速度快,帧率也高,如果检测不到人脸,可以切换检测器,或者修改配置

	data() {
	return {
		cascadeData: [
	        {
	          value: 'SSD',
	          text: 'SSD',
	          children: [
	            { text: '0.1', value: 0.1 },
	            { text: '0.2', value: 0.2 },
	            { text: '0.3', value: 0.3 },
	            { text: '0.4', value: 0.4 },
	            { text: '0.5', value: 0.5 },
	            { text: '0.6', value: 0.6 },
	            { text: '0.7', value: 0.7 },
	            { text: '0.8', value: 0.8 },
	            { text: '0.9', value: 0.9 },
	          ]
	        },
	        {
	          value: 'Tiny',
	          text: 'Tiny',
	          children: [
	            { text: '0.1', value: 0.1, children: [{ text: '128', value: 128 }, { text: '160', value: 160 }, { text: '224', value: 224 }, { text: '320', value: 320 }, { text: '416', value: 416 }, { text: '512', value: 512 }, { text: '608', value: 608 }] },
	            { text: '0.2', value: 0.2, children: [{ text: '128', value: 128 }, { text: '160', value: 160 }, { text: '224', value: 224 }, { text: '320', value: 320 }, { text: '416', value: 416 }, { text: '512', value: 512 }, { text: '608', value: 608 }] },
	            { text: '0.3', value: 0.3, children: [{ text: '128', value: 128 }, { text: '160', value: 160 }, { text: '224', value: 224 }, { text: '320', value: 320 }, { text: '416', value: 416 }, { text: '512', value: 512 }, { text: '608', value: 608 }] },
	            { text: '0.4', value: 0.4, children: [{ text: '128', value: 128 }, { text: '160', value: 160 }, { text: '224', value: 224 }, { text: '320', value: 320 }, { text: '416', value: 416 }, { text: '512', value: 512 }, { text: '608', value: 608 }] },
	            { text: '0.5', value: 0.5, children: [{ text: '128', value: 128 }, { text: '160', value: 160 }, { text: '224', value: 224 }, { text: '320', value: 320 }, { text: '416', value: 416 }, { text: '512', value: 512 }, { text: '608', value: 608 }] },
	            { text: '0.6', value: 0.6, children: [{ text: '128', value: 128 }, { text: '160', value: 160 }, { text: '224', value: 224 }, { text: '320', value: 320 }, { text: '416', value: 416 }, { text: '512', value: 512 }, { text: '608', value: 608 }] },
	            { text: '0.7', value: 0.7, children: [{ text: '128', value: 128 }, { text: '160', value: 160 }, { text: '224', value: 224 }, { text: '320', value: 320 }, { text: '416', value: 416 }, { text: '512', value: 512 }, { text: '608', value: 608 }] },
	            { text: '0.8', value: 0.8, children: [{ text: '128', value: 128 }, { text: '160', value: 160 }, { text: '224', value: 224 }, { text: '320', value: 320 }, { text: '416', value: 416 }, { text: '512', value: 512 }, { text: '608', value: 608 }] },
	            { text: '0.9', value: 0.9, children: [{ text: '128', value: 128 }, { text: '160', value: 160 }, { text: '224', value: 224 }, { text: '320', value: 320 }, { text: '416', value: 416 }, { text: '512', value: 512 }, { text: '608', value: 608 }] },
	          ]
	        }
	      ]
		}
	}

 	// 配置人脸检测器参数
    getFaceDetectorOptions() {
      const { selectedValue } = this;

      return selectedValue[0] === 'SSD'
          ? new faceapi.SsdMobilenetv1Options({
            minConfidence: selectedValue[1]
          })
          /**
           * @param inputSize?: number
               处理图像的大小,越小越快
               在检测较小的人脸时, 必须被32整除
               常见的大小有128、160、224、320、416、512、608 ,
               用于通过网络摄像头进行人脸跟踪我建议使用较小尺寸的,例如128、160
               用于检测较小的人脸使用较大尺寸的,例如512、608
               默认值: 416
             *  @param scoreThreshold?: number
               最小置信阈值
               默认值:0.5
           *
           * @desc inputSize和scoreThreshold的不同配置,都会影响返回结果的数量
           * */
          : new faceapi.TinyFaceDetectorOptions({
            scoreThreshold: selectedValue[1],
            inputSize: selectedValue[2]
          })
    },

略…

懒得写了,把实现代码拷下来看吧


本地开启https

因为 navigator.mediaDeviceshttp://域名下无法使用,你可以用http://localhost过渡,但是如果想要在手机上预览效果,就需要配置https


手机当电脑的摄像头

手机、电脑下载iVCam文章来源地址https://www.toymoban.com/news/detail-515607.html

到了这里,关于【face-api.js】前端实现,人脸捕获、表情识别、年龄性别识别、人脸比对、视频人脸追踪、摄像头人物识别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 人脸识别2:InsightFace实现人脸识别Face Recognition(含源码下载)

    目录 人脸识别2:InsightFace实现人脸识别Face Recognition(含源码下载) 1. 前言 2. 项目安装 3. 人脸识别系统 (1)人脸检测和关键点检测 (2)人脸校准 (3)人脸特征提取 (4)人脸比对(1:1) (5)人脸搜索(1:N) (6)配置文件config (7)人脸识别优化建议 4. 人脸识别Demo效果 5. 人脸识

    2024年02月05日
    浏览(52)
  • 人脸识别4:Android InsightFace实现人脸识别Face Recognition(含源码)

    目录 人脸识别4:Android InsightFace实现人脸识别Face Recognition(含源码) 1. 前言 2. 项目说明 (1)开发版本 (2)依赖库说明(OpenCV+OpenCL+base-utils+TNN) (3)CMake配置 3. 人脸识别系统 (1)人脸识别的核心算法 (2)人脸检测和关键点检测 (3)人脸校准 (4)人脸特征提取 (5)人脸比

    2024年02月09日
    浏览(44)
  • 人脸识别3:C/C++ InsightFace实现人脸识别Face Recognition(含源码)

    目录 1. 前言 2. 项目安装 (1)项目结构 (2)配置开发环境(OpenCV+OpenCL+base-utils+TNN) (3)部署TNN模型 (4)CMake配置 (5)编译运行  3. 人脸识别系统 (1)人脸识别的核心算法 (2)人脸检测和关键点检测 (3)人脸校准 (4)人脸特征提取 (5)人脸比对(1:1) (6)人脸搜索(1

    2024年02月07日
    浏览(46)
  • python实现人脸识别(face_recognition)

    1、介绍 本项目是世界上最强大、简洁的人脸识别库,你可以使用Python和命令行工具提取、识别、操作人脸。 本项目的人脸识别是基于业内领先的C++开源库dlib中的深度学习模型,用Labeled Faces in the Wild人脸数据集进行测试,有高达99.38%的准确率。但对小孩和亚洲人脸的识别准

    2024年02月02日
    浏览(41)
  • 使用OpenCV实现人脸特征点检测与实时表情识别

    引言:         本文介绍了如何利用 OpenCV 库实现人脸特征点检测,并进一步实现实时表情识别的案例。首先,通过 OpenCV 的Dlib库进行人脸特征点的定位,然后基于特征点的变化来识别不同的表情。这种方法不仅准确度高,而且实时性好,可以广泛应用于人脸表情分析、人

    2024年04月15日
    浏览(49)
  • FER2013人脸表情识别从零实现(Pytorch,FNN,CNN)

    学完了深度学习的理论和框架,接下来就是实践啦!相信大家在实践的时候都会去找各种的项目,本文是kaggle上面的一个深度学习小项目,目的是实现人脸表情的分类。接下来我将具体讲解实现过程,相信你只要学了深度学习的理论知识,对pytorch框架有所了解,就能够看得懂

    2024年02月05日
    浏览(51)
  • 基于Face++,使用Spring Boot+Elemnet-UI实现人脸识别登录。

    上一篇文章只是封装了人脸检测的一些工具类,要实现刷脸登录,我们首先得思考一个问题,就是如何将我们的人脸和登录账户信息进行绑定,让它通过人脸就能识别到当前登录的账户是谁的账户。 这个问题我们可以这样解决,我浏览Face++的官网发现它还有人脸比对的一个

    2024年02月04日
    浏览(45)
  • 面部表情识别(Pytorch):人脸检测模型+面部表情识别分类模型

    面部表情识别2:Pytorch实现表情识别(含表情识别数据集和训练代码):https://blog.csdn.net/guyuealian/article/details/129505205 b站视频:https://www.bilibili.com/video/BV1xm4y1p7H3 项目源码:https://github.com/Whiffe/PyTorch-Facial-Expression-Recognition 面部表情识别由两部分组成:人脸检测与表情识别分类 人

    2024年02月13日
    浏览(62)
  • 表情识别-情感分析-人脸识别(代码+教程)

    面部情绪识别(FER)是指根据面部表情识别和分类人类情绪的过程。通过分析面部特征和模式,机器可以对一个人的情绪状态作出有根据的推断。这个面部识别的子领域高度跨学科,涉及计算机视觉、机器学习和心理学等领域的知识。 以下是一些关键领域,其中这项技术可能

    2024年02月09日
    浏览(42)
  • face_recognition人脸识别与人脸检测

    1、安装face_recognition库 face_recognition库的人脸识别是基于业内领先的C++开源库dlib中的深度学习模型,安装face_recognition库的同时会一并安装dlib深度学习框架。 2、face_recognition库的使用 1)load_image_file加载要识别的人脸图像 这个方法主要是用于加载要识别的人脸图像,返回的数据

    2024年02月13日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包