2、Python OpenCV 人臉檢測訓練識別 - 使用者資料準備
阿新 • • 發佈:2022-03-24
目錄
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