简单的签到程序 python笔记

简单的人脸识别签到程序

在看完以下代码后,略微修改一番,你就能够组装出自己的"简单的人脸识别签到程序"了。

请注意库的安装,否则会不可用。

你可以通过在cmd中使用:pip install来安装。

以下代码运行python = 3.8

UI界面

使用前安装:PySimpleGUI库

python 复制代码
import PySimpleGUI as sg

# 创建一个简单的窗口,包含一个标签和一个输入框
Layout = [[sg.Text("编号: ", size=(10, 1)), sg.InputText(key='id')],
          [sg.Text("姓名: ", size=(10, 1)), sg.InputText(key='name')],
          [sg.Text(key='msg')],
          [sg.Button("人脸采集"), sg.Button("关闭"),sg.Button('签到')]]
window = sg.Window("人脸识别", Layout,icon="./icon.ico")
while True:
    event, values = window.read()# 读取窗口事件和输入值
    print(event, values)
    if event == "人脸采集":
        id = values["id"]
        name = values["name"]
        window["msg"].update(f"编号: {id}, 姓名: {name}")# 更新消息框内容
        sg.popup("人脸采集")
    elif event == "签到":
        id = values["id"]
        name = values["name"]
        window["msg"].update(f"编号: {id}, 姓名: {name}")
        if id == "1" and name == "1":
            sg.popup("签到成功")
            print("签到成功")
        else:
            sg.popup("签到失败")
            print("签到失败")
    elif event == "关闭" or event == sg.WIN_CLOSED:
        print("退出")
        sg.popup_timed("退出")# 弹出提示信息
        break

数据库

使用前请安装好MySQL和图形化界面。

sql 复制代码
CREATE TABLE tu (
    user_id INT AUTO_INCREMENT PRIMARY KEY,
    user_name VARCHAR(255) NOT NULL,
    user_num INT NOT NULL
);

数据库操作

使用前安装:pymysql库

python 复制代码
import pymysql

# 数据库配置
db_config = {
    'host': 'localhost',
    'user': 'root',
    'password': '123456',
    'port': 3306,
    'database': "name",
    'charset': 'utf8'
}

# 增
def connect_mysql(name, num):
    con = pymysql.connect(**db_config)
    cur = con.cursor()
    sql = "insert into tu (user_name,user_num) values(%s,%s)"
    cur.execute(sql, (name, num))
    con.commit()
    if cur.rowcount > 0:
        print("数据库添加成功")
    else:
        print("数据库添加失败")
    cur.close()
    con.close()

# 改
def update_mysql(name, num):
    con = pymysql.connect(**db_config)
    cur = con.cursor()
    sql = "UPDATE tu SET user_num = %s WHERE user_name = %s"
    affected_rows = cur.execute(sql, (num, name))
    con.commit()
    if affected_rows > 0:
        print("更新成功")
    else:
        print("更新失败或未找到对应的记录")
    cur.close()
    con.close()

# 删
def delete_mysql(name):
    con = pymysql.connect(**db_config)
    cur = con.cursor()
    sql = "DELETE FROM tu WHERE user_name = %s"
    affected_rows = cur.execute(sql, (name,))
    con.commit()
    if affected_rows > 0:
        print("删除成功")
    else:
        print("删除失败或未找到对应的记录")
    cur.close()
    con.close()

# 查
def num_to_name(user_num):
    con = pymysql.connect(**db_config)
    cur = con.cursor()
    sql = "SELECT user_name FROM tu WHERE user_num = %s"
    cur.execute(sql, (user_num,))
    result = cur.fetchone()
    cur.close()
    con.close()
    return result[0] if result else None

人脸识别

使用前安装配置好cv2(opencv-python),face_recognition,numpy

python 复制代码
import cv2
import face_recognition
import os
import numpy as np
#开启摄像头
c = cv2.VideoCapture(0, cv2.CAP_DSHOW)
#文件路径
file_path = "D:\work\python\open\lian"

while True:
    ret,frame = c.read()
    if ret:
        #显示图
        cv2.imshow("a",frame)
    if cv2.waitKey(20) == 27:
        break
    if cv2.waitKey(20) == 113:
        # 检测人脸
        face_list = face_recognition.face_locations(frame)
        if len(face_list) > 0:
            print("视频检测到人脸")
            # 遍历目录
            path = os.listdir(file_path)
            # print(path)
            for i in path:
               #获取人脸特征
               img = cv2.imread(f"{file_path}\\{i}")
               encodings = face_recognition.face_encodings(img)
               if len(encodings) == 0:
                   continue
               else:
                   en1 = face_recognition.face_encodings(img)[0]
                   en2 = face_recognition.face_encodings(frame)[0]
                   iss = np.linalg.norm(en1-en2)
                   # print(iss)
               if iss < 0.5:
                   print("与图像",i,"中欧几里得距离:",round(iss,2),"是同一个人")
               else:
                   print("与图像",i,"欧几里得距离为 :",round(iss,2),"不是同一个人")
cv2.destroyAllWindows()

好了,现在你可以组装自己的简单的签到程序了。

相关推荐
一隅论数智几秒前
RDF(Resource Description Framework)介绍和使用举例(二)
大数据·人工智能·经验分享·笔记·学习·架构·政务
“AI国潮设计-小江”15 分钟前
《Python+SDXL实战:用ControlNet精准控制“英歌舞戚风蛋糕”质感,附批量生成脚本》
开发语言·人工智能·python·prompt·aigc
小师兄吃牛肉22 分钟前
Ansys Electronics 2026 专业仿真平台全面安装解析:核心模块、新增特性与典型应用场景深度指南
笔记
jayhgq22 分钟前
新一代Python包与项目管理工具——UV
开发语言·python·uv
for_ever_love__27 分钟前
文件与异常——open、json、with 与 try-except 的工程写法
python·异常处理·文件操作·大模型开发
XLYcmy29 分钟前
PDF 论文处理器 — 技术报告文档
数据库·python·网络安全·pdf·embedding·dify·rag
weixin_4404016931 分钟前
质朴的可视化绘图+pyecharts
开发语言·python·信息可视化·pyecharts
计算机毕业编程指导师35 分钟前
【Python毕设选题推荐】基于Spark的国内主要农作物产量趋势分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·python·数据分析·spark·毕业设计·课程设计·农作物产量
计算机毕业编程指导师41 分钟前
【Python毕设选题推荐】基于Spark的宫颈癌变光谱特征数据分析可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·spark·毕业设计·宫颈癌变
ss27341 分钟前
AI全栈实战 | 3.3-01 Python OOP:__init__ 真的是构造函数吗,元类怎么让 Django Model 变魔法
开发语言·python·django