npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

ft-face-detection

v1.4.6

Published

fooltech face detection framework

Downloads

1

Readme

ft-face-detection 人脸检测插件

一款基于faceapi.js开发的人脸检测插件,可实现摄像头人脸跟踪,人脸位置检测,人脸数量检测等功能。

v.1.3.5版本开始新增faceDetectionDialog人脸识别vue组件,兼容vue2.0和vue3.0,见下图。 vue人脸识别组件

安装

# 从公司私库拉取安装插件
cnpm install ft-face-detection --registry=http://192.168.0.200:4873

例子

查看项目目录下/examples里面的例子,在该目录下使用下面命令运行例子

cnpm install
# 启动例子
node server

快速开始

html引入调用方式

<script src="ft-face.umd.js"></script>
...
<body>
    <div class="box" style="position: relative;width:640px;height:480px;">
        <video autoplay id="video"></video>
        <canvas id="mycanvas" style="width:100%;height:100%;position: absolute;top:0;left:0;" />
    </div>
    <div id="tips"></div>
    <div id="position"></div>
</body>

js部分

/* umd */
const init = async function(){
    const canvas = $('#mycanvas')[0]
    const fc = window.faceDetection.default
    await fc.init({
        /* 节流时间间隔设定,默认300 */
        throttle:300,
        /* withFaceLandmarks为true时才能检测角度和显示landmarks,singleFaceTracking的checkAngel参数,但必须设置faceLandmarkModelPath路径加载对应的model文件 */
        withFaceLandmarks:true,
        /* performance会使用体积较小的model文件,以达到性能更好的效果 */
        performance:false,
        inputSize:128,
        modelPath:'/',
        faceLandmarkModelPath:'/',
        canvas
    })
    const videoEl = $('#video')[0]
    const stream = await navigator.mediaDevices.getUserMedia({
        audio: false,
        video: {
            /* 前置镜头 */
            facingMode: 'user',
            frameRate: { ideal: 30, max: 60 },
            /* 如果手机摄像头没有返回更高的像素,需要设置一下,前提是摄像头能达到设置的像素 */
            width:1280, height:960
        }
    })
    videoEl.srcObject = stream
    fc.on('singleFaceTracking',(data)=>{
        $('#tips').text(data.msg)
        if(data.face){
            const box = data.face.box
            console.log(data)
            $('#position').html(`
            ${data.face.score?'<div>质量分数:'+data.face.score+'</div>':''}
            <div>视频流分辨率:${data.face.imageDims.width}*${data.face.imageDims.height}</div>
            <div>width:${box.width}</div>
            <div>height:${box.height}</div>
            <div>top:${box.top}</div>
            <div>left:${box.left}</div>
            <div>right:${box.right}</div>
            <div>bottom:${box.bottom}</div>
            <div>x:${box.x}</div>
            <div>y:${box.y}</div>
            <div>time:${data.time}</div>
            `)
        }
        if(data.ok){
            fc.close('singleFaceTracking')
            /* 成功后获取质量较高的截图 */
            if($('#img').length){
                $('#img')[0].src = data.image;
            }else{
                var img = document.createElement("img");
                img.id = 'img'
                img.src = data.image;
                document.body.append(img)
            }
        }
    }).singleFaceTracking(videoEl,{
            drawType:'box',
            checkAngel:true
    })
}
window.onload = ()=>{
    init()
}

ESM环境下的vue组件内引入

<template>
<div style="width:100%;height:100%;">
    <div class="box" style="position: relative;width:640px;height:480px;">
        <video autoplay ref="video"></video>
        <canvas ref="mycanvas" style="width:100%;height:100%;position: absolute;top:0;left:0;" />
    </div>
    <div id="tips">{{tips}}</div>
</div>
</template>
import faceDetection from 'ft-face-detection'
export default {
    data:{
        tips:''
    },
    mounted(){
        const canvas = this.$refs.mycanvas
        await fc.init({
            /* 节流时间间隔设定,节流时间短一些,可以尽量避免检测出模糊图片 */
            throttle:300,
            withFaceLandmarks:true,
            performance:false,
            inputSize:128,
            modelPath:'/',
            faceLandmarkModelPath:'/',
            canvas
        })
        const videoEl = this.$refs.video
        const stream = await navigator.mediaDevices.getUserMedia({
            audio: false,
            video:true
        })
        videoEl.srcObject = stream
        fc.on('singleFaceTracking',(data)=>{
            this.tips = data.msg
            if(data.ok){
                fc.close('singleFaceTracking')
            }
        }).singleFaceTracking(videoEl,{
            drawType:'box',
            checkAngel:true,
            /* 是否检测亮度 */
            checkBrightness:true
        })
    }
}

