- Part.1 實現MVC:Qt Designer與PyQt5的完美接軌
- Part.2 人臉辨識核心:SCRFD + ArcFace + YOLOFace
- Part.3 人員管理系統:PyQt5應用
- Part.4 騷包的花邊功能:語音與音效提示功能
因為人臉辨識系統需要管理人臉資料庫以及各自使用者的設定檔,這時候我們會需要有個UI介面跟檔案去管理這些人員清單,因此這邊也稍微著墨一下這個人臉辨識系統所寫到的人員管理系統。
關於控制視窗元件的方法,基本上大多都寫在controller.py裡面的class StaffWindow_controller以及StaffList資料夾內的Staff.py裡面。進入人員管理系統的畫面時,程式上市讀取controller.py,有任何修改人員清單內容的方法,全部都是呼叫Staff.py來實行的。因為不太會有程式卡死的問題,這邊並沒有使用到QThread來撰寫。
工作原理上,只要table widget裡面有任何資料被變更,就會觸發cellChanged事件以及self.cell_changed方法;按下btnDelete或是btnInsert則個別會觸發self.delete_selection方法以及self.insert_one_row方法。創造table widget內的item的方法是固定的,必須用QtWidgets.QTableWidgetItem來設定一個"儲存格",並且設定它的setTextAlignment(對齊)、setFlags(內容唯讀與否),最後用setItem來創建一個"儲存格"。
在最終的呈現上,小弟希望變更ID時會自動變更資料的儲存資料夾(無論是"資料"設定值或是實際的資料夾)。變更名稱、打卡聲、e-mail之後,會相對應的更新作為倉庫的csv檔案(本範例雖然存成txt檔,但它的儲存格式的精神一樣是csv檔)。選擇數列並按下"刪除數列"會刪掉table widget內以及csv內的資料。點選"插入一列"則會在最開頭插入一列新的使用者ID等資料,並創建資料夾。
pandas
在讀取與寫入人員清單與設定方面,小弟採用了可以簡單維護的pandas這個API來將人員表格存成csv檔。可以用pd.DataFrame將dict格式的資料用pandas讀取至變數內。使用pd.concat可以將兩個dict或是dataframe給合併在一起。用(dataframe).to_csv可以將dataframe儲存csv檔到指定的路徑。用pd.read_csv則可以從指定的路徑讀取csv檔進dataframe變數。用(dataframe).sort_values可以將dataframe進行從小到大的排序。
os, shutil
針對檔案是否存在,或是要更名、刪除檔案等等,用os與shutil這些API來操作就對了。os.path.exists可以偵測路徑檔案或資料夾是否存在。os.mkdir可以製造一個資料夾。shutil.rmtree可以刪除資料夾本身與資料夾內的所有檔案。os.rename可以將檔案或資料夾更名。
人臉辨識系統原始碼:
https://github.com/hcyang1227/PythonProj_Fin/tree/master/MDIT_Punch_Card_System
沒有留言:
張貼留言