广告
返回顶部
首页 > 资讯 > 后端开发 > Python >基于Python实现人脸识别和焦点人物检测功能
  • 176
分享到

基于Python实现人脸识别和焦点人物检测功能

2024-04-02 19:04:59 176人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

写在前面的话 基于dlib库的模型,实现人脸识别和焦点人物的检测。最后呈现的效果为焦点人物的识别框颜色与其他人物框不一样。 准备工作 需要安装好python环境,安装好dlib、O

写在前面的话

基于dlib库的模型,实现人脸识别和焦点人物的检测。最后呈现的效果为焦点人物的识别框颜色与其他人物框不一样。

准备工作

需要安装好python环境,安装好dlib、OpenCV-Python库等,具体可以看报错信息(可以使用PyCharm来运行和编辑py文件),然后把需要的库补全,文章最后会有完整代码,但是需要与shape_predictor_68_face_landmarks.dat模型文件同处一个路径下,然后启用。(百度可以下载到)

设计过程

  • 因为是在自己电脑完成的必做题设计,所以前期还经历了相应的Python安装与环境配置,相应的资源库安装,例如dlib、opencv-python等等。
  • 然后运行综合了(68个人脸特征点检测模型完成静止图像的人脸检测与标注)和(完成实时摄制视频的人脸检测与定位)的参考文件opencv_WEBcam_face_detection.py,发现可以实现实时视频的人脸检测。
  • 对参考文件的代码进行分析,理解每一句代码的意思。对比查找设计需要的功能模块,实现1280x720视频输出,实现类win10相机的焦点人物识别。
  • 上网查找并学习相应资料,参考win10相机的算法,创建自己的基于距离与面积的焦点人物算法,根据自己的需要对源代码进行添加及修改。
  • 最后对代码进行测试,且不断修改成最适合的版本。

Python程序

流程图

流程图

焦点人物算法

内在逻辑:模仿win10相机,当有多于1个人时,优先选择最居中的为焦点人物,但若在其他地方的人脸面积大于4倍中心的人脸面积,则选择其他地方的作为焦点人物。

实际代码


import dlib
import cv2
import math

# 摄像头参数设置
cam = cv2.VideoCapture(0)  # 参数0,调用计算机的摄像头
cam.set(3, 1280)  # 参数3,设定宽度分辨为1280
cam.set(4, 720)  # 参数4,设定高度分辨为720

# 设定人脸框的边框颜色及宽度,便于分辨焦点人物
color_focus = (255, 0, 255)  # 设定焦点人脸框的颜色,紫红色
color_other = (255, 255, 255)  # 设定其余人脸框的颜色,白色
lineWidth_focus = 2  # 设定焦点人脸框的宽度
lineWidth_other = 1  # 设定其他人脸框的宽度

# 设定计算的一些参数
w = cam.get(3) / 2  # 设定屏幕中心的横坐标X
h = cam.get(4) / 2  # 设定屏幕中心的纵坐标Y
d_center = 10000  # 预设人脸框到屏幕中心的距离
index_center = 0  # 预设距离优先时的人脸框序号
index_area = 0  # 预设面积优先时的人脸框序号
area_center = -1  # 预设距离中心最近人脸框的面积
area = -1  # # 预设人脸框面积最大时的面积

