毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏)
毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总
🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅
1、项目介绍
技术栈:
Python语言、facenet人脸识别算法 Tensorflow MySQL数据库,
可实现人脸的录入,人脸识别,识别记录查询,
基于Tensorflow和mysql数据库实现的人脸识别系统
Python语言提供了丰富的图像处理和机器学习库,如OpenCV、dlib、Tensorflow等,这些库可以辅助实现人脸检测、对齐、特征提取等功能;而facenet是一种基于深度学习的人脸识别算法,可以实现高精度的特征提取。MySQL数据库提供了数据存储和查询的功能,可以方便地存储和管理人脸识别系统中的数据。
综上所述,Python语言、facenet人脸识别算法、Tensorflow和MySQL数据库合作使用,可以搭建出一个完整的人脸识别系统。
2、项目界面
(1)人脸识别界面
(2)识别记录统计
(3)人脸识别记录
(4)录入人脸
(5)管理员登录
(6)人脸识别检测
(7)MySQL数据库数据管理
3、项目说明
人脸识别系统是一种通过计算机视觉技术,对人脸进行采集、特征提取、特征匹配等处理,实现自动识别的系统。通常包括人脸采集、人脸检测、人脸对齐、特征提取、特征匹配等模块。Python语言和facenet人脸识别算法是实现该系统的关键技术。
人脸识别系统一般包括以下几个步骤:
人脸采集:使用摄像头或者照片等方式采集人脸图像数据。
人脸检测:使用OpenCV等库,对采集到的图像进行人脸检测,找出图像中的人脸区域。
人脸对齐:使用dlib等库,对人脸图像进行对齐操作,将人脸图像转换为标准姿态。
特征提取:使用facenet等人脸识别算法,对人脸图像进行特征提取,生成对应的128维特征向量。
特征匹配:使用L2距离等方法,对查询人脸图像和数据库中已知人脸图像的特征向量进行比对,找出最相似的人脸。
识别记录查询:将识别结果保存在MySQL数据库中,用户可以通过查询数据库,查看历史识别记录。
Python语言提供了丰富的图像处理和机器学习库,如OpenCV、dlib、Tensorflow等,这些库可以辅助实现人脸检测、对齐、特征提取等功能;而facenet是一种基于深度学习的人脸识别算法,可以实现高精度的特征提取。MySQL数据库提供了数据存储和查询的功能,可以方便地存储和管理人脸识别系统中的数据。
综上所述,Python语言、facenet人脸识别算法、Tensorflow和MySQL数据库合作使用,可以搭建出一个完整的人脸识别系统。
4、核心代码
import sys, cv2, os, pickle
import numpy as np
import time
from datetime import datetime
from database.dataMess import *
from ui import win, add_inf, login, admin
from face_detect.cap_detect import capture_face
from face_detect.image_detect import image_face
from PyQt5.QtWidgets import QApplication, QMainWindow, QDialog, QMessageBox, QFileDialog, QTableWidgetItem
from PyQt5.QtCore import QTimer, QPoint
from PyQt5.QtGui import QImage, QPixmap
from PyQt5 import Qt, QtWidgets, QtGui, QtCore
#from matplotlib import pyplot as plt
from face_recog.recog import recg
from image_train.data_train import train
image_path = "./image/"
class LoginWin(QDialog, login.Ui_LoginWin):
def __init__(self):
super(LoginWin, self).__init__()
self.setupUi(self)
def showAdmin(self):
account_num = self.numEdit.text()
passwd = self.passwdEdit.text()
dBase = dataBase()
sql = "select count(*) from admin where account_num='%s' and passwd='%s'"%(account_num, passwd)
result = dBase.fetchall(sql)[0]
count = result[0]
if count == 0:
QMessageBox.information(self, '提示', '用户名或者密码错误', QMessageBox.Yes)
else:
self.close()
adm = AdminWin()
adm.show()
adm.exec_()
class AddWin(QDialog, add_inf.Ui_AddWin):
def __init__(self):
super(AddWin, self).__init__()
self.setupUi(self)
# 添加员工
def addStaff(self):
dBase = dataBase()
staffName = self.nameEdit.toPlainText()
staffNum = self.numEdit.toPlainText()
if staffName == '' or staffNum == '':
QMessageBox.information(self, "信息录入", "请完善个人信息")
else:
flag = True
sql = 'SELECT * FROM employees'
result = dBase.fetchall(sql)
for i in range(len(result)):
if result[i][1] == staffNum:
flag = False
QMessageBox.information(self, "信息录入", "编号重复了!")
if flag:
if os.path.exists(image_path + staffNum):
if os.listdir(image_path + staffNum):
try:
sql = "insert into employees values('{0}', '{1}')".format(staffName, staffNum)
dBase.execute(sql)
face_feature, dimension = train()
bytes_feature = face_feature.tobytes()
matrix_dimension = pickle.dumps(dimension)
sql = "insert into facefeat (feature) values(%s)"
dBase.execute(sql, bytes_feature)
sql = "update facefeat set dimension=%s where id in (select a.id from (select max(id) as id from facefeat)a)"
dBase.execute(sql, matrix_dimension)
QMessageBox.information(self, "信息录入", "信息录入成功")
except:
QMessageBox.information(self, "信息录入", "信息录入失败")
else:
QMessageBox.information(self, "信息录入", "请录入个人照片")
else:
QMessageBox.information(self, "信息录入", "请录入个人照片")
# 录入照片
def capFace(self):
name = self.nameEdit.toPlainText() # 获取普通文本
num = self.numEdit.toPlainText()
if not os.path.exists(image_path):
os.mkdir(image_path) # 如果没有存储相片的目录,则进行创建
flag = True
if name != '' and num != '':
dBase = dataBase()
sql = 'SELECT * FROM employees'
result = dBase.fetchall(sql)
for i in range(len(result)):
if result[i][1] == num:
flag = False
QMessageBox.information(self, "信息录入", "编号重复了!")
if flag:
if not os.path.exists(image_path + num):
os.mkdir(image_path + num) # 如果没有员工照片个人目录,则创建
capture_face(num)
else:
QMessageBox.information(self, "信息录入", "请完善个人信息") # 必须拥有两个参
# 人脸识别
def face_rec():
dBase = dataBase()
sql = 'SELECT * FROM employees'
result = dBase.fetchall(sql) # result 是一个元组
sql = 'SELECT * FROM facefeat where id=(select max(id) from facefeat)'
res = dBase.fetchall(sql)[0] # dBase.fetchall(sql2)返回的形式类((b'[[[-5.77707522e+03]]]','(390,21,20)'),)
feature = res[1] # 获取特征
feature = np.frombuffer(feature) # 还原成一维数组
print('feature.shape', feature.shape)
dimension = res[2]
dim = pickle.loads(dimension) # 还原成数组
print('dim', dim)
feat = feature.reshape(dim) # 将数组还原成多为数组
print('feat.shape', feat.shape)
label = []
for i in range(len(result)):
label.append(result[i][1])
capture = cv2.VideoCapture(0)
# capture.set(3, 400)
# capture.set(3, 300)
while(capture.isOpened()):
ret, frame = capture.read()
frame, staff_num = recg(frame, feat)
for i in range(len(label)):
if label[i] == staff_num:
flag = addRecord(staff_num)
if flag:
cv2.putText(frame, 'Success', (50, 80), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2, cv2.LINE_AA, )
cv2.imshow('camera', frame)
if cv2.waitKey(1) & 0xFF == 27:
break
capture.release()
cv2.destroyAllWindows()
# 识别记录
def addRecord(staffnum): # 识别记录
dt = datetime.now().strftime("%Y-%m-%d") # 获取当前时间
dBase = dataBase()
sql = "select * from record"
result = dBase.fetchall(sql)
if result:
sql = "select id ,dates from record where staffNum='%s' order by id desc limit 1" %staffnum
result = dBase.fetchall(sql)
if result:
resu = result[0]
record_time = resu[1]
if dt != record_time:
sql = "insert into record (staffNum) values(%s)"
dBase.execute(sql, staffnum)
sql = "update record set dates=%s where id in (select a.id from (select max(id) as id from record)a)"
flag = dBase.execute(sql, dt)
print('识别成功!')
return flag
else:
sql = "insert into record (staffNum) values(%s)"
dBase.execute(sql, staffnum)
sql = "update record set dates=%s where id in (select a.id from (select max(id) as id from record)a)"
flag = dBase.execute(sql, dt)
print('识别成功!')
return flag
else:
sql = "insert into record (staffNum) values(%s)"
dBase.execute(sql, staffnum)
sql = "update record set dates=%s where id in (select a.id from (select max(id) as id from record)a)"
flag = dBase.execute(sql, dt)
print('识别成功!')
return flag
if __name__ == '__main__':
app = QApplication(sys.argv)
MainWin = faceWin()
MainWin.show()
sys.exit(app.exec_())
5、源码获取方式
🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看我的【用户名】、【专栏名称】、【顶部选题链接】就可以找到我啦🍅
感兴趣的可以先收藏起来,点赞、关注不迷路,下方查看👇🏻获取联系方式👇🏻