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

您的位置:首頁技術(shù)文章
文章詳情頁

python opencv人臉識(shí)別考勤系統(tǒng)的完整源碼

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

如需安裝運(yùn)行環(huán)境或遠(yuǎn)程調(diào)試,可加QQ905733049, 或QQ2945218359由專業(yè)技術(shù)人員遠(yuǎn)程協(xié)助!

運(yùn)行結(jié)果如下:

python opencv人臉識(shí)別考勤系統(tǒng)的完整源碼

代碼如下:

import wximport wx.gridfrom time import localtime,strftimeimport osimport ioimport zlibimport dlib # 人臉識(shí)別的庫dlibimport numpy as np # 數(shù)據(jù)處理的庫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 預(yù)測(cè)器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='員工考勤系統(tǒng)',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, '關(guān)閉日志')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):# 創(chuàng)建 cv2 攝像頭對(duì)象self.cap = cv2.VideoCapture(0)# cap.set(propId, value)# 設(shè)置視頻參數(shù),propId設(shè)置的視頻參數(shù),value設(shè)置的參數(shù)值# self.cap.set(3, 600)# self.cap.set(4,600)# cap是否初始化成功while self.cap.isOpened(): # cap.read() # 返回兩個(gè)值: # 一個(gè)布爾值true/false,用來判斷讀取視頻是否成功/是否到視頻末尾 # 圖像對(duì)象,圖像的三維矩陣 flag, im_rd = self.cap.read() # 每幀數(shù)據(jù)延時(shí)1ms,延時(shí)為0讀取的是靜態(tài)幀 kk = cv2.waitKey(1) # 人臉數(shù) dets dets = detector(im_rd, 1) # 檢測(cè)到人臉 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) # 獲取當(dāng)前捕獲到的圖像的所有人臉的特征,存儲(chǔ)到 features_cap_arrshape = predictor(im_rd, biggest_face)features_cap = facerec.compute_face_descriptor(im_rd, shape) # 對(duì)于某張人臉,遍歷所有存儲(chǔ)的人臉特征for i,knew_face_feature in enumerate(self.knew_face_feature): # 將某張人臉與存儲(chǔ)的所有人臉數(shù)據(jù)進(jìn)行比對(duì) compare = return_euclidean_distance(features_cap, knew_face_feature) if compare == 'same': # 找到了相似臉self.infoText.AppendText(self.getDateAndTime()+'工號(hào):'+str(self.knew_id[i]) +' 姓名:'+self.knew_name[i]+' 的人臉數(shù)據(jù)已存在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='工號(hào)已存在,請(qǐng)重新輸入', caption='警告') while self.name == ’’: self.name = wx.GetTextFromUser(message='請(qǐng)輸入您的的姓名,用于創(chuàng)建姓名文件夾', caption='溫馨提示', default_value='', parent=self.bmp) # 監(jiān)測(cè)是否重名 for exsit_name in (os.listdir(PATH_FACE)):if self.name == exsit_name: wx.MessageBox(message='姓名文件夾已存在,請(qǐng)重新輸入', 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('未在照片中識(shí)別到人臉') 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()+'工號(hào):'+str(self.id) +' 姓名:'+self.name+' 的人臉數(shù)據(jù)已成功存入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=’’’您錯(cuò)過了今天的簽到時(shí)間,請(qǐng)明天再來n# 每天的簽到時(shí)間是: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+']' #數(shù)據(jù)庫部分 #初始化數(shù)據(jù)庫 def initDatabase(self):conn = sqlite3.connect('inspurer.db') #建立數(shù)據(jù)庫連接cur = conn.cursor() #得到游標(biāo)對(duì)象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()# 壓縮數(shù)據(jù)流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()# 解壓縮數(shù)據(jù)流out = io.BytesIO(zlib.decompress(dataa))return np.load(out) def insertARow(self,Row,type):conn = sqlite3.connect('inspurer.db') # 建立數(shù)據(jù)庫連接cur = conn.cursor() # 得到游標(biāo)對(duì)象if type == 1: cur.execute('insert into worker_info (id,name,face_feature) values(?,?,?)', (Row[0],Row[1],self.adapt_array(Row[2]))) print('寫人臉數(shù)據(jù)成功')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') # 建立數(shù)據(jù)庫連接cur = conn.cursor() # 得到游標(biāo)對(duì)象 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()

運(yùn)行結(jié)果如下:

python opencv人臉識(shí)別考勤系統(tǒng)的完整源碼

C++學(xué)習(xí)參考實(shí)例:

使用C++ MFC編寫一個(gè)簡(jiǎn)單的五子棋游戲程序

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

C++實(shí)現(xiàn)簡(jiǎn)易五子棋游戲

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

c++ 基于opencv 識(shí)別、定位二維碼

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

