python实现的人脸识别打卡系统

yizhihongxing

Python实现的人脸识别打卡系统

简介

人脸识别技术能够实现高精度的人脸识别和检测,应用广泛。本文将介绍如何使用Python语言实现一个简单的人脸识别打卡系统。

环境准备

  • Python 3.5+
  • OpenCV 4.x
  • face_recognition(Python人脸识别库)

实现步骤

步骤1:数据收集和预处理

收集一些图像用于训练系统。对这些图像进行人脸检测和特征提取,并保存到csv文件中。

示例代码:

import face_recognition
import cv2
import os
import numpy as np

# 数据收集: 将已知人物的图像读入并处理
known_face_encodings = []
known_face_names = []
for dirpath, dirnames, filenames in os.walk("known_faces"):
    for name in filenames:
        path = os.path.join(dirpath, name)
        image = face_recognition.load_image_file(path)
        face_locations = face_recognition.face_locations(image)
        face_encodings = face_recognition.face_encodings(image, face_locations)
        known_face_encodings.extend(face_encodings)
        known_face_names.extend([os.path.splitext(name)[0]] * len(face_encodings))

# 预处理: 将数据保存到csv文件中
np.savetxt("known_faces_encodings.csv", known_face_encodings, delimiter=",")
np.savetxt("known_faces_names.csv", known_face_names, fmt="%s")

步骤2:数据训练和模型保存

使用已经预处理好的csv文件,训练一个SVM分类器,并保存到文件中。

示例代码:

import numpy as np
from sklearn import svm

# 数据训练:读入已知数据,并训练SVM分类器
X = np.loadtxt("known_faces_encodings.csv", delimiter=",")
y = np.loadtxt("known_faces_names.csv", dtype=str)
clf = svm.SVC(gamma='scale')
clf.fit(X, y)

# 模型保存:将训练好的模型保存到文件中
joblib.dump(clf, "face_recognition_svc.pkl")

步骤3:实时人脸识别

打开摄像头,实时检测画面中的人脸,进行识别确认。

示例代码:

import cv2
import face_recognition
import joblib

# 加载SVM分类器和已知人脸的编码
clf = joblib.load("face_recognition_svc.pkl")
known_face_encodings = np.loadtxt("known_faces_encodings.csv", delimiter=",")

# 使用OpenCV打开摄像头,实时检测人脸并识别
video_capture = cv2.VideoCapture(0)
while True:
    # 读取摄像头画面,进行人脸检测和编码
    ret, frame = video_capture.read()
    small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)
    face_locations = face_recognition.face_locations(small_frame)
    face_encodings = face_recognition.face_encodings(small_frame, face_locations)

    # 遍历所有人脸编码,进行分类预测和识别
    for face_encoding in face_encodings:
        name = clf.predict([face_encoding])
        distance = face_recognition.face_distance(known_face_encodings, face_encoding)

        # 如果预测的人脸与已知人物匹配,并且距离比较小则认为已识别
        if name in known_face_names and min(distance) < 0.6:
            cv2.rectangle(frame, (left*4, top*4), (right*4, bottom*4), (0, 255, 0), 2)
            font = cv2.FONT_HERSHEY_DUPLEX
            cv2.putText(frame, name[0], (left*4+6, bottom*4-6), font, 2.0, (0, 255, 0), 1)

    # 显示识别结果
    cv2.imshow("video_capture", frame)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

# 释放摄像头并关闭窗口
video_capture.release()
cv2.destroyAllWindows()

总结

人脸识别技术已经广泛应用于打卡系统、安防、认证等场景。通过本文,我们介绍了如何使用Python编写一个简单的人脸识别打卡系统。在实现过程中,我们通过数据收集、预处理、训练和识别等步骤,实现了一个简单而实用的系统。

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

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

