日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python opencv人臉識別考勤系統的完整源碼

瀏覽:157日期:2022-06-21 09:36:25

如需安裝運行環境或遠程調試,可加QQ905733049, 或QQ2945218359由專業技術人員遠程協助!

運行結果如下:

python opencv人臉識別考勤系統的完整源碼

代碼如下:

import wximport wx.gridfrom time import localtime,strftimeimport osimport ioimport zlibimport dlib # 人臉識別的庫dlibimport numpy as np # 數據處理的庫numpyimport cv2 # 圖像處理的庫OpenCvimport _threadimport threading ID_NEW_REGISTER = 160ID_FINISH_REGISTER = 161 ID_START_PUNCHCARD = 190ID_END_PUNCARD = 191 ID_OPEN_LOGCAT = 283ID_CLOSE_LOGCAT = 284 ID_WORKER_UNAVIABLE = -1 PATH_FACE = 'data/face_img_database/'# face recognition model, the object maps human faces into 128D vectorsfacerec = dlib.face_recognition_model_v1('model/dlib_face_recognition_resnet_model_v1.dat')# Dlib 預測器detector = dlib.get_frontal_face_detector()predictor = dlib.shape_predictor(’model/shape_predictor_68_face_landmarks.dat’) class WAS(wx.Frame): def __init__(self):wx.Frame.__init__(self,parent=None,title='員工考勤系統',size=(920,560)) self.initMenu()self.initInfoText()self.initGallery()self.initDatabase()self.initData() def initData(self):self.name = ''self.id =ID_WORKER_UNAVIABLEself.face_feature = ''self.pic_num = 0self.flag_registed = Falseself.puncard_time = '21:00:00'self.loadDataBase(1) def initMenu(self): menuBar = wx.MenuBar() #生成菜單欄menu_Font = wx.Font()#Font(faceName='consolas',pointsize=20)menu_Font.SetPointSize(14)menu_Font.SetWeight(wx.BOLD) registerMenu = wx.Menu() #生成菜單self.new_register = wx.MenuItem(registerMenu,ID_NEW_REGISTER,'新建錄入')self.new_register.SetBitmap(wx.Bitmap('drawable/new_register.png'))self.new_register.SetTextColour('SLATE BLUE')self.new_register.SetFont(menu_Font)registerMenu.Append(self.new_register) self.finish_register = wx.MenuItem(registerMenu,ID_FINISH_REGISTER,'完成錄入')self.finish_register.SetBitmap(wx.Bitmap('drawable/finish_register.png'))self.finish_register.SetTextColour('SLATE BLUE')self.finish_register.SetFont(menu_Font)self.finish_register.Enable(False)registerMenu.Append(self.finish_register) puncardMenu = wx.Menu()self.start_punchcard = wx.MenuItem(puncardMenu,ID_START_PUNCHCARD,'開始簽到')self.start_punchcard.SetBitmap(wx.Bitmap('drawable/start_punchcard.png'))self.start_punchcard.SetTextColour('SLATE BLUE')self.start_punchcard.SetFont(menu_Font)puncardMenu.Append(self.start_punchcard) self.close_logcat = wx.MenuItem(logcatMenu, ID_CLOSE_LOGCAT, '關閉日志')self.close_logcat.SetBitmap(wx.Bitmap('drawable/close_logcat.png'))self.close_logcat.SetFont(menu_Font)self.close_logcat.SetTextColour('SLATE BLUE')logcatMenu.Append(self.close_logcat) menuBar.Append(registerMenu,'&人臉錄入')menuBar.Append(puncardMenu,'&刷臉簽到')menuBar.Append(logcatMenu,'&考勤日志')self.SetMenuBar(menuBar) self.Bind(wx.EVT_MENU,self.OnNewRegisterClicked,id=ID_NEW_REGISTER)self.Bind(wx.EVT_MENU,self.OnFinishRegisterClicked,id=ID_FINISH_REGISTER)self.Bind(wx.EVT_MENU,self.OnStartPunchCardClicked,id=ID_START_PUNCHCARD)self.Bind(wx.EVT_MENU,self.OnEndPunchCardClicked,id=ID_END_PUNCARD)self.Bind(wx.EVT_MENU,self.OnOpenLogcatClicked,id=ID_OPEN_LOGCAT)self.Bind(wx.EVT_MENU,self.OnCloseLogcatClicked,id=ID_CLOSE_LOGCAT) pass def OnCloseLogcatClicked(self,event):self.SetSize(920,560) self.initGallery()pass def register_cap(self,event):# 創建 cv2 攝像頭對象self.cap = cv2.VideoCapture(0)# cap.set(propId, value)# 設置視頻參數,propId設置的視頻參數,value設置的參數值# self.cap.set(3, 600)# self.cap.set(4,600)# cap是否初始化成功while self.cap.isOpened(): # cap.read() # 返回兩個值: # 一個布爾值true/false,用來判斷讀取視頻是否成功/是否到視頻末尾 # 圖像對象,圖像的三維矩陣 flag, im_rd = self.cap.read() # 每幀數據延時1ms,延時為0讀取的是靜態幀 kk = cv2.waitKey(1) # 人臉數 dets dets = detector(im_rd, 1) # 檢測到人臉 if len(dets) != 0:biggest_face = dets[0]#取占比最大的臉maxArea = 0for det in dets: w = det.right() - det.left() h = det.top()-det.bottom() if w*h > maxArea:biggest_face = detmaxArea = w*h# 繪制矩形框 cv2.rectangle(im_rd, tuple([biggest_face.left(), biggest_face.top()]), tuple([biggest_face.right(), biggest_face.bottom()]), (255, 0, 0), 2)img_height, img_width = im_rd.shape[:2]image1 = cv2.cvtColor(im_rd, cv2.COLOR_BGR2RGB)pic = wx.Bitmap.FromBuffer(img_width, img_height, image1)# 顯示圖片在panel上self.bmp.SetBitmap(pic) # 獲取當前捕獲到的圖像的所有人臉的特征,存儲到 features_cap_arrshape = predictor(im_rd, biggest_face)features_cap = facerec.compute_face_descriptor(im_rd, shape) # 對于某張人臉,遍歷所有存儲的人臉特征for i,knew_face_feature in enumerate(self.knew_face_feature): # 將某張人臉與存儲的所有人臉數據進行比對 compare = return_euclidean_distance(features_cap, knew_face_feature) if compare == 'same': # 找到了相似臉self.infoText.AppendText(self.getDateAndTime()+'工號:'+str(self.knew_id[i]) +' 姓名:'+self.knew_name[i]+' 的人臉數據已存在rn')self.flag_registed = Trueself.OnFinishRegister()_thread.exit() # print(features_known_arr[i][-1])face_height = biggest_face.bottom()-biggest_face.top()face_width = biggest_face.right()- biggest_face.left()im_blank = np.zeros((face_height, face_width, 3), np.uint8)try: for ii in range(face_height):for jj in range(face_width): im_blank[ii][jj] = im_rd[biggest_face.top() + ii]parent=self.bmp,max=100000000,min=ID_WORKER_UNAVIABLE) for knew_id in self.knew_id:if knew_id == self.id: self.id = ID_WORKER_UNAVIABLE wx.MessageBox(message='工號已存在,請重新輸入', caption='警告') while self.name == ’’: self.name = wx.GetTextFromUser(message='請輸入您的的姓名,用于創建姓名文件夾', caption='溫馨提示', default_value='', parent=self.bmp) # 監測是否重名 for exsit_name in (os.listdir(PATH_FACE)):if self.name == exsit_name: wx.MessageBox(message='姓名文件夾已存在,請重新輸入', caption='警告') self.name = ’’ breakos.makedirs(PATH_FACE+self.name)_thread.start_new_thread(self.register_cap,(event,))pass def OnFinishRegister(self): self.new_register.Enable(True)self.finish_register.Enable(False)self.cap.release() self.bmp.SetBitmap(wx.Bitmap(self.pic_index))if self.flag_registed == True: dir = PATH_FACE + self.name for file in os.listdir(dir):os.remove(dir+'/'+file)print('已刪除已錄入人臉的圖片', dir+'/'+file) os.rmdir(PATH_FACE + self.name) print('已刪除已錄入人臉的姓名文件夾', dir) self.initData() returnif self.pic_num>0: pics = os.listdir(PATH_FACE + self.name) feature_list = [] feature_average = [] for i in range(len(pics)):pic_path = PATH_FACE + self.name + '/' + pics[i]print('正在讀的人臉圖像:', pic_path)img = iio.imread(pic_path)img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)dets = detector(img_gray, 1)if len(dets) != 0: shape = predictor(img_gray, dets[0]) face_descriptor = facerec.compute_face_descriptor(img_gray, shape) feature_list.append(face_descriptor)else: face_descriptor = 0 print('未在照片中識別到人臉') if len(feature_list) > 0:for j in range(128): #防止越界 feature_average.append(0) for i in range(len(feature_list)):feature_average[j] += feature_list[i][j] feature_average[j] = (feature_average[j]) / len(feature_list)self.insertARow([self.id,self.name,feature_average],1)self.infoText.AppendText(self.getDateAndTime()+'工號:'+str(self.id) +' 姓名:'+self.name+' 的人臉數據已成功存入rn') pass else: os.rmdir(PATH_FACE + self.name) print('已刪除空文件夾',PATH_FACE + self.name)self.initData() def OnFinishRegisterClicked(self,event):self.OnFinishRegister()pass def OnStartPunchCardClicked(self,event):# cur_hour = datetime.datetime.now().hour# print(cur_hour)# if cur_hour>=8 or cur_hour<6:# wx.MessageBox(message=’’’您錯過了今天的簽到時間,請明天再來n# 每天的簽到時間是:6:00~7:59’’’, caption='警告')# returnself.start_punchcard.Enable(False)self.end_puncard.Enable(True)self.loadDataBase(2)threading.Thread(target=self.punchcard_cap,args=(event,)).start()#_thread.start_new_thread(self.punchcard_cap,(event,))pass def OnEndPunchCardClicked(self,event):self.start_punchcard.Enable(True)self.end_puncard.Enable(False)pass def initGallery(self):self.pic_index = wx.Image('drawable/index.png', wx.BITMAP_TYPE_ANY).Scale(600, 500)self.bmp = wx.StaticBitmap(parent=self, pos=(320,0), bitmap=wx.Bitmap(self.pic_index))pass def getDateAndTime(self):dateandtime = strftime('%Y-%m-%d %H:%M:%S',localtime())return '['+dateandtime+']' #數據庫部分 #初始化數據庫 def initDatabase(self):conn = sqlite3.connect('inspurer.db') #建立數據庫連接cur = conn.cursor() #得到游標對象cur.execute(’’’create table if not exists worker_info(name text not null,id int not null primary key,face_feature array not null)’’’)cur.execute(’’’create table if not exists logcat (datetime text not null, id int not null, name text not null, late text not null)’’’)cur.close()conn.commit()conn.close() def adapt_array(self,arr):out = io.BytesIO()np.save(out, arr)out.seek(0) dataa = out.read()# 壓縮數據流return sqlite3.Binary(zlib.compress(dataa, zlib.Z_BEST_COMPRESSION)) def convert_array(self,text):out = io.BytesIO(text)out.seek(0) dataa = out.read()# 解壓縮數據流out = io.BytesIO(zlib.decompress(dataa))return np.load(out) def insertARow(self,Row,type):conn = sqlite3.connect('inspurer.db') # 建立數據庫連接cur = conn.cursor() # 得到游標對象if type == 1: cur.execute('insert into worker_info (id,name,face_feature) values(?,?,?)', (Row[0],Row[1],self.adapt_array(Row[2]))) print('寫人臉數據成功')if type == 2: cur.execute('insert into logcat (id,name,datetime,late) values(?,?,?,?)',(Row[0],Row[1],Row[2],Row[3])) print('寫日志成功') passcur.close()conn.commit()conn.close()pass def loadDataBase(self,type): conn = sqlite3.connect('inspurer.db') # 建立數據庫連接cur = conn.cursor() # 得到游標對象 if type == 1: self.knew_id = [] self.knew_name = [] self.knew_face_feature = [] cur.execute(’select id,name,face_feature from worker_info’) origin = cur.fetchall() for row in origin:print(row[0])self.knew_id.append(row[0])print(row[1])self.knew_name.append(row[1])print(self.convert_array(row[2]))self.knew_face_feature.append(self.convert_array(row[2]))if type == 2: self.logcat_id = [] self.logcat_name = [] self.logcat_datetime = [] self.logcat_late = [] cur.execute(’select id,name,datetime,late from logcat’) origin = cur.fetchall() for row in origin:print(row[0])self.logcat_id.append(row[0])print(row[1])self.logcat_name.append(row[1])print(row[2])self.logcat_datetime.append(row[2])print(row[3])self.logcat_late.append(row[3])passapp = wx.App()frame = WAS()frame.Show()app.MainLoop()