到此這篇關(guān)于python opencv人臉識(shí)別考勤系統(tǒng)的完整源碼的文章就介紹到這了,更多相關(guān)python 人臉識(shí)別考勤系統(tǒng)內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产一区二区精品福利地址| 日本天堂一区| 丝袜亚洲另类欧美| 99香蕉国产精品偷在线观看| 国产视频一区三区| 夜夜嗨一区二区三区| 樱桃成人精品视频在线播放| 免费在线观看日韩欧美| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲综合日韩| 蜜臀91精品国产高清在线观看| 在线一区欧美| 日韩三区四区| 欧美日韩伊人| 美腿丝袜亚洲一区| 久久男人av资源站| 久久久久久夜| 91精品99| 日本成人中文字幕| 欧美日韩精品一本二本三本 | 日韩国产欧美| 亚洲永久av| 欧美二区视频| 免费观看日韩电影| 国产亚洲一区二区三区啪| 久久尤物视频| 欧美色图一区| 亚洲一级大片| 国产欧美一区二区精品久久久 | 私拍精品福利视频在线一区| 私拍精品福利视频在线一区| 久久性天堂网| 国产精品久久久免费| 日韩欧美自拍| 视频一区免费在线观看| 国产麻豆精品| 97精品中文字幕| re久久精品视频| 日本中文字幕一区二区| 高清一区二区三区av| 99riav1国产精品视频| 日韩不卡免费视频| 日韩在线观看一区| 亚洲综合婷婷| 日韩1区2区| 欧美中文日韩| 精品国产91| 视频在线观看一区二区三区| 久久99精品久久久野外观看| 婷婷国产精品| 日韩精品国产精品| 成人小电影网站| 日韩精品欧美成人高清一区二区| 视频在线在亚洲| 日韩高清在线不卡| 日韩大片在线播放| 视频一区二区三区在线| 国产一区2区| 中文字幕av亚洲精品一部二部| 国产毛片久久| 国产精品自拍区| 亚洲一本视频| 久久丁香四色| 亚洲欧美视频| 国产精品毛片久久| 青青草国产成人99久久| 久久精品国内一区二区三区水蜜桃| 国产成人精品一区二区三区视频| 国产麻豆精品| 欧美 日韩 国产一区二区在线视频| 五月天av在线| 天堂精品久久久久| 亚洲国内精品| 成人午夜在线| 亚洲另类黄色| 99热国内精品| 精品久久电影| 欧美亚洲综合视频| 久色成人在线| 久久国产影院| 久久免费福利| 婷婷久久免费视频| 五月天久久777| 精品国产第一福利网站| 国产日韩精品视频一区二区三区| 国产福利资源一区| 老牛影视一区二区三区| 国产一区2区| 国产精品久久久久9999高清| 喷白浆一区二区| 好看的亚洲午夜视频在线| 日韩欧美精品| 国产va在线视频| 久久不卡日韩美女| 日韩在线成人| 丝袜亚洲另类欧美| 9久re热视频在线精品| 日本久久成人网| 成人污污视频| 乱一区二区av| 欧美一级网站| 天堂va欧美ⅴa亚洲va一国产| 久久精品国产福利| 综合干狼人综合首页| 国产精品7m凸凹视频分类| 国产aa精品| 国产精品扒开腿做爽爽爽软件| 亚洲黄色免费看| 国产剧情在线观看一区| 亚洲专区视频| 蜜臀久久99精品久久久久宅男| 国产精品欧美三级在线观看| 欧美精品一区二区三区精品| 国产精品婷婷| 自由日本语亚洲人高潮| 亚洲综合在线电影| 蜜桃久久久久| 免费视频一区二区三区在线观看 | 三级在线观看一区二区 | 麻豆网站免费在线观看| 国产精品日韩精品在线播放| 日本欧美在线| 视频一区免费在线观看| 在线亚洲自拍| 亚洲伊人影院| 亚洲精品乱码日韩| 日韩久久一区| 国产欧美一区二区三区米奇| 久久精品一本| 成人自拍av| 免费视频亚洲| 国产亚洲综合精品| 麻豆精品网站| 亚洲精品第一| 国产欧美一区二区三区国产幕精品| 久久国产亚洲| 久久精品不卡| aa亚洲婷婷| 蜜臀a∨国产成人精品| 日韩激情网站| 麻豆国产精品| 国产一区二区三区不卡av| 三级小说欧洲区亚洲区| 黄色日韩在线| 日韩精品欧美大片| 国产一区2区在线观看| 99精品网站| 一区二区三区国产在线| 日欧美一区二区| 国产精成人品2018| 色偷偷偷在线视频播放| av亚洲免费| 日本不卡视频一二三区| 欧美日韩一区二区三区在线电影| 99国产精品私拍| 天堂成人国产精品一区| 欧美午夜三级| 岛国av在线播放| 一区久久精品| 久久激情综合网| 亚洲国产福利| 亚洲精品一二三区区别| 日韩有吗在线观看| 97精品国产福利一区二区三区| 国产区精品区| 国产成人久久精品一区二区三区| 久久国产精品免费精品3p| 国产精品红桃| 久久美女性网| 日韩欧美2区| 国产精品麻豆久久| 免费精品视频最新在线| 久久精品福利| 羞羞答答国产精品www一本| 国产精品久久| 在线亚洲观看| 国产精品视频一区二区三区| 欧美日韩亚洲在线观看| 日韩一区二区三区免费视频| 欧美www视频在线观看| 亚洲免费中文| 国产在线不卡一区二区三区| 一区视频在线| 精品一区二区三区四区五区| 日韩天堂av| 久久精品天堂| 日韩影院在线观看| 日本不良网站在线观看| 日韩精品欧美精品| 精品在线91| 久久久久伊人| 男人的天堂久久精品| 日韩精品不卡一区二区| 日本精品国产| 国模 一区 二区 三区| 国产另类在线| 免费在线观看日韩欧美| 欧美日韩国产观看视频| 久久亚洲二区| 久久精品中文|