python实现人脸签到系统

下面就是“python实现人脸签到系统”的完整攻略。

1. 准备工作

在开始实现人脸签到系统前,需要先准备以下工作:

  1. 安装基于Python的人脸识别库dlibface_recognition,这两个库是人脸签到系统的核心库。
  2. 下载一个人脸图片集,用于作为签到系统的人脸库。可以从这个链接下载dlib人脸识别器及样例图片Test Images
  3. 建立一个sqlite3数据库,并在其中创建一个表格用于存储签到信息。

2. 人脸识别

人脸识别是签到系统的核心功能,通过dlibface_recognition库,可以轻松地实现人脸识别功能。

首先,需要对人脸图片集中的每一张图片进行特征提取,然后将特征向量存储在一个列表中。代码示例如下:

import face_recognition

# 加载人脸图片集
image = face_recognition.load_image_file("path/to/image.jpg")

# 提取特征向量
face_encoding = face_recognition.face_encodings(image)[0]

# 将特征向量添加到向量列表中
known_faces = [face_encoding]

接下来,在签到过程中,需要进行人脸识别。具体实现逻辑如下:

  1. 通过相机实时获取画面。
  2. 对画面中的每一张脸进行特征提取。
  3. 将刚刚提取出来的特征向量分别与人脸库中的特征向量进行比对,返回最相近的一个特征向量。
  4. 如果最相近的特征向量与某个特定的特征向量非常接近,则认为是该人成功签到,将签到信息保存到数据库中。

代码实现如下:

import cv2
import face_recognition
import sqlite3

# 连接数据库
conn = sqlite3.connect('database.db')
c = conn.cursor()

# 加载人脸库
known_faces = []
image = face_recognition.load_image_file("path/to/image.jpg")
face_encoding = face_recognition.face_encodings(image)[0]
known_faces.append(face_encoding)

# 开启相机
video_capture = cv2.VideoCapture(0)

while True:
    # 获取画面
    ret, frame = video_capture.read()

    # 找到画面中所有的人脸
    face_locations = face_recognition.face_locations(frame)
    face_encodings = face_recognition.face_encodings(frame, face_locations)

    # 遍历画面中的每一个人脸特征向量
    for face_encoding in face_encodings:
        # 将当前特征向量与人脸库中的所有特征向量进行比对
        matches = face_recognition.compare_faces(known_faces, face_encoding, tolerance=0.5)
        name = "Unknown"

        # 找到了匹配的人脸
        if True in matches:
            first_match_index = matches.index(True)
            name = "Name"

            # 将签到信息插入数据库
            c.execute("INSERT INTO check_in (name, timestamp) VALUES (?, DATETIME('now'))", (name,));
            conn.commit()

        # 在人脸周围画一个框,并将姓名标在框上
        top, right, bottom, left = face_locations[0]
        cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)
        cv2.putText(frame, name, (left, bottom + 25), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

    # 显示画面
    cv2.imshow("Video", frame)

    # 退出程序
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

# 释放内存并关闭窗口
video_capture.release()
cv2.destroyAllWindows()

3. 数据库查询

人脸签到系统签到信息全部保存在数据库中,如果需要查询具体的签到记录,可以通过SQL语句实现。以下为示例代码:

import sqlite3

# 连接数据库
conn = sqlite3.connect('database.db')
c = conn.cursor()

# 查询某个人的签到记录
c.execute("SELECT * FROM check_in WHERE name=?", ('Name',))
rows = c.fetchall()
for row in rows:
    print(row)

4. 示例

以下是一个使用上述代码实现的人脸签到系统的演示视频:https://www.youtube.com/watch?v=UbDNySszW2s

另外,这里还提供一个更加详细的人脸识别和签到系统的实现教程,供大家参考。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现人脸签到系统 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 在Python中对具有多维系数的切比雪夫级数进行微分

    对具有多维系数的切比雪夫级数进行微分,需要先使用Python库中的scipy中的chebval函数来计算各维系数的切比雪夫级数。然后利用numpy库中的gradient函数来计算多维切比雪夫级数的偏导数,即微分。 下面是具体的步骤: 导入必要的库 import numpy as np from scipy.special import chebval 构造多…

    python-answer 2023年3月25日
    00
  • 关于python继承和参数列表的问题

    【问题标题】:Questions about python inheritance and argument lists关于python继承和参数列表的问题 【发布时间】:2023-04-06 21:22:01 【问题描述】: 首先我得到了这个错误 File “E:\New folder (7)\maingame.py”, line 64, in play …

    Python开发 2023年4月7日
    00
  • Python timer定时器两种常用方法解析

    Python timer定时器两种常用方法解析 当我们需要在代码中设置定期执行某个任务时,Python内置的timer定时器可以非常方便地帮助我们完成。在本文中,我们将详细讲解Python timer定时器的两种常用方法,并且提供示例说明。 方法一:使用Threading模块 Threading模块是Python中用于多线程编程的核心模块之一。我们可以通过该…

    python 2023年5月19日
    00
  • 详解Python如何查看一个函数的参数

    下面是关于如何查看 Python 函数参数的攻略。具体步骤如下: 步骤1:查看函数文档 首先,我们可以查看函数的文档来了解其参数。 Python 在函数内置文档中提供了对函数参数的详细描述。可以在交互式解释器中使用 help() 函数来查看函数文档,也可以使用 __doc__ 属性来打印函数文档。 同样,我们也可以使用 help() 函数或 __doc__ …

    python 2023年6月5日
    00
  • python+mongodb数据抓取详细介绍

    下面是详细的攻略: Python+MongoDB数据抓取详细介绍 在Python中,我们可以使用pymongo模块实现与MongoDB数据库的交互,从而实现数据的抓取和存储。本文将对Python+MongoDB数据抓取进行详细介绍,并提供两个示例说明。 连接MongoDB数据库 在使用pymongo模块进行数据抓取之前,我们需要先连接MongoDB数据库。下…

    python 2023年5月14日
    00
  • Python爬虫:Request Payload和Form Data的简单区别说明

    Python 爬虫:Request Payload 和 Form Data 的简单区别说明 在使用 Python 进行爬虫时,我们经常需要发送 POST 请求,并传递一些参数。这些参数可以通过 Request Payload 或 Form Data 的方式传递。以下是 Request Payload 和 Form Data 的简单区别说明。 Request …

    python 2023年5月15日
    00
  • 对Python中Iterator和Iterable的区别详解

    下面是“对Python中Iterator和Iterable的区别详解”的完整攻略: 1. Iterator和Iterable的定义 Iterable:可以被迭代的对象,如列表、元组、字典、字符串等; Iterator:用于迭代的对象,可以通过调用 __next__() 方法不断返回下一个值,如果没有更多的元素,则会抛出一个 StopIteration 异常。…

    python 2023年6月3日
    00
  • Python NumPy 将多项式转换为切比雪夫数列

    首先,我们需要安装Python NumPy库来进行多项式转换为切比雪夫数列的转换操作。可以使用pip进行安装,命令如下: pip install numpy 安装完成后,我们需要导入NumPy库,同时定义一个多项式数组,代码如下: import numpy as np p = np.array([1, 2, 3]) # 多项式数组 接下来,我们需要进行多项式…

    python-answer 2023年3月25日
    00
合作推广
合作推广
分享本页
返回顶部