detector = dlib.get_frontal_face_detector()  # 加载这个库自带的人脸检测器
predictor_path = "shape_predictor_68_face_landmarks.dat"  # 设置人脸预测模型的路径位置
predictor = dlib.shape_predictor(predictor_path)  # 人脸预测实例化
while True:  # 当获取到视频输入时
    ret_val, img = cam.read()  # 读取视频每一帧,颜色格式为BGR格式,
    rgb_image = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 颜色BGR格式转为RGB格式
    faces = detector(rgb_image)  # 返回RGB格式人脸捕捉框

    # 逻辑算法:当有多于1个人时,优先选择最居中的为焦点人物,但若其他地方的人脸面积大于4倍中心的人脸面积,则选择该为焦点人物。
    # 这个for循环先求出距离屏幕中心最近时的人脸框的序号和距离优先面积
    for i, det in enumerate(faces):  # 遍历所有人脸框,i是人脸框序号,det是每个人脸框
        d = math.sqrt((w-(det.left()+(det.right()-det.left())/2))**2+(h-(det.top()+(det.bottom()-det.top())/2))**2)
        # 计算该人脸框到屏幕中心的距离
        if d < d_center:  # 对比刚计算出的距离与设定的最近距离,达成选择更小
            index_center = i  # 更新距离最近时的人脸框序号
            d_center = d  # 更新最近距离
            area_center = abs((det.right() - det.left()) * (det.bottom() - det.top()))  # 算出该人脸框的面积(距离更近优先)

    # 这个for循环求出面积最大的人脸框的序号和面积优先面积
    for i, det in enumerate(faces):  # 遍历所有人脸框,i是人脸框序号,det是每个人脸框
        if abs((det.right() - det.left()) * (det.bottom() - det.top())) > area:  # 对比该人脸面积与设定的最大面积,实现选择更大
            index_area = i  # 更新面积更大时的人脸框序号
            area = abs((det.right() - det.left()) * (det.bottom() - det.top()))  # 算出该人脸框的面积(面积更大优先)

    if area > 5*area_center:  # 判断依据,若面积优先面积大于距离优先面积的5倍,就实现面积优先选择焦点人物,否则就距离优先。
        index_center = index_area   # 面积优先时,使用面积最大的人脸框序号
    for i, det in enumerate(faces):  # 遍历所有人脸框
        if i == index_center:  # 确定焦点人脸框的序号
            print(d_center, i)  # 输出焦点人物的距离中心位置,方便调试
            cv2.rectangle(img, (det.left(), det.top()), (det.right(), det.bottom()), color_focus, lineWidth_focus)
            # 绘出焦点人脸框
            shape = predictor(img, det)  # 从预测模型处,得到68个人物特征点
            for p in shape.parts():  # 遍历68个人物特征点
                cv2.circle(img, (p.x, p.y), 2, (124, 252, 0), -1)  # 设定焦点人物的68个点的形状颜色,茶绿色、实心
        else:
            cv2.rectangle(img, (det.left(), det.top()), (det.right(), det.bottom()), color_other, lineWidth_other)
            # 绘出其他人脸框
            shape = predictor(img, det)  # 从预测模型处,得到68个人物特征点
            for p in shape.parts():  # 遍历68个人物特征点
                cv2.circle(img, (p.x, p.y), 2, (255, 255, 255), -1)  # 设定其他人物的68个点的形状颜色,白色、实心
    cv2.imshow('my webcam', img)  # 输出绘好框后的帧动画
    if cv2.waiTKEy(1) == 27:  # 设置一个滞留时间,等待用户触发事件,若用户按下 ESC(ASCII码为27),则执行 if 体
        break  # (if主体)退出

cv2.destroyAllwindows()  # 销毁所有输出图像窗

运行情况

为了容易分辨焦点人物与其他人物,首先将焦点人物框的宽度设为2,颜色设为紫红色,68个识别点设为茶绿色;其他人物框的宽度设为1,颜色设为白色,68个识别点设为白色。
然后进行多次测试,通过整理测试结果,发现算法没有错误,焦点人物按照距离和面积两个因素来决定。成功运行图如下:
不展示图了,但是主人物为紫红框,其他人物为白色圈。与预期一致。

到此这篇关于基于Python的人脸识别和焦点人物检测的文章就介绍到这了,更多相关Python人脸识别和焦点人物检测内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 基于Python实现人脸识别和焦点人物检测功能

