1. 程式人生 > 其它 >2、Python OpenCV 人臉檢測訓練識別 - 使用者資料準備

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}行")
            for row in range(2, rows + 1):
                workSheet.delete_rows(row)
            #儲存
            workBook.save(self.UserDataExcelPath)

            status = True
            message = '刪除成功'
        except Exception as e:
            status = False
            message = str(e)
        
        return status,message

5、使用者資料輸出

使用者資料輸出:主要用於檢視當前Excel有多少使用者資料,並返回狀態、訊息、列表

    def GetUserData(self):
        '''
        獲取使用者資料
        Params:
        Returns:
            status:True表示成功過,False表示失敗
            message:訊息,只有失敗才返回訊息
            ExcelData:Excel資料,返回一個列表
        '''
        
        ExcelData = [{ "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