運行結果如下:

python opencv人臉識別考勤系統的完整源碼

C++學習參考實例:

使用C++ MFC編寫一個簡單的五子棋游戲程序

https://www.jb51.net/article/180940.htm

C++實現簡易五子棋游戲

https://www.jb51.net/article/190548.htm

c++ 基于opencv 識別、定位二維碼

https://www.jb51.net/article/207158.htm

到此這篇關于python opencv人臉識別考勤系統的完整源碼的文章就介紹到這了,更多相關python 人臉識別考勤系統內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
天堂а√在线最新版中文在线| 一区二区三区网站| 日本一区二区高清不卡| 欧美日韩一区自拍| 91欧美日韩在线| 国产精品三上| 欧美美女一区| 先锋影音久久久| 亚洲激情中文| 婷婷丁香综合| 久久91导航| 欧洲av一区二区| 国产高潮在线| 国产一区2区| 日韩精品dvd| 国产亚洲一区二区手机在线观看| 91视频久久| 国产精品成人3p一区二区三区| 不卡中文一二三区| 欧美日韩视频网站| 欧美日韩精品免费观看视欧美高清免费大片 | 日韩欧美三级| 久久中文字幕一区二区三区| 久久精品72免费观看| 免费在线成人网| 日韩在线观看中文字幕| 日韩av一区二区在线影视| 国产精品大片免费观看| 免费视频一区二区三区在线观看| 麻豆精品一区二区综合av| 精品一区视频| 亚洲深夜视频| 欧美日韩免费看片| 久久精品国产www456c0m| 欧美日韩免费观看一区=区三区 | 高清久久精品| 激情久久中文字幕| 亚洲色图网站| 麻豆成人91精品二区三区| 日韩免费av| 久热综合在线亚洲精品| 久久国产三级| 日韩不卡在线| 中文字幕日韩亚洲| 成人在线视频区| 国产亚洲激情| 久久gogo国模啪啪裸体| 国产 日韩 欧美一区| 欧美大黑bbbbbbbbb在线| 国产欧美日韩一级| 久久久精品五月天| 日本特黄久久久高潮| 日韩高清不卡| 青青国产91久久久久久| 日韩免费看片| 日韩福利视频网| 欧美日韩一区二区综合| 国产午夜久久av| 国产专区一区| 久久超碰99| 热久久久久久久| 97精品国产福利一区二区三区| 久久中文字幕一区二区三区| 99免费精品| 亚洲黄页一区| 国产精品99久久免费| 婷婷久久一区| 你懂的国产精品| 亚洲一区网站| 国产一区二区三区91| 亚洲精品系列| 91精品亚洲| 欧美激情精品| 蜜臀精品一区二区三区在线观看| 日本久久综合| 国产一卡不卡| 中文无码日韩欧| 日韩精品一区二区三区免费观看| 亚洲欧洲免费| japanese国产精品| 91欧美国产| 亚洲激情婷婷| 五月激情久久| 久久一区欧美| 欧美精品中文| 亚洲一区二区三区在线免费| 国产综合婷婷| 免费高潮视频95在线观看网站| 国产精品nxnn| 日韩精品欧美精品| 亚洲综合日韩| 亚洲性图久久| 日韩av影院| 日韩成人a**站| 成人日韩在线| 蜜臀91精品一区二区三区| 韩国三级一区| 91日韩欧美| 久久精品国产在热久久| 久久精品xxxxx| 亚洲精品乱码日韩| 国产婷婷精品| 婷婷激情图片久久| 亚洲一级二级| 999国产精品视频| 在线看片福利| 国产成人免费视频网站视频社区| 国产日韩一区二区三免费高清| 国产亚洲在线| 狠狠爱成人网| 欧美日韩国产欧| 激情综合激情| 亚洲第一精品影视| 激情自拍一区| 免费久久久久久久久| 久久久久久久久久久9不雅视频| 丁香婷婷久久| 高清一区二区三区av| 精品久久一区| 四虎国产精品免费观看| а√天堂8资源在线| 福利片在线一区二区| 风间由美中文字幕在线看视频国产欧美| 日本不卡一区二区三区| 日韩高清欧美激情| 久久国产三级精品| 999久久久91| 在线亚洲欧美| 高清久久一区| 欧美黄色一区二区| 国产精品对白久久久久粗| 国产精品一页| 国产另类在线| 精品国产亚洲一区二区三区大结局| 久久只有精品| 麻豆国产精品视频| 久久久久久自在自线| 欧产日产国产精品视频| 国产精品福利在线观看播放| 97精品国产一区二区三区| 日韩精品电影| 亚洲精品小说| 亚洲综合激情在线| 清纯唯美亚洲综合一区| 国产精品2023| 特黄毛片在线观看| 红桃视频国产精品| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 日本91福利区| 卡一卡二国产精品| 国产精品久久观看| 久久久精品日韩| 免播放器亚洲| 欧美日韩精品一区二区三区在线观看| 欧美日韩午夜| 裤袜国产欧美精品一区| 最新日韩欧美| 91成人小视频| 日韩深夜视频| 视频一区视频二区中文字幕| 91精品在线免费视频| 成人美女视频| 日韩一区二区免费看| 日本少妇一区二区| www.com.cn成人| 亚洲激情社区| 国产日韩欧美在线播放不卡| 亚洲深夜视频| 亚洲一区欧美| 国产成人精品免费视| 午夜一级久久| 欧美黑人巨大videos精品| 久久久影院免费| 欧美日韩亚洲国产精品| 久久国产免费| 日韩av三区| 欧美综合另类| 国产日韩视频在线| 香蕉精品久久| 欧美日韩精品一区二区三区视频 | 日韩va亚洲va欧美va久久| 成人一区不卡| 日韩一区精品字幕| 国产+成+人+亚洲欧洲在线| 国产一区二区高清| 国产探花在线精品| 欧产日产国产精品视频| 日本不卡视频在线| 久久九九99| 欧美亚洲自偷自偷| 欧美高清不卡| 麻豆91精品91久久久的内涵| 亚洲欧美日韩一区在线观看| 丰满少妇一区| 日韩一区二区三区免费视频| 91精品在线观看国产| 欧美国产先锋| 欧美国产专区| 日韩国产一区二| 亚洲天堂久久|