基于opencv实现人脸识别及签到系统

2023-11-09

      首先需要安装opencv、dlib、face_recongnition库,opencv安装起来比较简单,其他两个库的安装请看关于face_recognition的安装最简单方式_时间和我都在往前走的博客-CSDN博客

        这里代码可以直接用,不过路径得自己改,运行时按Ctrl+s先将要进行识别的人脸信息以人名—+扩展名保存在name里面,后续再运行一次,就会出现识别出来的人物姓名,按Esc退出程序,在csv里面就会出现签到信息。

         当然这个只是实现了初步,比如说可以直接拿照片蒙混过关进行签到,或者戴个口罩就不行识别出来,所以有什么办法改进大家可以一起交流呀

import cv2
import face_recognition
import numpy as np
from PIL import Image,ImageDraw,ImageFont
import os
import datetime
Images = []#存储人脸数据集中的图像
Names = []#存储人脸数据中图像对应的人名
def ChineseText(img,text,position,textColor=(0,255,0),textSize=18):
    #判断是否是opencv图片类型
    if(isinstance(img,np.ndarray)):
        img = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))
    #创建一个绘画对象
    draw = ImageDraw.Draw(img)
    #文字字体等属性设置
    fontStyle = ImageFont.truetype('simsun.ttc',textSize,encoding ='utf-8')
    #画文字
    draw.text(position,text,textColor,font =fontStyle)
    return cv2.cvtColor(np.asarray(img),cv2.COLOR_RGB2BGR)#rgb转化为bgr
#获取人脸的图像文件
def get_data():
    path = "name"  #文件路径
    fileList = os.listdir(path)
    print(fileList)
    for file in fileList:
        curImg = cv2.imdecode(np.fromfile(f'{path}/{file}',dtype=np.uint8),-1)
        Images.append(curImg)
        Names.append(os.path.splitext(file)[0])#分离文件名,取前面的名称,去掉扩展名
    print(Names)
#获取人脸编码信息
def imgEncoding(Images):
    encodeList = []#存储人脸的编码信息
    for img in Images:
        img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
        encode = face_recognition.face_encodings(img)[0]
        encodeList.append(encode)
    return encodeList

def saveInfo(name):
    with open('save.csv','r+') as f:
        myInfo = f.readlines()#读取
        nameList = []
        for line in myInfo:
            enty = line.split(',')
            nameList.append(enty[0])
        if name not in nameList:
            now = datetime.datetime.now()#获取时间信息
            dtString = now.strftime('%H:%M:%S')#设置时间格式
            f.writelines((f'\n{name},{dtString}'))#按行写入到csv文件中

#人脸识别签到
get_data()#先获取到人脸文件
encodeList = imgEncoding(Images)#再获取人脸集中的脸部编码
test = cv2.imread('image/qiwei.jpg')#用测试图进行测试
# test = cv2.cvtColor(test,cv2.COLOR_BGR2RGB)
cap = cv2.VideoCapture(0)
while True:
    success,img = cap.read()
    if success:
        test = img
    testLoc = face_recognition.face_locations(test)
    testEcode = face_recognition.face_encodings(test)
    #遍历摄像头中编好码的图像和人脸位置
    for face,faceLoc in zip(testEcode,testLoc):
        matches = face_recognition.compare_faces(encodeList,face,0.5)
        faceDis = face_recognition.face_distance(encodeList,face)
        #找到距离最小的下标
        matchIdex = np.argmin(faceDis)
        if matches[matchIdex]: #如果最小距离的比配结果为真
            name = Names[matchIdex]
            #找人脸位置四个角点的坐标
            y1,x2,y2,x1 = faceLoc
            cv2.rectangle(test,(x1,y1),(x2,y2),(255,0,0),2)
            cv2.rectangle(test,(x1,y1-30),(x2,y1),(255,0,0),cv2.FILLED)#将识别到的名字写到实心矩形
            img = ChineseText(test,name,(x1+6,y1-25),(255,255,255),30)
            #调用签到函数
            saveInfo(name)
    cv2.imshow("image",img)
    if cv2.waitKey(1) & 0xff ==27:
        break
cap.release()
cv2.destroyAllWindows()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于opencv实现人脸识别及签到系统 的相关文章

