前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于TensorFlow构建的face-api.js人脸识别【代码+效果展示+在线体验】

基于TensorFlow构建的face-api.js人脸识别【代码+效果展示+在线体验】

作者头像
MIKE笔记
发布2023-03-22 15:27:25
2.2K0
发布2023-03-22 15:27:25
举报
文章被收录于专栏:MIKE笔记 技术教程

文章目录


前言

gtihub项目地址

无意中看到了一个有趣的AI实时人脸追踪,不懂AI的我简单地尝试了一下。我使用的是基于TensorFlow构建的face-api.js库,事实上它可以嵌入在网站上并让网站拥有功能齐全的实时人脸检测能力,而且可与任何网络摄像头或手机摄像头配合使用。只要照着教程ctrl+c➕ctrl+v🤣相信你也能做出这个效果!

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

一、项目架构

代码语言:javascript
复制
ai-
    │  models
   	│  │age_gender_model-shard1
    │  │age_gender_model-weights_manifest.json
    │  │face_expression_model-shard1
    │  │face_expression_model-weights_manifest.json  
    │  │face_landmark_68_model-shard1      
    │  │face_landmark_68_model-weights_m
    │  │face_landmark_68_tiny_model-shar
    │  │face_landmark_68_tiny_model-weig
    │  │face_recognition_model-shard1
    │  │face_recognition_model-shard2
    │  │face_recognition_model-weights_manifest.json
    │  │mtcnn_model-shard1
    │  │mtcnn_model-weights_manifest.json
    │  │ssd_mobilenetv1_model-shard1
    │  │ssd_mobilenetv1_model-shard2
    │  │ssd_mobilenetv1_model-weights_
    │  │tiny_face_detector_model-shard1
    │  │tiny_face_detector_model-weights_
    │index.html
    │fun.js
    │faceapi.min.js

二、环境

window10 ➕vscode➕浏览器

三、具体实现

1️⃣index.html

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./faceapi.min.js"></script>
    <style>
        body {
            margin: 0;
            padding: 0;
            width: 100%;
            height: 100%;
            display: flex;
            justify-content: center;
            align-items: center;
        }

        canvas {
            position: absolute;

        }
    </style>
</head>

<body>
    <video id="video" width="720" height="560" autoplay muted></video>
    <script src="./faceapi.min.js"></script>
    <script src="./fun.js"></script>
</body>

</html>

2️⃣fun.js

代码如下(示例):

代码语言:javascript
复制
const video = document.getElementById("video");

const startVideo = () => {
    navigator.getUserMedia = navigator.getUserMedia = (navigator.getUserMedia ||
        navigator.webkitGetUserMedia ||
        navigator.mozGetUserMedia ||
        navigator.msGetUserMedia);
    navigator.getUserMedia(
        { video: {} },
        (stream) => (video.srcObject = stream),
        (err) => console.log(err)
    );
};

// startVideo();

//console.log(faceapi.nets)
// ageGenderNet
// faceExpressionNet
// faceLandmark68Net
// faceLandmark68TinyNet
// faceRecognitionNet
// ssdMobilenetv1
// tinyFaceDetector
// tinyYolov2

//加载训练好的模型(weight,bias)
// ageGenderNet 识别性别和年龄
// faceExpressionNet 识别表情,开心,沮丧,普通
// faceLandmark68Net 识别脸部特征用于mobilenet算法
// faceLandmark68TinyNet 识别脸部特征用于tiny算法
// faceRecognitionNet 识别人脸
// ssdMobilenetv1 google开源AI算法除库包含分类和线性回归
// tinyFaceDetector 比Google的mobilenet更轻量级,速度更快一点
// mtcnn  多任务CNN算法,一开浏览器就卡死
// tinyYolov2 识别身体轮廓的算法,不知道怎么用

// faceapi.nets.tinyFaceDetector.loadFromUri('http://www.battlesoldier.top/resource/faceApi/weights'),
// faceapi.nets.faceLandmark68Net.loadFromUri('http://www.battlesoldier.top/resource/faceApi/weights'),
// faceapi.nets.faceRecognitionNet.loadFromUri('http://www.battlesoldier.top/resource/faceApi/weights'),
// faceapi.nets.faceExpressionNet.loadFromUri('http://www.battlesoldier.top/resource/faceApi/weights'),
Promise.all([
    faceapi.nets.tinyFaceDetector.loadFromUri('./models'),
    faceapi.nets.faceLandmark68Net.loadFromUri('./models'),
    faceapi.nets.faceRecognitionNet.loadFromUri('./models'),
    faceapi.nets.faceExpressionNet.loadFromUri('./models'),

]).then(startVideo());

video.addEventListener('play', () => {
    // 制作定位 canvas
    const canvas = document.createElement('canvas');
    canvas.style.position = 'absolute';
    document.body.append(canvas);

    // 配置显示尺寸
    const displaySize = { width: video.width, height: video.height };
    faceapi.matchDimensions(canvas, displaySize);

    // 每 100ms 去绘制
    setInterval(async () => {
        // 识别位置, 脸部特征, 表情
        const detections = await faceapi
            .detectAllFaces(video, new faceapi.TinyFaceDetectorOptions())
            .withFaceLandmarks()
            .withFaceExpressions();

        // 调整尺寸
        const resizedDetections = faceapi.resizeResults(detections, displaySize);

        canvas.getContext('2d')?.clearRect(0, 0, canvas.width, canvas.height); // 清空画布
        faceapi.draw.drawDetections(canvas, resizedDetections); // 位置
        faceapi.draw.drawFaceLandmarks(canvas, resizedDetections); // 脸部特征  
        faceapi.draw.drawFaceExpressions(canvas, resizedDetections); // 表情
    }, 100);
});

3️⃣faceapi.min.js

faceapi.min.js👉GitHub下载地址

4️⃣models

models👉GitHub下载地址 🧨注意:全部下载🧨

四、效果图

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

五、在线体验

👉点击AI情绪识别在线体验 如果手机识别,建议横屏,电脑可直接打开

总结✨✨

🎨建议按照项目架构,否则无法调用面部识别模型!

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 前言
  • 一、项目架构
  • 二、环境
  • 三、具体实现
    • 1️⃣index.html
      • 2️⃣fun.js
        • 3️⃣faceapi.min.js
          • 4️⃣models
          • 四、效果图
          • 五、在线体验
          • 总结✨✨
          相关产品与服务
          人脸识别
          腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档