【Dlib】动作检测:以常见的人脸识别验证为例讲解张嘴与闭眼

简介: 【Dlib】动作检测:以常见的人脸识别验证为例讲解张嘴与闭眼

前言

  动作检测是计算机视觉领域中的一个重要任务,它旨在识别图像或视频中的人体动作。常见的人脸识别验证是动作检测的一个应用示例。在这里我们以支付过程中经常会使用到的人脸验证为例子向大家讲解如何进行动作检测(张嘴 、 闭眼)

Dlib简介

  Dlib提供了先进的人脸检测和关键点定位功能,可以快速准确地识别图像中的人脸,并定位人脸的关键点,例如眼睛、鼻子、嘴巴等。另外Dilb库是一个优秀的开源算法库,支持在多个操作系统上进行,包括WIN  、LINUX 、 MAXOS。

shell

复制代码

import math
import dlib
import cv2
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
def draw_landmarks(src_img):
    gray = cv2.cvtColor(src_img, cv2.COLOR_BGR2GRAY)
    faces = detector(gray)
    landmarks_part = []
    for face in faces:
        landmarks = predictor(gray, face)
        # 遍历关键点,并在图像上绘制出来
        for n in range(0, 68):
            x = landmarks.part(n).x
            y = landmarks.part(n).y
            landmarks_part.append([x, y])
            # cv2.circle(src_img, (x, y), 2, (0, 255, 0), -1)
    return landmarks_part

image.png

张嘴

  在进行张嘴检测的时候,我们选择63与67这两个关键点进行检测计算人物是否张嘴,通过63与67这两个关键点之间的距离进行判定

shell

复制代码

def Mouth_open(landmarks_part):
    [up_min_mouth_x, up_min_mouth_y] = landmarks_part[62]
    cv2.circle(src_img, (up_min_mouth_x, up_min_mouth_y), 2, (0, 0, 255), -1)
    [down_min_mouth_x, down_min_mouth_y] = landmarks_part[66]
    cv2.circle(src_img, (down_min_mouth_x, down_min_mouth_y), 2, (255, 0, 0), -1)
    mouth_min = calculate_distance(up_min_mouth_x, up_min_mouth_y, down_min_mouth_x, down_min_mouth_y)
    if mouth_min > 30:
        print("张嘴了")

闭眼

  在进行闭眼检测的时候,我们选择38-39-42-41与44-45-48-47这两组关键点进行检测计算人物是否闭眼,通过计算这两组关键点距离的均值判定人物是否闭眼。

shell

复制代码

def eyes_close(landmarks_part):
    [x38, y38] = landmarks_part[37]
    cv2.circle(src_img, (x38, y38), 2, (0, 0, 255), -1)
    [x39, y39] = landmarks_part[38]
    cv2.circle(src_img, (x39, y39), 2, (0, 0, 255), -1)
    [x42, y42] = landmarks_part[41]
    cv2.circle(src_img, (x42, y42), 2, (255, 0, 0), -1)
    [x41, y41] = landmarks_part[40]
    cv2.circle(src_img, (x41, y41), 2, (255, 0, 0), -1)
    [x44, y44] = landmarks_part[43]
    cv2.circle(src_img, (x44, y44), 2, (0, 0, 255), -1)
    [x45, y45] = landmarks_part[44]
    cv2.circle(src_img, (x45, y45), 2, (0, 0, 255), -1)
    [x48, y48] = landmarks_part[47]
    cv2.circle(src_img, (x48, y48), 2, (255, 0, 0), -1)
    [x47, y47] = landmarks_part[46]
    cv2.circle(src_img, (x47, y47), 2, (255, 0, 0), -1)
    d3842 = calculate_distance(x38, y38, x42, y42)
    d3941 = calculate_distance(x39, y39, x41, y41)
    d4448 = calculate_distance(x44, y44, x48, y48)
    d4547 = calculate_distance(x45, y45, x47, y47)
    d = (d3842 + d3941 + d4448 + d4547) / 4
    if d >= 12:
        print("睁眼")
    if d <= 8:
        print("闭眼")

测试

  我们将上述的代码合并后添加一个根据两个坐标点计算举例的代码(其实仅计算Y轴上的距离即可):

shell

复制代码

def calculate_distance(p0_x, p0_y, p1_x, p1_y):
    d_x = p1_x - p0_x
    d_y = p1_y - p0_y
    # 计算两点之间的距离
    distance = math.sqrt(d_x ** 2 + d_y ** 2)
    return distance

  通过调用摄像头对视频中人物进行检测关键点,对完全检测到人脸的图像计算判断人物是否张嘴与闭眼:

shell

复制代码

if __name__ == "__main__":
    cap = cv2.VideoCapture(0)
    while cap.isOpened():
        success, src_img = cap.read()
        if not success:
            print("Ignoring empty camera frame.")
            continue
        else:
            landmarks_part = draw_landmarks(src_img)
            if len(landmarks_part) == 68:
                eyes_close(landmarks_part)
                Mouth_open(landmarks_part)
            cv2.imshow("src_img", src_img)
            cv2.waitKey(1)

结语

  周一,忙完工作后赶紧更文一篇,仅以此篇以飨读者!希望大家能够对支付验证过程中的人脸动作检测有一个初步的认识,不迷茫。


相关文章
|
6月前
|
JavaScript 计算机视觉
纯js实现人脸识别眨眨眼张张嘴案例——ccv.js
纯js实现人脸识别眨眨眼张张嘴案例——ccv.js
|
6月前
|
JavaScript 前端开发 Java
纯前端JS实现人脸识别眨眨眼张张嘴案例
纯前端JS实现人脸识别眨眨眼张张嘴案例
|
6月前
|
JavaScript 计算机视觉
纯js实现人脸识别眨眨眼张张嘴案例——alive_face.js
纯js实现人脸识别眨眨眼张张嘴案例——alive_face.js
|
19天前
|
计算机视觉 Python
基于Dlib的人脸识别客户端(UI界面)
基于Dlib的人脸识别客户端(UI界面)
42 2
|
6月前
|
JSON 安全 Java
人脸识别活体检测之张张嘴和眨眨眼
人脸识别活体检测之张张嘴和眨眨眼
|
5月前
|
机器学习/深度学习 数据采集 监控
人脸识别与检测
人脸识别与检测
94 4
|
5月前
|
移动开发 文字识别 算法
视觉智能开放平台产品使用合集之人脸核身是否包含静默活体检测
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
|
5月前
|
文字识别 算法 API
视觉智能开放平台产品使用合集之活体检测通过后,从返回结果中选择哪张图片进行人脸核身
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
|
6月前
|
算法 计算机视觉 异构计算
基于肤色模型的人脸识别FPGA实现,包含tb测试文件和MATLAB辅助验证
这是一个关于肤色检测算法的摘要:使用MATLAB 2022a和Vivado 2019.2进行测试和仿真,涉及图像预处理、RGB到YCbCr转换、肤色模型(基于阈值或概率)以及人脸检测。核心程序展示了如何读取图像数据并输入到FPGA处理,通过`tops`模块进行中值滤波、颜色空间转换及人脸检测,最终结果输出到&quot;face.txt&quot;。
|
5月前
|
机器学习/深度学习 监控 固态存储
人脸识别与检测
人脸识别与检测
51 0