API

方法

| 方法名 | 说明 | 参数 | |-----|-----|-----| | init | 初始化插件 | InitOption | | singleFaceTracking | 对图片或视频进行单个人脸识别跟踪,每次跟踪触发singleFaceTracking事件 | HTMLImageElement或HTMLVideoElement, SingleOpt(见下表) | | extractFaces | 提取图片中的人脸 | HTMLImageElement | | detectToImage | 截取当前视频对象的当前帧的图像 | HTMLVideoElement | | on | 监听事件 | event, callback(TrackingData)回调方法 | | close | 关闭检测方法,如close('singleFaceTracking') | name方法名,会同时关闭on的监听事件 |

InitOption属性

| 属性 | 描述 | 是否必填 | 类型 |默认值| |-----|-----|-----|-----|-----| | minConfidence | 信心最小阈值,值越大准确率越高,但检测会更难 | 否 | number | 0.6 | | withFaceLandmarks | 是否获取人脸外框的位置信息,必须配置faceLandmarkModelPath路径 | 否 | boolean | false | | performance | 是否设置为性能模式,如果设为false,使用ssd_mobilenetv1算法,准确率高,但速度稍慢,并且加载模型较大;true的时候,使用tiny_face_detector算法,速度快,模型体积小,但准确率稍低 | 否 | booleab | true | | inputSize | performance为true时生效,图像处理的大小,越小越快 | 否 | number | 416 | | maxResults | performance为false时生效,识别的人脸数的最大值 | 否 | number | 20 | | modelPath | 人脸识别基础模型文件的所在目录,需放在可访问资源的文件夹内 | 否 | string | - | | faceLandmarkModelPath | 人脸识别外框标识模型文件所在目录,需放在可访问资源的文件夹内 | 否 | string | - | | canvas | canvas的html对象,需要描绘人脸识别外框时必填 | 否 | HTMLCanvasElement | - | | throttle | 对视频进行单个人脸识别跟踪时的节流时间配置,单位毫秒,建议设置100-500之间 | 否 | number | 300 |

SingleOpt属性

| 属性 | 描述 | 是否必填 | 类型 |默认值| |-----|-----|-----|-----|-----| | checkAngel | 需InitOption.withFaceLandmarks为true才生效,是否检测侧脸 | 否 | boolean | false | | checkBrightness | 是否检测人脸的亮度,曝光过度和不足都会提示检测失败 | 否 | boolean | false | | drawType | 需传入InitOption.canvas,并且InitOption.withFaceLandmarks为true才生效,备选值box,landmark,box画脸部矩形,landmark画脸部轮廓 | 否 | string | undefined | | minfaceWidthRatio | 人脸检测人脸宽度相对摄像头画面的宽度最小比例,目的是为了引导用户以适当的距离进行人脸检测,不建议改动 | 否 | number | 0.4 | | maxfaceWidthRatio | 人脸检测人脸宽度相对摄像头画面的宽度最大比例,目的是为了引导用户以适当的距离进行人脸检测,不建议改动 | 否 | number | 0.8 |

TrackingData格式

| 属性 | 说明 | 类型 | |-----|-----|-----| | msg | 提示说明 | string | | ok | 是否成功检测人脸 | boolean | | code | 状态码,具体查看下表 | string | | face | face数据对象 | object | | time | 检测所用的时间 | number |

状态码说明

