2、Python OpenCV 人脸检测训练识别 - 用户数据准备
目录
1、Python OpenCV 人脸检测训练识别 - 环境安装
2、Python OpenCV 人脸检测训练识别 - 用户数据准备
3、Python OpenCV 人脸检测训练识别 - 人脸检测
4、Python OpenCV 人脸检测训练识别 - 人脸训练
5、Python OpenCV 人脸检测训练识别 - 人脸识别
6、Python OpenCV 人脸检测训练识别 - 总结
1、前言
做为一完整可用的Demo,根据目录就可以了解到,需要一个用于存储用户基础数据的媒介,为了简化Demo复杂度,本次Demo就采用Excel存储用户基础数据
2、新建一个Python类
作为一个用于管理用户数据的模块,我们新建一个UserDataManagement类(Python类参考资料),在类的构造函数用于判断Excel是否存在,如果不存在就新建一个,并录入好表头字段。
类的构造函数:方法__init__()是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法
函数参数:self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。
#导入模块
import os
import openpyxl
#用户数据管理
class UserDataManagement:
#所有类都有一个名为 __init__() 的函数,它始终在启动类时执行
def __init__(self):
print("用户数据管理")
self.UserDataExcelPath = os.path.join(os.getcwd(),'data\\UserData.xlsx')
if(os.path.exists(self.UserDataExcelPath) == False):
print("用户数据Excel文件不存在,正在创建......")
#创建新的workbook
workBook = openpyxl.Workbook()
#创建新的sheet表
workSheet = workBook.create_sheet(title="Sheet1",index=0)
#往表格第一行输入内容
workSheet.append(['序号', 'ID', '工号', '名称'])
#保存
workBook.save(self.UserDataExcelPath)
if os.path.exists(self.UserDataExcelPath):
print("用户数据Excel创建成功......")
else:
print("用户数据Excel创建失败......")
3、用户数据新增
添加用户数据方法:主要用于录入用户数据(用户ID,工号,名称),在保存用户数据时候,做一些简单验证(用户ID与工号必须唯一),并返回状态与消息
def AddUserData(self,userID:str,userNumber,userName:str):
'''
添加用户数据
Params:
userID:用户ID
userNumber:用户工号
userName:用户名称
Returns:
status:True表示成功过,False表示失败
message:消息,只有失败才返回消息
'''
if len(userID) == 0 or len(userNumber) == 0 or len(userName) == 0:
status = False
message = f'参数不能为空'
return status,message
try:
#打开Excel文件
workBook = openpyxl.load_workbook(self.UserDataExcelPath)
#通过名称获取
workSheet = workBook['Sheet1']
# 获取该sheet中的行数
rows = workSheet.max_row
print(f"{self.UserDataExcelPath}一共有:{rows}行")
# 获取第2列所有值(列表生成式)
userID_list = [str(workSheet.cell(row = i, column = 2).value) for i in range(2, rows + 1)]
if userID in userID_list:
status = False
message = f'用户ID已存在:{userID}'
return status,message
# 获取第3列所有值(列表生成式)
userNumber_list = [str(workSheet.cell(row = i, column = 3).value) for i in range(2, rows + 1)]
if userNumber in userNumber_list:
status = False
message = f'用户工号已存在:{userNumber}'
return status,message
# 往表格写入内容
workSheet.cell(row = rows + 1, column = 1).value = rows
workSheet.cell(row = rows + 1, column = 2).value = userID
workSheet.cell(row = rows + 1, column = 3).value = userNumber
workSheet.cell(row = rows + 1, column = 4).value = userName
# 保存
workBook.save(self.UserDataExcelPath)
status = True
message = '成功'
except Exception as e:
print(f"异常:{str(e)}")
status = False
message = str(e)
return status,message
4、用户数据清空
清空用户数据方法:主要用于清除全部用户数据,初始化Excel,并返回状态与消息
def DeleteUserData(self):
'''
清空用户数据
Params:
Returns:
status:True表示成功,False表示失败
message:消息,只有失败才返回消息
'''
try:
#打开Excel文件
workBook = openpyxl.load_workbook(self.UserDataExcelPath)
#通过名称获取
workSheet = workBook['Sheet1']
#获取该sheet中的行数
rows = workSheet.max_row
print(f"{self.UserDataExcelPath}一共有:{rows}行")
while workSheet.max_row > 1:
workSheet.delete_rows(2)
#保存
workBook.save(self.UserDataExcelPath)
status = True
message = '删除成功'
except Exception as e:
status = False
message = str(e)
return status,message
5、用户数据输出
用户数据输出:主要用于查看当前Excel有多少用户数据,并返回状态、消息、列表
def GetUserData(self,initializedData:bool):
'''
获取用户数据
Params:
initializedData:True表示加入初始化数据,False表示不加入
Returns:
status:True表示成功,False表示失败
message:消息,只有失败才返回消息
ExcelData:Excel数据,返回一个列表
'''
ExcelData = []
if initializedData:
ExcelData.append({ "SerialNumber": 0,"UserID": 0,"UserNumber": 0,"UserName": 'Unknown'})
try:
#打开Excel文件
workBook = openpyxl.load_workbook(self.UserDataExcelPath)
#通过名称获取
workSheet = workBook['Sheet1']
#获取该sheet中的行数
rows = workSheet.max_row
print(f"{self.UserDataExcelPath}一共有:{rows}行")
for row in range(2, rows + 1):
serialNumber = workSheet.cell(row = row, column = 1).value
userID = workSheet.cell(row = row, column = 2).value
userNumber = workSheet.cell(row = row, column = 3).value
userName = workSheet.cell(row = row, column = 4).value
rowData = {
"SerialNumber": serialNumber,
"UserID": userID,
"UserNumber": userNumber,
"UserName": userName,
}
ExcelData.append(rowData)
#关闭
workBook.close()
status = True
message = '成功'
except Exception as e:
status = False
message = str(e)
return status,message,ExcelData