随机推荐

  • Linux安装Kafka

    相关链接 http kafka apache org downloads 1 使用Docker安装zookeeper 下载镜像 docker pull zookeeper 3 4 14 创建容器 docker run name zookee
  • python获取当前时间时分秒_python获取当前时间的用法

    1 先导入库 import datetime 2 获取当前日期和时间 now time datetime datetime now 3 格式化成我们想要的日期 strftime 比如 2016 09 21 datetime datetime
  • Qt对象树和QObject的构建/销毁顺序

    文章目录 Qt使用对象树组织QObject QObject的构建 销毁顺序 1 在堆上创建 使用new创建 2 在栈上创建 Qt使用对象树组织QObject 当以一个对象作为父对象创建QObject时 这个对象就会被添加到父对象的child
  • BERT: Pre-training of Deep Bidirectional Transformers forLanguage Understanding

    参考 BERT原文 1810 04805 BERT Pre training of Deep Bidirectional Transformers for Language Understanding arxiv org 强推 李宏毅202
  • 办公网络问题解决

    1 有关办公网络PC机接入OA网络排查技巧 2 熟练运用 show mac address table show ip arp show arp 能解决80 的办公网络问题 3 arp表项记录了IP MAC 地址的对应关系 4 检查主机是否
  • matlab的narx的使用,matlab NARX做时间序列预测的问题

    NARX 神经网络做一个时间序列预测的时候碰到一些问题 1 目标 用input 178 2 预测output 178 1 数据和程序附后 2 问题 1 训练不多几次就会出现的时候 Maximum MU reached 从而训练停止 这个该如
  • (二)【平衡小车制作】电机驱动(超详解)

    一 硬件设计 1 直流减速电机 直流减速电机 即齿轮减速电机 是在普通直流电机的基础上 加上配套齿轮减速箱 齿轮减速箱的作用是 提供较低的转速 较大的力矩 简单的来说 STM32分配两个IO口给一个直流减速电机 并给予高低电平 来使得电机进
  • Qt容器(QMap/QHash 等)使用详解

    一 Qt容器的遍历器 Qt 的容器类提供了两种风格的遍历器 Java 风格和 STL 风格 每一种容器都有两种 Java 风格的遍历器 一种提供只读访问 一种提供读写访问 容器 只读遍历器 读写遍历器 QList
  • centOS 7下无法启动网卡(systemctl start network)错误解决办法

    遇到的问题 某天虚拟机无法连接ssh 检查发现虚拟机无法上网 执行systemctl start network报错 问题原因 NetworkManager与network冲突 因此停掉前一个服务即可启动network 解决方法 执行以下命
  • matlab 循环保存图片 命名不重复(转载合集仅供学习参考)

    参考一 https blog csdn net jzwong article details 51720859 ABstrategy codes snippets optimize v4 for i 1 n tmp img 1 1 i fi
  • dell计算机运行慢怎么解决方法,戴尔笔记本电脑运行速度慢怎么办?

    戴尔笔记本电脑运行速度慢怎么办 戴尔 Dell 是一家总部位于美国德克萨斯州朗德罗克的世界五百强企业 由迈克尔 戴尔于1984年创立 戴尔以生产 设计 销售家用以及办公室电脑而闻名 不过它同时也涉足高端电脑市场 生产与销售服务器 数据储存设
  • testlink用例转换导入

    testlink用例转换导入 我们在用testlink进行用例管理的时候 发现用例不能用excel进入导入 只支持xml文件格式的导入 这对我们写用例来说是不太方便的 我自己开发了一个testlink的excel用例转xml文件的小工具 便
  • c# 序列化和反序列化

    using System using System Text using System Runtime Serialization using System Runtime Serialization Json using System I
  • Spring Security 跳过登录检查/非页面登录/骗过spring security的 filter 登录检查拦截

    背景 最近在使用Spring security 做一个系统的SSO认证代理 另一个项目组开发的 基于 filter 拦截器检查session中是否已有用户登录信息 如果已在SSO登录的话 则直接跳过SSO的认证 由于Spring secur
  • webpack loader和plugin编写

    1 基础回顾 首先我们先回顾一下webpack常见配置 因为后面会用到 所以简单介绍一下 1 1 webpack常见配置 入口文件 entry app src js index js 输出文件 output filename name bu
  • msvcp140.dll是什么?怎么解决电脑提示msvcp140.dll丢失的问题?(分享解决方法)

    msvcp140 dll是动态链接库文件 是一种不可执行的二进制程序文件 允许程序共享执行特殊任务所需要的代码和其他资源 程序可根据DLL文件中的指令打开 启用 查询 禁用和关闭驱动程序 很多小伙伴在使用电脑软件的时候 有一些问题会搞不明白
  • crontab中执行多条命令

    在使用crontab中执行相关命令的时候存在如下情况 可能需要先更换工作目录然后再执行相关命令 可以在crontab中按照如下格式添加定时任务 00 cd opt task python application py 通过 连接符来执行多条
  • 记录错误 pom文件中<project标签报红

    1 找到本地仓库删除刚刚下载的对应依赖 pom中删除再撤销 若红线依然存在 试试第二步 一般鼠标移到红线上都会有提示 有可能是没有版本号导致的 然后看看是哪一个依赖错了 去本地仓库删了 再重新下载 2 将自己seeting文件中的阿里云镜像
  • WebGL入门前三节(附源码和学习建议)

    在正式进入webgl之前 我想有必要简单了解一下渲染管线 毕竟它贯穿webgl学习的整个过程 渲染管线流程图 除此之外 需简单了解一下webgl着色器简单语法 向量与矩阵 常见内置变量 常见数据类型 常见修饰符 vec3 gl PointS
  • 基于opencv实现人脸识别及签到系统

    首先需要安装opencv dlib face recongnition库 opencv安装起来比较简单 其他两个库的安装请看关于face recognition的安装最简单方式 时间和我都在往前走的博客 CSDN博客 这里代码可以直接用 不