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路径的写法及目录的获取方式的攻略。 Python路径的写法 在Python中,常用的路径写法有两种,分别是绝对路径和相对路径。 绝对路径 绝对路径是指从根目录开始的完整路径,因此它具有确定性和精准性,但是它往往很长,有时不方便使用。 在Linux或Mac系统中,绝对路径通常以”/”开头,例如: /home/user/workplace/…

    python 2023年6月2日
    00
  • python3调用百度翻译API实现实时翻译

    下面是详细讲解的攻略: 1. 准备工作 1.1 获取百度翻译API的APP ID和密钥 首先你需要拥有一个百度账号,然后前往百度翻译API官网,登录并创建一个APP,然后获取到APP ID和密钥,这是调用API的必须参数。 1.2 安装Python SDK包 我们可以使用Python SDK包来方便地调用百度翻译API,这里我们使用baidu-transla…

    python 2023年6月3日
    00
  • Python定时执行程序问题(schedule)

    在Python中,我们经常需要定时执行一些程序,例如定时备份数据、定时发送邮件等。为了实现这个功能,我们可以使用Python的schedule库。本文将介绍如何使用schedule库来定时执行程序。 安装schedule库 在使用schedule库之前,我们需要先安装它。可以使用pip命令来安装schedule库。 pip install schedule …

    python 2023年5月13日
    00
  • C语言调用Python代码的方法

    C语言调用Python代码的方法可以通过以下步骤实现: 安装Python开发环境和C语言开发环境 在调用Python代码之前需要安装Python开发环境和C语言开发环境,Python开发环境用来编写Python代码,C语言开发环境用来编写C语言代码。可以从官网下载安装或使用社区版本。 编写Python代码 编写需要调用的Python代码,并将其保存为.py文…

    python 2023年5月19日
    00
  • 基于python的七种经典排序算法(推荐)

    下面是关于“基于Python的七种经典排序算法”的完整攻略。 1. 排序算法简介 排序算法是一种将一组数据按照特定顺序排列的算法。在计算机科学中,常见的排序算法包括冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序和堆排序等。 2. Python实现七种经典排序算法 2.1泡排序 冒泡排序是一种通过交换相邻元素来排序的算法。在Python中,我们可以…

    python 2023年5月13日
    00
  • python2 对excel表格操作完整示例

    下面我将详细讲解 “Python2对Excel表格操作完整示例” 的实例教程。首先,需要使用 pip 安装 pandas 和 xlrd 这两个库,可以使用以下命令进行安装: pip install pandas pip install xlrd 接下来,我们就可以开始使用 pandas 和 xlrd 库对 Excel 表格进行操作了。我们先来看一个简单的示例…

    python 2023年5月13日
    00
  • python数据处理之如何修改索引和行列

    接下来我将为您详细讲解“Python数据处理之如何修改索引和行列”的完整攻略。 1. 修改索引 1.1 修改索引名称 我们可以通过修改索引名称来改变DataFrame或Series对象的索引名称。下面是一些操作示例: 1.1.1 修改 DataFrame 索引名称: import pandas as pd # 创建DataFrame df = pd.Data…

    python 2023年6月3日
    00
  • Python datetime 格式化 明天,昨天实例

    Python的datetime模块提供了对日期和时间的操作,包括创建日期时间对象、格式化日期时间、日期时间计算等操作。在datetime模块中有一个datetime类,它表示一个日期时间对象。格式化日期时间可以使用strftime()方法来实现。 格式化日期时间 使用strftime()方法可以将datetime对象格式化为字符串。strftime(form…

    python 2023年6月2日
    00
合作推广
合作推广
分享本页
返回顶部