本文链接: https://www.lsjlt.com/news/154603.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基于Python实现人脸识别和焦点人物检测功能
    写在前面的话 基于dlib库的模型,实现人脸识别和焦点人物的检测。最后呈现的效果为焦点人物的识别框颜色与其他人物框不一样。 准备工作 需要安装好python环境,安装好dlib、o...
    99+
    2022-11-12
  • Java基于虹软实现人脸识别、人脸比对、活性检测等
    目录虹软一、注册虹软开发者平台二、开始使用SDK虹软 免费,高级版本试用支持在线、离线有 Java SDK,C++ SDK 一、注册虹软开发者平台 点击注册 注册完成后可在&ldq...
    99+
    2022-11-13
  • Android基于opencv4.6.0实现人脸识别功能
    前言 步骤: 整合opencv 获取相机的SurfaceView传到native层去检测(亦或是不断的获取SurfaceView的Bitmap,传到native层) 检测人脸,在本地保存人脸特征信息 4.上传至后台(不实现) 人脸识别实现的...
    99+
    2023-09-30
    android android studio opencv
  • 基于Python的人脸识别功能怎么实现
    这篇文章主要介绍“基于Python的人脸识别功能怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于Python的人脸识别功能怎么实现”文章能帮助大家解决问题。一、 人脸检测人脸检测是指从图像...
    99+
    2023-07-05
  • 基于Flask和PaddleHub怎么实现人脸检测功能
    这篇文章主要介绍“基于Flask和PaddleHub怎么实现人脸检测功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于Flask和PaddleHub怎么实现人脸检测功能”文章能帮助大家解决问题。...
    99+
    2023-07-05
  • 如何基于SpringBoot实现人脸识别功能
    目录前言需求分析一、人脸注册二、人脸登录具体实现一、人脸注册二、刷脸登录总结前言 去年在公司参与了一个某某机场建设智能机场的一个项目,人脸登机是其中的一个功能模块,当时只是写了后台的...
    99+
    2022-11-13
  • Python实现笑脸检测+人脸口罩检测功能
    目录一、人脸图像特征提取方法二、对笑脸数据集genki4k进行训练和测试(包括SVM、CNN),输出模型训练精度和测试精度(F1-score和ROC),实现检测图片笑脸和实时视频笑脸...
    99+
    2022-11-12
  • python基于Opencv实现人脸口罩检测
    一、开发环境 python 3.6.6 opencv-python 4.5.1 二、设计要求 1、使用opencv-python对人脸口罩进行检测 三、设计原理 设计流程图如图3-1...
    99+
    2022-11-12
  • Python怎么实现人脸识别微笑检测
    这篇文章主要介绍“Python怎么实现人脸识别微笑检测”,在日常操作中,相信很多人在Python怎么实现人脸识别微笑检测问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python怎么实现人脸识别微笑检测”的疑...
    99+
    2023-06-21
  • Python+MediaPipe实现检测人脸功能详解
    目录MediaPipe概述人脸检测MediaPipe概述 谷歌开源MediaPipe于2019年6月首次推出。它的目标是通过提供一些集成的计算机视觉和机器学习功能,使我们的生活变得轻...
    99+
    2022-11-13
  • Python中基于Opencv怎么实现人脸识别
    这篇文章主要讲解了“Python中基于Opencv怎么实现人脸识别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中基于Opencv怎么实现人脸识别”吧!检测人脸。这应该是最基本的...
    99+
    2023-06-02
  • 基于python3+OpenCV实现人脸和眼睛识别
    基于python3+OpenCV的人脸和眼睛识别,供大家参考,具体内容如下 一、OpenCV人脸检测的xml文件下载 人脸检测和眼睛检测要用到haarcascade_eye.xml和...
    99+
    2022-11-12
  • 怎么用Python+MediaPipe实现检测人脸功能
    这篇文章主要介绍“怎么用Python+MediaPipe实现检测人脸功能”,在日常操作中,相信很多人在怎么用Python+MediaPipe实现检测人脸功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用...
    99+
    2023-06-29
  • 基于Python实现简单的人脸识别系统
    目录前言基本原理代码实现创建虚拟环境安装必要的库前言 最近又多了不少朋友关注,先在这里谢谢大家。关注我的朋友大多数都是大学生,而且我简单看了一下,低年级的大学生居多,大多数都是为了完...
    99+
    2022-11-12
  • Python 40行代码实现人脸识别功能
    前言 很多人都认为人脸识别是一项非常难以实现的工作,看到名字就害怕,然后心怀忐忑到网上一搜,看到网上N页的教程立马就放弃了。这些人里包括曾经的我自己。其实如果如果你不是非要深究其中的原理,只是要实现这一工作...
    99+
    2022-06-04
    代码 功能 Python
  • 基于opencv和pillow实现人脸识别系统(附demo)
    目录一。人脸检测和数据收集二.训练识别器三.人脸识别和显示本文不涉及分类器、训练识别器等算法原理,仅包含对其应用(未来我也会写自己对机器学习算法原理的一些观点和了解) 首先我们需要知...
    99+
    2022-11-12
  • 基于opencv和pillow怎么实现人脸识别系统
    这篇文章主要讲解了“基于opencv和pillow怎么实现人脸识别系统”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“基于opencv和pillow怎么实现人脸识别系统”吧!本文不涉及分类器、...
    99+
    2023-06-21
  • Python基于opencv实现的人脸识别(适合初学者)
    目录一点背景知识一、人脸识别步骤 二、直接上代码(1)录入人脸.py(2)数据训练.py(3)进行识别.py三、运行过程及结果1、获取人脸照片于目标文件中2、进行数据训练,...
    99+
    2022-11-13
  • 基于OpenCV和Gradio实现简单的人脸识别详解
    目录环境配置实验原理程序设计1.上传图片2.人脸识别3.绘制方框4.保存预测结果5.最后运行gradio的lauch完整代码环境配置 gradio 安装 pip install gr...
    99+
    2023-05-14
    OpenCV Gradio实现人脸识别 OpenCV Gradio人脸识别 OpenCV Gradio
  • 基于OpenCV和Gradio怎么实现简单的人脸识别
    今天小编给大家分享一下基于OpenCV和Gradio怎么实现简单的人脸识别的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。环境...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作