| 状态码 | 对应提示 | |-----|-----| | DISTANCE_FAR | 人脸离摄像头太远,请靠近摄像头。 | | DISTANCE_NEARLY | 人脸离摄像头太近,请稍微远离摄像头。 | | TO_LEFT | 人脸不在画面中央,请稍微往左边靠近。 | | TO_RIGHT | 人脸不在画面中央,请稍微往右边靠近。 | | TO_TOP | 人脸不在画面中央,请稍微往上方靠近。 | | TO_BOTTOM | 人脸不在画面中央,请稍微往下方靠近。 | | TOOMORE_LEFTFACE | 请不要侧脸。 | | TOOMORE_RIGHTFACE | 请不要侧脸。 | | NO_FACE | 未检测到人脸,请把人脸对准摄像头。 | | SUCCESS | 成功检测到人脸。 | | DONT_MOVE | 正在识别,请保持不动。 | | DONT_SHAKE | 请不要摇晃。 | | NOT_HORIZONTAL | 请正对屏幕。 | | IS_LIGHT | 过度曝光,请移步到光线正常的地方检测。 | | IS_DARK | 光线不足,请移步到光线正常的地方检测。 | | IS_UNUSUAL | 光线异常,请移步到光线正常的地方检测。 |

可通过以下方法修改默认提示

faceDetection.setStatusTips({
    DISTANCE_FAR:'xxxxxxxxxxxxxxxx'
})

v.1.3.5版本新增了vue组件 faceDetectionDialog (兼容Vue2.0和3.0)

如何使用

<template>
    <!-- 与js调用方式一样,如果需要检测角度,faceLandmarkModelPath必填 -->
    <!-- vue3参数必须用kebab-case(短横线隔开式)写法 -->
    <face-detection-dialog
        ref="faceDet"
        check-angel 
        check-brightness
        faceLandmarkModelPath="/"
        modelPath="/"
        @callback="callback"
        @initialized="initialized"
    >
    </face-detection-dialog>
</template>
# 使用以下的方法一时,需要前置库 vue(必须)、node-fetch(必须),@vue/composition-api(vue是2.0版本时必须)
npm install node-fetch --save
/* 以vue2.0为例 */
import './vue-composition-api.js'
Vue.use(VueCompositionAPI)
/* 非esm环境引用faceDetectionDialog组件需要自行引入vue-demi,可在examples内拉取 */
import '/vue-demi.iife.js'
/**
 * 方法一,es方式引入
 */
// npm引入ft-face-detection库
import { faceDetectionDialog } from 'ft-face-detection'
// 或者直接引入es文件
import { faceDetectionDialog } from 'ft-face.es.js'

/**
 * 方法一,全局引入,通常是非esm环境使用
 */
import 'ft-face.umd.js'
/* 等同于使用 <script type="text/javascript" src="ft-face.umd.js"></script> */
const faceDetectionDialog = faceDetection.faceDetectionDialog


/* 引入css */
import 'ft-face-detection/faceDetection.css'

export default {
    components:{
        faceDetectionDialog
    },
    data:{
        tips:''
    },
    methods:{
        open(){
            /* 打开人脸检测窗口 v1.4.1+支持 */
            this.$refs.faceDet.open()
        },
        /* 回调的参数的格式是TrackingData */
        callback(data){
            console.log(data)
            ...
            /* 完成检测后关闭人脸检测窗口 v1.4.1+支持 */
            this.$refs.faceDet.close()
        },
        /* 初始化完成 */
        initialized(){
            // 初始化完成前可以使用加载中遮罩,完成后去掉
        }
    }
}

组件参数

| 属性 | 说明 | 是否必填 | 类型 | 默认值 | |-----|-----|-----|-----|-----| | modelPath | 同InitOption.modelPath,人脸识别基础模型文件的所在目录,需放在可访问资源的文件夹内 | 否 | string | / | | faceLandmarkModelPath | 同InitOption.faceLandmarkModelPath,人脸识别外框标识模型文件所在目录,需放在可访问资源的文件夹内 | 否 | string | / | | checkAngel | 同SingleOpt.checkAngel,需faceLandmarkModelPath加载路径正确才生效,是否检测侧脸 | 否 | boolean | false | | checkBrightness | 同SingleOpt.checkBrightness,是否检测人脸的亮度,曝光过度和不足都会提示检测失败 | 否 | boolean | false |

组件实例方法

function start()
  • 初始化完成后可调用,开始检测人脸
function restart()
  • 完成初次检测后可调用,重新开始检测人脸
function setTips(opt)
  • 同faceDetection.setStatusTips
function dispose()
  • 销毁视频流、音频流

组件事件

  • callback(result:TrackingData) 检测完成事件,返回检测结果,数据结构见TrackingData

  • initialized() 检测组件初始化完成后的回调事件