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与工号必须唯一),并返回状态与消息
image

    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,并返回状态与消息
image

    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有多少用户数据,并返回状态、消息、列表
image

    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
posted @ 2022-03-24 15:05  零点-Angelo  阅读(95)  评论(0编辑  收藏  举报