相关文章

  • 基于python图书馆管理系统设计实例详解

    基于Python图书馆管理系统设计实例详解 系统设计概述 基于Python的图书馆管理系统主要分为以下几个模块: 用户管理模块:负责管理图书馆的用户信息,包括用户的注册、登陆、修改密码等; 图书管理模块:负责管理图书馆的图书信息,包括图书的添加、删除、修改、查询等; 借阅管理模块:负责管理图书借阅的记录情况,包括借阅、归还、逾期罚款等; 系统管理模块:负责对…

    人工智能概览 2023年5月25日
    00
  • 分享20个 Unix/Linux 命令技巧

    没问题。本文将为大家详细讲解“分享20个 Unix/Linux 命令技巧”的完整攻略。 1. 简介 在 Unix/Linux 系统中,命令行是非常强大且高效的工具,掌握一些常用的命令技巧将会让我们的工作事半功倍。本文将向大家介绍20个常用的 Unix/Linux 命令技巧,希望能帮助大家更好地掌握命令行的技巧。 2. Unix/Linux 命令技巧 2.1.…

    人工智能概览 2023年5月25日
    00
  • Java操作MongoDB插入数据进行模糊查询与in查询功能

    Java操作MongoDB插入数据进行模糊查询与in查询功能 MongoDB是一种文档数据库,它支持面向文档的数据建模方式,这使得它非常适合于处理非结构化和半结构化数据。MongoDB使用BSON(Binary JSON)格式存储数据,它也支持查询数据和创建索引等操作。 在Java中使用MongoDB非常容易,我们只需要使用Java驱动程序即可。这里将介绍如…

    人工智能概论 2023年5月25日
    00
  • cv2.imread 和 cv2.imdecode 用法及区别

    cv2.imread与cv2.imdecode都是OpenCV提供的图像读取函数。它们的作用是用于读取图像文件以获取图像数据,但是它们之间存在一些区别。 cv2.imread cv2.imread函数用于读取常见的图像格式,如 BMP、JPEG、PNG、PBM、PGM、PPM 和 TIFF 格式的图像。当使用cv2.imread函数读取图像时,函数的返回值是…

    人工智能概论 2023年5月25日
    00
  • Go-RESTful实现下载功能思路详解

    Go-RESTful实现下载功能思路详解 简介 在Web应用程序中,下载功能通常是必需的功能之一。Go是一种功能强大的编程语言,使用它实现RESTful API来实现下载功能非常高效、方便和可靠。在本文中,我们将深入讨论如何使用Go-RESTful库实现下载功能。 步骤 本文将介绍三个主要步骤来实现下载功能: 定义RESTful路由 打开文件并将其发送到客户…

    人工智能概览 2023年5月25日
    00
  • python如何使用unittest测试接口

    测试是保障代码质量的重要手段之一,而 unittest 是 Python 中的一个用于编写单元测试的模块。下面将详细讲解如何使用 unittest 测试接口的完整攻略。 1. 创建测试用例 在使用 unittest 前,我们需要先创建一个测试用例。测试用例需要继承 unittest.TestCase 类,并通过方法重写的方式编写测试用例。下面是示例代码: i…

    人工智能概论 2023年5月25日
    00
  • django中ORM模型常用的字段的使用方法

    下面是“Django中ORM模型常用字段的使用方法”的攻略。 简介 Django中的ORM(对象关系映射)是一个强大的工具,它使开发人员能够更轻松地与数据库交互。Django中ORM提供了许多内置字段,这些字段可以将Python对象映射为数据库中的列。本攻略将会介绍Django中ORM模型常用的字段和它们的基本使用方法。 CharField CharFiel…

    人工智能概论 2023年5月25日
    00
  • SpringCloud_Sleuth分布式链路请求跟踪的示例代码

    下面是关于“SpringCloud_Sleuth分布式链路请求跟踪的示例代码”的攻略。 什么是SpringCloud_Sleuth? SpringCloud_Sleuth是SpringCloud的一个组件,主要是用来实现分布式链路请求跟踪的。它基于Dapper的思想,通过为每个请求生成唯一的trace id和span id,来实现分布式系统中的链路跟踪。同时…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部