精华内容
下载资源
问答
  • 人脸识别考勤系统+python毕业设计
    2022-01-10 20:34:38

    人脸识别考勤系统+python毕业设计

    更多相关内容
  • Python基于人脸识别的智能考勤系统源代码,采用Pyqt5+MySQL+Opencv,
  • 食用方法可以参考我写的博客:https://blog.csdn.net/weixin_43486940/article/details/117226253 python搭建的一个基于PyQt5的人脸识别考勤系统
  • 基于python人脸识别考勤系统(语音播报)

    千次阅读 热门讨论 2019-07-18 22:32:44
    介绍: 本项目是大二寒假在家没事写的,一直没有时间讲本项目分享出来,现在有时间了哈。那就让我简单的将项目...进行人脸签到: 在签到完成之后,系统会普配到使用者的姓名,同时将会以语音播报的方式将信息播报...
    • 介绍:
      本项目是大二寒假在家没事写的,一直没有时间讲本项目分享出来,现在有时间了哈。那就让我简单的将项目介绍一下吧。好了废话不多说了,直接上图

    • 初始化界面:
      在这里插入图片描述
      可以看到所有的功能都展现在了左边的功能栏中了

    • 点击信息录入
      在这里插入图片描述
      在此处填写完必要的个人信息之后,系统会对使用者的面部进行特征提取。

    • 进行人脸签到:
      在这里插入图片描述
      在签到完成之后,系统会普配到使用者的姓名,同时将会以语音播报的方式将信息播报出来,以是提示使用者签到已完成了

    • 签到信息的可视化
      在这里插入图片描述

    • 总结:简单介绍就到这里了

    • 也可以通过github地址的方式获取源代码:https://github.com/huzin1/we

    申明近期笔者接计算机视觉方面的毕业设计、比赛,有需要的欢迎联系!!!

    展开全文
  • Python人脸识别考勤打卡系统

    千次阅读 多人点赞 2021-07-14 15:42:40
    Python人脸识别考勤打卡系统 如需安装运行环境或远程调试,可加QQ905733049,或QQ2945218359由专业技术人员远程协助! 运行结果如下: 主要代码: import random import cv2 import numpy import datetime ...

    Python人脸识别考勤打卡系统

    如需安装运行环境或远程调试,可加QQ905733049, 或QQ2945218359由专业技术人员远程协助!

    运行结果如下:

     主要代码:

    import random
    import cv2
    import numpy
    import datetime
    import os
    import time
    import cv2 as cv
    import numpy as np
    import threading
    from PIL import Image, ImageFont, ImageDraw
    
    database_file_path = './resources/data.db'
    picture_dir_path = "./resources/pictures"
    trainer_file_path = './resources/Trainer/trainer.yml'
    font_file_path = './resources/simsun.ttc'
    zsc_circle_file_path = './resources/zsc.jpg'
    zsc_rectangle_file_path = './resources/zsc.png'
    haarcascade_frontalface_file_path = './resources/haarcascade_frontalface_default.xml'
    capture_opt = 0  # 摄像头参数,0,1为本机摄像头
    
    # 继承wx库里面的Frame类来使用
    class MainFrame(wx.Frame):
        def __init__(self):
            # 初始化窗体数据
            wx.Frame.__init__(self, None, -1, '人脸识别考勤系统', pos=(100, 100), size=(1337, 600))
            panel = wx.Panel(self, -1)
            sizer = wx.BoxSizer(wx.HORIZONTAL)
            sizer1 = wx.BoxSizer(wx.VERTICAL)
            sizer2 = wx.BoxSizer(wx.VERTICAL)
            font = wx.Font(15, wx.ROMAN, wx.NORMAL, wx.BOLD)
    
            # 设置窗口以及托盘图标
            icon = wx.Icon()
            icon.CopyFromBitmap(wx.Bitmap(wx.Image((zsc_circle_file_path), wx.BITMAP_TYPE_JPEG)))
            self.SetIcon(icon)
    
            # 设置左边背景学院logo
            image = wx.Image(zsc_rectangle_file_path, wx.BITMAP_TYPE_PNG).ConvertToBitmap()
            self.background = wx.StaticBitmap(panel, -1, bitmap=image, style=wx.ALIGN_CENTER)
            sizer1.Add(self.background, proportion=10, flag=wx.ALIGN_CENTER, border=10)
    
            # 设置采集人脸按钮
            self.command1 = wx.Button(panel, -1, '采集人脸')
            self.command1.SetFont(font)
            self.command1.SetBackgroundColour('#3299CC')
            sizer1.Add(self.command1, proportion=5, flag=wx.ALL | wx.EXPAND, border=10)
    
            # 设置训练数据按钮
            self.command2 = wx.Button(panel, -1, '训练数据')
            self.command2.SetFont(font)
            self.command2.SetBackgroundColour('#DBDB70')
            sizer1.Add(self.command2, proportion=5, flag=wx.ALL | wx.EXPAND, border=10)
    
            # 设置人脸识别按钮
            self.command3 = wx.Button(panel, -1, '识别打卡')
            self.command3.SetFont(font)
            self.command3.SetBackgroundColour('#32CC32')
            sizer1.Add(self.command3, proportion=5, flag=wx.ALL | wx.EXPAND, border=10)
    
            # 设置退出系统按钮
            self.command4 = wx.Button(panel, -1, '关闭摄像头')
            self.command4.SetFont(font)
            self.command4.SetBackgroundColour((random.randint(1, 255), random.randint(0, 255), random.randint(0, 255)))
            sizer1.Add(self.command4, proportion=5, flag=wx.ALL | wx.EXPAND, border=10)
    
            # 设置消息提示文本
            self.text5 = wx.StaticText(panel, -1, '\n\n', style=wx.ALIGN_CENTER)
            self.text5.SetFont(font)
            self.text5.SetForegroundColour('Red')
            sizer1.Add(self.text5, proportion=15, flag=wx.ALL | wx.EXPAND, border=10)
    
            # 设置个人信息文本
            self.text6 = wx.StaticText(panel, -1, '姓名:')
            self.text7 = wx.StaticText(panel, -1, '学号:')
            self.text8 = wx.StaticText(panel, -1, '学院:')
            sizer1.Add(self.text6, proportion=3, flag=wx.LEFT, border=0)
            sizer1.Add(self.text7, proportion=3, flag=wx.LEFT, border=0)
            sizer1.Add(self.text8, proportion=3, flag=wx.LEFT, border=0)
    
            # 把分布局全部加入整体顶级布局
            sizer.Add(sizer1, flag=wx.EXPAND | wx.ALL, border=20)
    
    
            # 设置右上边消息提示文本
            sizer3 = wx.BoxSizer(wx.HORIZONTAL)
            font = wx.Font(12, wx.ROMAN, wx.NORMAL, wx.BOLD)
            self.text9 = wx.StaticText(panel, -1, '', style=wx.ALIGN_LEFT)
            self.text9.SetFont(font)
            self.text9.SetForegroundColour('brown')
            self.text9.SetLabel(u''+'您好,欢迎使用人脸考勤系统!')
    
            self.text10 = wx.StaticText(panel, -1, '', style=wx.ALIGN_RIGHT)
            self.text10.SetFont(font)
            self.text10.SetForegroundColour('Blue')
            self.data_num = 0
            self.updateSumData()
            sizer3.Add(self.text9, proportion=1, flag= wx.ALL|wx.EXPAND, border=10)
            sizer3.Add(self.text10, proportion=1, flag= wx.ALL|wx.EXPAND, border=10)
    
            sizer2.Add(sizer3, proportion=1, flag=wx.EXPAND | wx.ALL, border=0)
    
            # 封面图片
            self.image_cover = wx.Image(zsc_circle_file_path, wx.BITMAP_TYPE_ANY).Scale(575, 460)
            self.bmp = wx.StaticBitmap(panel, -1, wx.Bitmap(self.image_cover))
            sizer2.Add(self.bmp, proportion=1, flag=wx.ALL|wx.EXPAND ,border=0)
    
    
            # 加入顶级布局
            sizer.Add(sizer2, flag=wx.EXPAND | wx.ALL, border=10)
    
            # 实例化数据库操作对象
            self.mySqlDao = MySQLDao(self)
            self.grid = MyGrid(panel, self.mySqlDao)
            self.grid.updateGrid()
            # 打卡记录表
            sizer.Add(self.grid, proportion=1, flag=wx.EXPAND | wx.ALL, border=10)
    
    
            panel.SetSizer(sizer)
    
            # 四个按钮对应的事件
            self.command1.Bind(wx.EVT_BUTTON, self.command1_event)
            self.command4.Bind(wx.EVT_BUTTON, self.command4_event)
            self.command3.Bind(wx.EVT_BUTTON, self.command3_event)
            self.command2.Bind(wx.EVT_BUTTON, self.command2_event)
    
            # 关闭事件
            self.Bind(wx.EVT_CLOSE,self.onClose)
    
            # 窗口居中,显示
            self.Center()
            self.Show()
    
            # 控制摄像头的开启与关闭
            self.recognition = False
            self.collected = False
    
        '''
            主窗体关闭事件
        '''
        def onClose(self,event):
            self.command4_event(event)
            # 等待子线程完成 再关闭,防止不正常退出
            time.sleep(1)
            self.Destroy()
    
        '''
            采集数据按钮的响应事件
        '''
        def command1_event(self, event):
            self.text6.SetLabel('姓名:')
            self.text7.SetLabel('学号:')
            self.text8.SetLabel('学院:')
            self.text5.SetLabel(u'\n温馨提示:\n' + '⚪正在进学生信息录入...')
            self.text5.Update()
    
            collectFrame = CollectFrame(self,self.mySqlDao)
            collectFrame.Show()
    
        '''
            训练数据按钮的响应事件
        '''
        def command2_event(self, event):
            self.trainData()
    
        '''
            识别打卡按钮的响应事件
        '''
        def command3_event(self, event):
            self.text5.SetLabel(u'')
            self.recognition = False
            t1 = threading.Thread(target=self.recognitionFace)
            t1.start()
    
        '''
            关闭摄像头按钮的响应事件
        '''
        def command4_event(self, event):
            if self.collected == False:
                self.collected = True
            if self.recognition == False:
                self.recognition = True
    
    
    
    
        def updateSumData(self):
            self.data_num = 0
            for list in os.listdir(picture_dir_path):
                if len(os.listdir(picture_dir_path + '/' + list)) >= 200:
                    self.data_num += 1
            self.text10.SetLabel(u'当前已采集人脸数据的人数:' + str(self.data_num))
            self.text10.Update()
    
    
        '''
            @Author:Himit_ZH
            @Function:处理收集人脸每一帧生成图片存入对应文件夹
        '''
        def collect(self,face_id):
    
            self.text5.SetLabel(u'\n温馨提示:\n' + '请看向摄像头\n准备采集200张人脸图片...')
    
            count = 0  # 统计照片数量
            path = picture_dir_path+"/Stu_" + str(face_id)  # 人脸图片数据的储存路径
            # 读取视频
            cap = cv.VideoCapture(capture_opt)
            print(cap.isOpened())
            if cap.isOpened() == False:
                self.text5.SetLabel(u'\n错误提示:\n' + '×采集人脸数据失败!\n原因:未能成功打开摄像头')
                return
    
            # 加载特征数据
            face_detector = cv.CascadeClassifier(haarcascade_frontalface_file_path)
            if not os.path.exists(path):  # 如果没有对应文件夹,自动生成
                os.makedirs(path)
            while self.collected == False:
                flag, frame = cap.read()
                # print('flag:',flag,'frame.shape:',frame.shape)
                if not flag:
                    break
                # 将图片灰度
                gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
                faces = face_detector.detectMultiScale(gray, 1.1, 3)
                if len(faces) > 1:  # 一帧出现两张照片丢弃,原因:有人乱入,也有可能人脸识别出现差错
                    continue
                # 框选人脸,for循环保证一个能检测的实时动态视频流
                for x, y, w, h in faces:
                    cv.rectangle(frame, (x, y), (x + w, y + h), color=(0, 255, 0), thickness=2)
                    count += 1
                    cv.imwrite(path + '/' + str(count) + '.png', gray[y:y + h, x:x + w])
                    # # 显示图片
                    # cv.imshow('Camera', frame)
                    # 将一帧帧图片显示在UI中
                    image1 = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
                    image2 = cv2.resize(image1, (575, 460))
                    height, width = image2.shape[:2]
                    pic = wx.Bitmap.FromBuffer(width, height, image2)
                    # 显示图片在panel上
                    self.bmp.SetBitmap(pic)
                    self.bmp.Update()
    
                self.text9.SetLabel(u'温馨提示:\n' + '已采集'+ str(count)+'张人脸照片')
                if count >= 200:  #默认采集200张照片
                    break
            # 关闭资源
            if count >=200:
                self.text5.SetLabel(u'\n温馨提示:\n' + '✔已成功采集到人脸数据!')
                self.updateSumData()
            else:
                self.text5.SetLabel(u'\n错误提示:\n' + '×采集人脸数据失败!\n未能收集到200张人脸数据!')
                # 删除该文件夹下的所有数据
                ls = os.listdir(path)
                for file_path in ls:
                    f_path = os.path.join(path, file_path)
                    os.remove(f_path)
                os.rmdir(path)
    
            cv.destroyAllWindows()
            cap.release()
            self.bmp.SetBitmap(wx.Bitmap(self.image_cover))
    
        '''
            @Author:Himit_ZH
            @Function:遍历指定文件夹里面的人脸数据,根据文件夹名字,训练对应数据
        '''
        def trainData(self):
            self.text5.SetLabel(u'\n温馨提示:\n' + '⚪正在整合训练的人脸数据\n请稍后...')
            # 图片路径
            path = picture_dir_path
            facesSamples = []
            imageFiles = []
            ids = []
            for root, dirs, files in os.walk(path):
                # root 表示当前正在访问的文件夹路径
                # dirs 表示该文件夹下的子目录名list
                # files 表示该文件夹下的文件list
                # 遍历文件
                for file in files:
                    imageFiles.append(os.path.join(root, file))
            # 检测人脸的模型数据
            face_detector = cv2.CascadeClassifier(haarcascade_frontalface_file_path)
            # 遍历列表中的图片
            stu_map =  self.mySqlDao.getIdfromSql()
            for imagefile in imageFiles:  # 获得所有文件名字
                imagefile = imagefile.replace('\\', '/')
                sno = imagefile.split('/')[3].split('_')[1]
                if stu_map.get(sno):
                    PIL_img = Image.open(imagefile).convert('L')  # 打开图片并且转为灰度图片
                    # 将图像转换为数组
                    img_numpy = np.array(PIL_img, 'uint8')
                    faces = face_detector.detectMultiScale(img_numpy)
                    for x, y, w, h in faces:
                        facesSamples.append(img_numpy[y:y + h, x:x + w])
                        ids.append(int(stu_map.get(sno)))
    
    
    
    
    if __name__ == '__main__':
        app = wx.App()
        app.locale = wx.Locale(wx.LANGUAGE_CHINESE_SIMPLIFIED)
        frame = MainFrame()
        app.MainLoop()
    

     运行结果如下:

     

    Python, C++, PHP语言学习参考实例连接

    C++学习参考实例

    C++实现图形界面五子棋游戏源码:

    https://blog.csdn.net/alicema1111/article/details/90035420

    C++实现图形界面五子棋游戏源码2:

    https://blog.csdn.net/alicema1111/article/details/106479579

    C++ OpenCV相片视频人脸识别统计人数:

    https://blog.csdn.net/alicema1111/article/details/105833928

    VS2017+PCL开发环境配置:

    https://blog.csdn.net/alicema1111/article/details/106877145

    VS2017+Qt+PCL点云开发环境配置:

    https://blog.csdn.net/alicema1111/article/details/105433636

    C++ OpenCV汽车检测障碍物与测距:

    https://blog.csdn.net/alicema1111/article/details/105833449

    Windows VS2017安装配置PCL点云库:

    https://blog.csdn.net/alicema1111/article/details/105111110

    VS+VTK+Dicom(dcm)+CT影像切片窗体界面显示源码

    https://blog.csdn.net/alicema1111/article/details/106994839

    Python学习参考实例

    Python相片更换背景颜色qt窗体程序:

    https://blog.csdn.net/alicema1111/article/details/106919140

    OpenCV汽车识别检测数量统计:

    https://blog.csdn.net/alicema1111/article/details/106597260

    OpenCV视频识别检测人数跟踪统计:

    https://blog.csdn.net/alicema1111/article/details/106113042

    OpenCV米粒检测数量统计:

    https://blog.csdn.net/alicema1111/article/details/106089697

    opencv人脸识别与变形哈哈镜:

    https://blog.csdn.net/alicema1111/article/details/105833123

    OpenCV人脸检测打卡系统:

    https://blog.csdn.net/alicema1111/article/details/105315066

    Python+OpenCV摄像头人脸识别:

    https://blog.csdn.net/alicema1111/article/details/105107286

    Python+Opencv识别视频统计人数:

    https://blog.csdn.net/alicema1111/article/details/103804032

    Python+OpenCV图像人脸识别人数统计

    https://blog.csdn.net/alicema1111/article/details/105378639

    python人脸头发身体部位识别人数统计

    https://blog.csdn.net/alicema1111/article/details/116424942

    VS+QT+VTK三维网格图像显示GUI

    https://blog.csdn.net/alicema1111/article/details/117060734

    PHP网页框架

    PHP Laravel框架安装与配置后台管理前台页面显示:

    https://blog.csdn.net/alicema1111/article/details/106686523

    展开全文
  • 使用Python搭建人脸识别考勤系统

    千次阅读 2021-12-24 00:57:17
    介绍在本文中,你将学习如何使用 Python 构建人脸识别系统人脸识别比人脸检测更进一步。在人脸检测中,我们只检测人脸在图像中的位置,但在人脸识别中,我们制作了一个可以识别人的系统。“人...

    介绍

    在本文中,你将学习如何使用 Python 构建人脸识别系统。人脸识别比人脸检测更进一步。在人脸检测中,我们只检测人脸在图像中的位置,但在人脸识别中,我们制作了一个可以识别人的系统。

    “人脸识别是验证或识别图片或视频中的人的挑战。大型科技巨头仍在努力打造更快、更准确的人脸识别模型。”

    人脸识别的实际应用

    人脸识别目前正被用于让世界更安全、更智能、更方便。

    有几个用例:

    • 寻找失踪人员

    • 零售犯罪

    • 安全标识

    • 识别社交媒体上的帐户

    • 考勤系统

    • 识别汽车中的驾驶员

    根据性能和复杂性,有多种方法可以执行面部识别。

    传统人脸识别算法:

    在 1990 年代,整体方法被用于人脸识别。手工制作的局部描述符在 1920 年代初期开始流行,然后在 2000 年代后期采用局部特征学习方法。目前广泛使用并在OpenCV中实现的算法如下:

    • Eigenfaces (1991):http://www.scholarpedia.org/article/Eigenfaces

    • Local Binary Patterns Histograms (LBPH) (1996):https://en.wikipedia.org/wiki/Local_binary_patterns

    • Fisherfaces(1997):http://www.scholarpedia.org/article/Fisherfaces

    • Scale Invariant Feature Transform (SIFT) (1999):https://en.wikipedia.org/wiki/Scale-invariant_feature_transform

    • Speed Up Robust Features (SURF)(2006):https://en.wikipedia.org/wiki/Speeded_up_robust_features

    每种方法都遵循不同的方法来提取图像信息并将其与输入图像进行匹配。

    Fischer-facesEigenfaces与 SURF 和 SIFT 具有几乎相似的方法。

    LBPH 是一种简单但非常有效的方法,但与现代人脸识别器相比,速度较慢。

    与现代人脸识别算法相比,这些算法并不快。传统算法不能仅通过拍摄一个人的单张照片来训练。

    人脸识别深度学习:

    一些广泛使用的基于深度学习的人脸识别系统如下:

    • DeepFace

    • DeepID series of systems

    • VGGFace

    • FaceNet

    人脸识别器一般是在人脸图像中找出重要的点,如嘴角、眉毛、眼睛、鼻子、嘴唇等。这些点的坐标称为五官点,这样的点有66个。这样,寻找特征点的不同技术给出不同的结果。

    4fe9b61681c651777e5345ca38addc13.png

    来源:https://www.pinterest.com/mrmosherart/face-landmarks/

    人脸识别模型涉及的步骤:

    1. **人脸检测:**定位人脸并在人脸周围绘制边界框并保留边界框的坐标。

    2. **人脸对齐:**标准化人脸以与训练数据库一致。

    3. **特征提取:**提取将用于训练和识别任务的人脸特征。

    4. 人脸识别: 将人脸与准备好的数据库中的一张或多张已知人脸进行匹配。

    在传统的人脸识别方法中,我们有单独的模块来执行这 4 个步骤。在本文中,你将看到一个将这 4 个步骤组合在一个步骤中的库。

    构建人脸识别系统的步骤

    安装库

    我们需要安装 2 个库来实现人脸识别。

    dlib dlib是一个现代 C++ 工具包,包含机器学习算法和工具,用于在 C++ 中创建复杂的软件以解决实际问题。

    # installing dlib 
    pip install dlib

    脸部识别:将face_recognition库,创建和维护 Adam Geitgey(https://adamgeitgey.com/),包含了dlib人脸识别功能。

    # installing face recognition
    pip install face recognition

    Opencv 用于一些图像预处理。

    # installing opencv 
    pip install opencv

    注意:如果你在安装dlib 时遇到任何错误 **,**我建议你使用vs_code 社区版安装 C++ 开发工具包:https://visualstudio.microsoft.com/vs/community/

    导入库

    现在你已经下载了所有重要的库,让我们导入它们来构建系统。

    import cv2
    import numpy as np
    import face_recognition

    加载图像

    导入库后,你需要加载图像。

    face_recognition 库以 BGR 的形式加载图像,为了打印图像,你应该使用 OpenCV 将其转换为 RGB。

    imgelon_bgr = face_recognition.load_image_file('elon.jpg')
    imgelon_rgb = cv2.cvtColor(imgelon_bgr,cv2.COLOR_BGR2RGB)
    cv2.imshow('bgr', imgelon_bgr)
    cv2.imshow('rgb', imgelon_rgb)
    cv2.waitKey(0)

    2964eba4c5e96a84c6bdf03201445aac.png

    如你所见,RGB 看起来很自然,因此你将始终把通道更改为 RGB。

    查找人脸位置并绘制边界框

    你需要在人脸周围绘制一个边界框,以显示是否已检测到人脸。

    imgelon =face_recognition.load_image_file('elon.jpg')
    imgelon = cv2.cvtColor(imgelon,cv2.COLOR_BGR2RGB)
    #----------Finding face Location for drawing bounding boxes-------
    face = face_recognition.face_locations(imgelon_rgb)[0]
    copy = imgelon.copy()
    #-------------------Drawing the Rectangle-------------------------
    cv2.rectangle(copy, (face[3], face[0]),(face[1], face[2]), (255,0,255), 2)
    cv2.imshow('copy', copy)
    cv2.imshow('elon',imgelon)
    cv2.waitKey(0)

    e06765a7fbbc5ee5440578d2f46d3cab.png

    为人脸识别训练图像

    该库的制作方式是自动查找人脸并仅处理人脸,因此你无需从图片中裁剪人脸。

    训练:

    在这个阶段,我们将训练图像转换为一些编码,并使用该图像的人名存储编码。

    train_elon_encodings = face_recognition.face_encodings(imgelon)[0]

    测试:

    为了测试,我们加载图像并将其转换为编码,然后在训练期间将编码与存储的编码进行匹配,这种匹配基于寻找最大相似度。当你找到与测试图像匹配的编码时,你将获得与训练编码相关联的名称。

    # lets test an image
    test = face_recognition.load_image_file('elon_2.jpg')
    test = cv2.cvtColor(test, cv2.COLOR_BGR2RGB)
    test_encode = face_recognition.face_encodings(test)[0]
    print(face_recognition.compare_faces([train_encode],test_encode))

    face_recognition.compare_faces,如果两个图像中的人相同,返回True,否则返回False。

    构建人脸识别系统

    导入必要的库
    import cv2
    import face_recognition
    import os
    import numpy as np
    from datetime import datetime
    import pickle

    定义将存储训练图像数据集的文件夹路径

    path = 'student_images'

    注意:对于训练,我们只需要将训练图片放到path目录下,图片名称必须是person_name.jpg/jpeg格式。

    例如:

    正如你在我的 student_images 路径中看到的,有 6 个人。因此我们的模型只能识别这 6 个人。你可以在此目录中添加更多图片,以便更多人识别

    233ad6ffbdfd4c043ec418679a2615e9.png

    • 现在创建一个列表来存储 person_name 和图像数组。

    • 遍历path目录中存在的所有图像文件,读取图像,并将图像数组附加到图像列表,并将文件名附加到classNames。

    images = []
    classNames = []mylist = os.listdir(path)
    for cl in mylist:
        curImg = cv2.imread(f'{path}/{cl}')
        images.append(curImg)
        classNames.append(os.path.splitext(cl)[0])
    • 创建一个函数来对所有训练图像进行编码并将它们存储在一个变量encoding_face_train 中。

    def findEncodings(images):
        encodeList = []
        for img in images:
            img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
            encoded_face = face_recognition.face_encodings(img)[0]
            encodeList.append(encoded_face)
        return encodeList
    encoded_face_train = findEncodings(images)
    • 创建一个函数,该函数将创建一个Attendance.csv文件来存储考勤时间。

    注意:这里需要手动创建Attendance.csv文件并在函数中给出路径

    def markAttendance(name):
        with open('Attendance.csv','r+') as f:
            myDataList = f.readlines()
            nameList = []
            for line in myDataList:
                entry = line.split(',')
                nameList.append(entry[0])
            if name not in nameList:
                now = datetime.now()
                time = now.strftime('%I:%M:%S:%p')
                date = now.strftime('%d-%B-%Y')
                f.writelines(f'n{name}, {time}, {date}')

    **with open(“filename.csv”,'r+')创建一个文件,'r+'**模式用于打开文件进行读写。

    我们首先检查出席者的名字是否已经在attenting .csv中可用。

    如果出席者的名字在attends.csv中不可用,我们将在函数调用的时间中写入出席者的名字。

    阅读网络摄像头进行实时识别
    # take pictures from webcam 
    cap  = cv2.VideoCapture(0)while True:
        success, img = cap.read()
        imgS = cv2.resize(img, (0,0), None, 0.25,0.25)
        imgS = cv2.cvtColor(imgS, cv2.COLOR_BGR2RGB)
        faces_in_frame = face_recognition.face_locations(imgS)
        encoded_faces = face_recognition.face_encodings(imgS, faces_in_frame)for encode_face, faceloc in zip(encoded_faces,faces_in_frame):
            matches = face_recognition.compare_faces(encoded_face_train, encode_face)
            faceDist = face_recognition.face_distance(encoded_face_train, encode_face)
            matchIndex = np.argmin(faceDist)
            print(matchIndex)
            if matches[matchIndex]:
                name = classNames[matchIndex].upper().lower()
                y1,x2,y2,x1 = faceloc
                # since we scaled down by 4 times
                y1, x2,y2,x1 = y1*4,x2*4,y2*4,x1*4
                cv2.rectangle(img,(x1,y1),(x2,y2),(0,255,0),2)
                cv2.rectangle(img, (x1,y2-35),(x2,y2), (0,255,0), cv2.FILLED)
                cv2.putText(img,name, (x1+6,y2-5), cv2.FONT_HERSHEY_COMPLEX,1,(255,255,255),2)
                markAttendance(name)
        cv2.imshow('webcam', img)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    • 仅将识别部分的图像大小调整为 1/4。输出帧将是原始大小。

    • 调整大小可提高每秒帧数。

    • face_recognition.face_locations()在调整大小的图像(imgS)上被调用。对于人脸边界框坐标必须乘以 4 才能覆盖在输出帧上。

    • **face_recognition.distance()**返回测试图像的距离数组,其中包含我们训练目录中存在的所有图像。

    • 最小人脸距离的索引将是匹配的人脸。

    • 找到匹配的名称后,我们调用markAttendance函数。

    • 使用**cv2.rectangle()**绘制边界框。

    • 我们使用**cv2.putText()**将匹配的名称放在输出帧上。

    e6da78ca6cb83b43ffd079111fe1600b.gif

    考勤报告

    24935329fce5a3f534552de7a49fc51f.png

    人脸识别系统面临的挑战

    尽管构建面部识别看起来很容易,但在没有任何限制的情况下拍摄的现实世界图像中却并不容易。面部识别系统面临的几个挑战如下:

    • **照明:**它极大地改变了面部外观,观察到照明条件的轻微变化对其结果产生重大影响。

    • **姿势:**面部识别系统对姿势高度敏感,如果数据库仅在正面视图上进行训练,可能会导致识别错误或无法识别。

    • 面部表情:同一个人的不同表情是另一个需要考虑的重要因素。不过,现代识别器可以轻松处理它。

    • 低分辨率:识别器的训练必须在分辨率好的图片上进行,否则模型将无法提取特征。

    • **老化:**随着年龄的增长,人脸的形状、线条、纹理变化是另一个挑战。

    结论

    在本文中,我们讨论了如何使用face_recognition库创建人脸识别系统并制作了考勤系统。你可以使用TkinterPyqt进一步设计用于人脸识别考勤系统的GUI。

    ☆ END ☆

    如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。

    扫描二维码添加小编↓

    9673ba6ed48cd6adb2792142f4fb1ba2.png

    展开全文
  • 本论文里含有所有程序代码!只能用于借鉴学习,不可用于商业用途!版权所有,盗版必究!转载请声明原作者小小新!
  • 基于window的人脸识别考勤系统, 人脸识别模块使用python的Face_recognition模块,后台基于Django和SQLite数据库,前端主要使用layui。作为本科毕设,内容较为简单。
  • 本科毕业设计可用,代码简单易理解,有详细注释
  • 系统功能介绍(正在更新) 4.1 信息采集 4.2 人脸识别 4.3 活体检测(存在bug) 目前的bug是,活体检测开启关闭之后,关闭人脸考勤,再关闭相机的时候会卡死。 4.4 查询考勤信息 4.5 查询学生信息 4.6 请假登记 5. ...
  • 人脸识别考勤系统 软件商用说明 逐步学习交流及一切非盈利用途,禁止商用。 说明 软件的话从去年到现在,一直完美支持100人以上考勤,如果在编译过程中遇到了任何报错,可以给我留言,如果看到的话,我会免费提供...
  • 基于Python人脸识别考勤系统

    万次阅读 2019-04-08 12:55:16
    基于Python人脸识别考勤系统 Python源文件: 基于Python3.7编程环境开发 需要安装 tkinter pil face_recognition OpenCV2 库来实现人脸识别 需要安装jpush库和手机上的jpush APP来实现向手机推送考勤信息 ...
  • Python写了一套人脸识别考勤系统,能支撑260人的考勤数据。 用Python写了一套人脸识别考勤系统,能支撑260人的考勤数据。 用Python写了一套人脸识别考勤系统,能支撑260人的考勤数据。 ...
  • python本科毕业设计基于深度学习的人脸识别考勤系统。具备基础的人脸录入,人脸识别,考勤管理,课堂管理,班级管理,日志管理等功能。此Python项目是整体项目的人脸识别部分,基于深度学习的FaceNet算法,对人脸...
  • 再使用Flask框架进行系统的web端的搭建,最后使用Mysql进行数据库建设,从而实现完整的人脸识别考勤系统。 使用说明:阅读Readme文档,安装好requirement.txt里面的环境即可使用。 毕设推荐使用!!!
  • 这篇文章主要为大家详细介绍了face++与python实现人脸识别签到(考勤)功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 项目实现利用face++开发一个课堂签到的软件,实现面向摄像头即可完成记录学号、姓名...
  • 基于python opencv人脸识别的员工考勤系统

    万次阅读 多人点赞 2018-09-22 17:16:10
    #@[TOC](基于python opencv人脸识别的员工考勤系统) WorkAttendanceSystem 一个基于opencv人脸识别的员工考勤系统 ##工程简介 写于2018/09/,python课设期间; ##项目结构 mainui.py是主界面,调用face_img_...
  • 这个人脸识别考勤签到系统是基于大佬的人脸识别陌生人报警系统修改的。 此处放一个大佬原项目GitHub链接:基于OpenCV的视频人脸识别陌生人报警系统 项目使用Python实现,基于OpenCV框架进行人脸识别和摄像头硬件调用...
  • 学习笔记:python人脸识别4-考勤系统

    千次阅读 热门讨论 2019-02-17 14:27:16
    学习人脸识别,一个应用是考勤系统,学习软件,必须站在前人的肩膀上,从网上找到一个可以参考的模型,是个学生的作业,算很不错了,点个赞,就下载,配置环境测试了一下,可用 作者网址:...
  • 本项目使用Python3.8编写,Qt Designer(QT5)设计主界面,PyQt5库编写控件的功能,使用开源FaceNet人脸识别算法进行人脸识别,使用眨眼检测来实现活体识别,使用OpenCV3实现实时人脸识别。同时,将班级学生信息,各...
  • 基于python的多人多目标复杂背景的人脸检测识别深度学习视频演示:https://www.bilibili.com/video/BV1bV411b733?from=search&seid=17092024045805634446
  • 基于python人脸识别考勤系统
  • 通过python或者命令行即可实现人脸识别的功能,程序仅实现基本功能,通过相应的图片即可分辨,但因为并没有进行模型训练,该代码仅供学习参考(需在该文件的同级目录下新建一个images文件夹,文件夹内存放所需判断的...
  • python项目-face++人脸识别考勤机-python_GUI-automatic_weather-face_gensui-python_game-python_LAN-python_multithreading-python_mysql-python_opencv_tracking-python_pachong
  • Python智慧教室人脸考勤系统源码,基于嵌入式AI的人脸识别课堂签到系统,该系统主要用于基于人脸识别的课堂考勤场景,技术实现如下: ①客户端 ②服务器 该系统巧妙地将网络通信、嵌入式边缘AI、人脸识别技术运用于...
  • 基于python人脸识别签到系 统 程序界面 第一次使用时需要在在“签到名单”文件夹中新建一个名为签到次数、内容为字符’0’的txt文件 import cv2 import face_recognition from tkinter import * #准备人脸编码...
  • 主要为大家详细介绍了百度人脸识别人脸识别FaceIdentify,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 基于Python的人脸识别系统本科论文毕业设计,Python本科毕业设计-基于深度学习的人脸识别考勤系统,具备人脸录入,人脸识别,考勤管理,课堂管理,班级管理,日志管理等等功能。基于Python的人脸识别系统本科论文...
  • Python】基于人脸识别考勤系统 [PC端部分] 一、项目简介 本项目编程语言Python3.6,编程工具pycharm,其他工具QT Designer、Navicat,表单信息保存在本地MySQL数据库中,人脸识别算法主要用的OpenCV。 目前,已...
  • 毕业设计:基于深度学习的人脸识别签到系统的设计与实现 准备: 安装virtualenv: pip install virtualenv 创建虚拟环境: virtualenv venv 进入虚拟环境: venv\Scripts\activate 安装依赖的包: pip install -r ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 605
精华内容 242
关键字:

python人脸识别考勤系统