久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

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

python實(shí)現(xiàn)的人臉識別打卡系統(tǒng)

瀏覽:104日期:2022-06-20 11:26:36
目錄項(xiàng)目地址:簡介使用主要代碼項(xiàng)目地址:

https://github.com/king-xw/Face_Recogntion

簡介

本倉庫是使用python編寫的一個簡單的人臉識別考勤打卡系統(tǒng)

主要功能有錄入人臉信息、人臉識別打卡、設(shè)置上下班時間、導(dǎo)出打卡日志等

下面是各模塊截圖

首頁

python實(shí)現(xiàn)的人臉識別打卡系統(tǒng)

錄入人臉信息

python實(shí)現(xiàn)的人臉識別打卡系統(tǒng)

人臉識別打卡

python實(shí)現(xiàn)的人臉識別打卡系統(tǒng)

輸出日志

python實(shí)現(xiàn)的人臉識別打卡系統(tǒng)

使用

直接運(yùn)行**==workAttendanceSystem==**.py即可

主要代碼

import datetimeimport timeimport win32apiimport win32conimport wximport wx.gridimport sqlite3from time import localtime, strftimeimport osfrom skimage import io as iioimport ioimport zlibimport dlib # 人臉識別的庫dlibimport numpy as np # 數(shù)據(jù)處理的庫numpyimport cv2 # 圖像處理的庫OpenCvimport _threadimport threadingimport win32com.clientimport tkinter as tkfrom tkinter import filedialogimport csvspk = win32com.client.Dispatch('SAPI.SpVoice')ID_NEW_REGISTER = 160ID_FINISH_REGISTER = 161ID_START_PUNCHCARD = 190ID_END_PUNCARD = 191ID_TODAY_LOGCAT = 283ID_CUSTOM_LOGCAT = 284ID_WORKING_HOURS = 301ID_OFFWORK_HOURS = 302ID_DELETE = 303ID_WORKER_UNAVIABLE = -1PATH_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ù)測器detector = dlib.get_frontal_face_detector()predictor = dlib.shape_predictor(’model/shape_predictor_68_face_landmarks.dat’)def speak_info(info): spk.Speak(info)def return_euclidean_distance(feature_1, feature_2): feature_1 = np.array(feature_1) feature_2 = np.array(feature_2) dist = np.sqrt(np.sum(np.square(feature_1 - feature_2))) print('歐式距離: ', dist) if dist > 0.4:return 'diff' else:return 'same'class WAS(wx.Frame): def __init__(self):wx.Frame.__init__(self, parent=None,, size=(920, 560))self.Folderpath = Noneself.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.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 BLACK')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 BLACK')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 BLACK')self.start_punchcard.SetFont(menu_Font)puncardMenu.Append(self.start_punchcard)self.end_puncard = wx.MenuItem(puncardMenu, ID_END_PUNCARD, '結(jié)束簽到')self.end_puncard.SetBitmap(wx.Bitmap('drawable/end_puncard.png'))self.end_puncard.SetTextColour('SLATE BLACK')self.end_puncard.SetFont(menu_Font)self.end_puncard.Enable(False)puncardMenu.Append(self.end_puncard)logcatMenu = wx.Menu()self.today_logcat = wx.MenuItem(logcatMenu, ID_TODAY_LOGCAT, '輸出今日日志')self.today_logcat.SetBitmap(wx.Bitmap('drawable/open_logcat.png'))self.today_logcat.SetFont(menu_Font)self.today_logcat.SetTextColour('SLATE BLACK')logcatMenu.Append(self.today_logcat)self.custom_logcat = wx.MenuItem(logcatMenu, ID_CUSTOM_LOGCAT, '輸出自定義日志')self.custom_logcat.SetBitmap(wx.Bitmap('drawable/open_logcat.png'))self.custom_logcat.SetFont(menu_Font)self.custom_logcat.SetTextColour('SLATE BLACK')logcatMenu.Append(self.custom_logcat)setMenu = wx.Menu()self.working_hours = wx.MenuItem(setMenu, ID_WORKING_HOURS, '上班時間')self.working_hours.SetBitmap(wx.Bitmap('drawable/close_logcat.png'))self.working_hours.SetFont(menu_Font)self.working_hours.SetTextColour('SLATE BLACK')setMenu.Append(self.working_hours)self.offwork_hours = wx.MenuItem(setMenu, ID_OFFWORK_HOURS, '下班時間')self.offwork_hours.SetBitmap(wx.Bitmap('drawable/open_logcat.png'))self.offwork_hours.SetFont(menu_Font)self.offwork_hours.SetTextColour('SLATE BLACK')setMenu.Append(self.offwork_hours)self.delete = wx.MenuItem(setMenu, ID_DELETE, '刪除人員')self.delete.SetBitmap(wx.Bitmap('drawable/end_puncard.png'))self.delete.SetFont(menu_Font)self.delete.SetTextColour('SLATE BLACK')setMenu.Append(self.delete)menuBar.Append(registerMenu, '&人臉錄入')menuBar.Append(puncardMenu, '&刷臉簽到')menuBar.Append(logcatMenu, '&考勤日志')menuBar.Append(setMenu, '&設(shè)置')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.ExportTodayLog, id=ID_TODAY_LOGCAT)self.Bind(wx.EVT_MENU, self.ExportCustomLog, id=ID_CUSTOM_LOGCAT)self.Bind(wx.EVT_MENU, self.SetWorkingHours, id=ID_WORKING_HOURS)self.Bind(wx.EVT_MENU, self.SetOffWorkHours, id=ID_OFFWORK_HOURS)self.Bind(wx.EVT_MENU, self.deleteBtn, id=ID_DELETE) def SetWorkingHours(self, event):global workingglobal setWorkingSignsetWorkingSign = Falseself.loadDataBase(1)# self.working_hours.Enable(True)self.working_hours = wx.GetTextFromUser(message='請輸入上班時間', caption='溫馨提示', default_value='08:00:00',parent=None)working = self.working_hourssetWorkingSign = Truepass def SetOffWorkHours(self, event):global offworkingself.loadDataBase(1)# self.offwork_hours.Enable(True)self.offwork_hours = wx.GetTextFromUser(message='請輸入下班時間', caption='溫馨提示', default_value='18:00:00',parent=None)offworking = self.offwork_hourswin32api.MessageBox(0, '請確保同時設(shè)置上班時間和下班時間并且先設(shè)置上班時間', '提醒', win32con.MB_ICONWARNING)if setWorkingSign: self.loadDataBase(4)else: win32api.MessageBox(0, '您未設(shè)置上班時間', '提醒', win32con.MB_ICONWARNING)pass def ExportTodayLog(self, event):global Folderpath1Folderpath1 = ''self.save_route1(event)if not Folderpath1 == '': self.loadDataBase(3) day = time.strftime('%Y-%m-%d') path = Folderpath1 + '/' + day + '.csv' f = open(path, ’w’, newline=’’, encoding=’utf-8’) csv_writer = csv.writer(f) csv_writer.writerow(['編號', '姓名', '打卡時間', '是否遲到']) size = len(logcat_id) index = 0 while size - 1 >= index:localtime1 = str(logcat_datetime[index]).replace(’[’, ’’).replace(’]’, ’’)csv_writer.writerow([logcat_id[index], logcat_name[index], localtime1, logcat_late[index]])index += 1; f.close()pass def ExportCustomLog(self, event):global dialogglobal t1global t2global Folderpath2Folderpath2 = ''dialog = wx.Dialog(self)Label1 = wx.StaticText(dialog, -1, '輸入員工id', pos=(30, 10))t1 = wx.TextCtrl(dialog, -1, ’’, pos=(130, 10), size=(130, -1))Label2 = wx.StaticText(dialog, -1, '輸出日期(天)', pos=(30, 50))sampleList = [u’1’, u’3’, u’7’, u’30’]t2 = wx.ComboBox(dialog, -1, value='1', pos=(130, 50), size=(130, -1), choices=sampleList, style=wx.CB_READONLY)button = wx.Button(dialog, -1, '選擇文件保存路徑', pos=(120, 90))button.Bind(wx.EVT_BUTTON, self.save_route2, button)btn_confirm = wx.Button(dialog, 1, '確認(rèn)', pos=(30, 150))btn_close = wx.Button(dialog, 2, '取消', pos=(250, 150))btn_close.Bind(wx.EVT_BUTTON, self.OnClose, btn_close)btn_confirm.Bind(wx.EVT_BUTTON, self.DoCustomLog, btn_confirm)dialog.ShowModal()pass # 關(guān)閉主窗口前確認(rèn)一下是否真的關(guān)閉 def OnClose(self, event):dlg = wx.MessageDialog(None, u’確定要關(guān)閉本窗口嗎?’, u’操作提示’, wx.YES_NO)if dlg.ShowModal() == wx.ID_YES: dialog.Destroy() def OnClose1(self, event):dlg = wx.MessageDialog(None, u’確定要關(guān)閉本窗口嗎?’, u’操作提示’, wx.YES_NO)if dlg.ShowModal() == wx.ID_YES: dialog1.Destroy() def OnYes(self, event):dlg = wx.MessageDialog(None, u’確定要刪除該編號的員工?’, u’操作提示’, wx.YES_NO)if dlg.ShowModal() == wx.ID_YES: return True def deleteBtn(self, event):global dialog1global t4dialog1 = wx.Dialog(self)Label1 = wx.StaticText(dialog1, -1, '輸入員工id: ', pos=(40, 34))t4 = wx.TextCtrl(dialog1, -1, ’’, pos=(130, 30), size=(130, -1))btn_confirm = wx.Button(dialog1, 1, '確認(rèn)', pos=(30, 150))btn_close = wx.Button(dialog1, 2, '取消', pos=(250, 150))btn_close.Bind(wx.EVT_BUTTON, self.OnClose1, btn_close)btn_confirm.Bind(wx.EVT_BUTTON, self.deleteById, btn_confirm)dialog1.ShowModal() def DoCustomLog(self, event):if not Folderpath2 == '': number = t1.GetValue() days = t2.GetValue() flag = self.findById(number, days) print('查詢的天數(shù)是:', days) if flag:row = len(find_id)path = Folderpath2 + ’/’ + find_name[0] + ’.csv’f = open(path, ’w’, newline=’’, encoding=’utf-8’)csv_writer = csv.writer(f)csv_writer.writerow(['編號', '姓名', '打卡時間', '是否遲到'])for index in range(row): s1 = str(find_datetime[index]).replace(’[’, ’’).replace(’]’, ’’) csv_writer.writerow([str(find_id[index]), str(find_name[index]), s1, str(find_late[index])])f.close()success = wx.MessageDialog(None, ’日志保存成功,請注意查看’, ’info’, wx.OK)success.ShowModal() else:warn = wx.MessageDialog(None, ’輸入id不正確,請重新輸入’, ’info’, wx.OK)warn.ShowModal() dialog.Destroy()else: win32api.MessageBox(0, '請輸入文件導(dǎo)出位置', '提醒', win32con.MB_ICONWARNING)pass def deleteById(self, event):global delete_namedelete_name = []id = t4.GetValue()print('刪除員工的id為:', id)conn = sqlite3.connect('inspurer.db') # 建立數(shù)據(jù)庫連接cur = conn.cursor() # 得到游標(biāo)對象sql = ’select name from worker_info where id=’ + idsql1 = ’delete from worker_info where id=’ + idsql2 = ’delete from logcat where id=’ + idlength = len(cur.execute(sql).fetchall())if length <= 0: win32api.MessageBox(0, '沒有查詢到該員工,請重新輸入ID', '提醒', win32con.MB_ICONWARNING) return Falseelse: origin = cur.execute(sql).fetchall() for row in origin:delete_name.append(row[0])name = delete_name[0]print('名字是', name) if self.OnYes(event):cur.execute(sql1)cur.execute(sql2)conn.commit()dir = PATH_FACE + namefor file in os.listdir(dir): os.remove(dir + '/' + file) print('已刪除已錄入人臉的圖片', dir + '/' + file)os.rmdir(PATH_FACE + name)print('已刪除已錄入人臉的姓名文件夾', dir)dialog1.Destroy()self.initData()return True def findById(self, id, day):global find_id, find_name, find_datetime, find_latefind_id = []find_name = []find_datetime = []find_late = []DayAgo = (datetime.datetime.now() - datetime.timedelta(days=int(day)))# 轉(zhuǎn)換為其他字符串格式:day_before = DayAgo.strftime('%Y-%m-%d')today = datetime.date.today()first = today.replace(day=1)last_month = first - datetime.timedelta(days=1)print(last_month.strftime('%Y-%m'))print(last_month)conn = sqlite3.connect('inspurer.db') # 建立數(shù)據(jù)庫連接cur = conn.cursor() # 得到游標(biāo)對象sql = ’select id ,name,datetime,late from logcat where id=’ + idif day == ’30’: str = '’' sql1 = ’select id ,name,datetime,late from logcat where id=’ + id + ’ ’ + ’and datetime like ’ + str + ’%’ + last_month.strftime('%Y-%m') + ’%’ + strelse: sql1 = ’select id ,name,datetime,late from logcat where id=’ + id + ’ ’ + ’and datetime>=’ + day_beforelength = len(cur.execute(sql).fetchall())if length <= 0: return Falseelse: cur.execute(sql1) origin = cur.fetchall() for row in origin:find_id.append(row[0])find_name.append(row[1])find_datetime.append(row[2])find_late.append(row[3]) return Truepass def save_route1(self, event):global Folderpath1root = tk.Tk()root.withdraw()Folderpath1 = filedialog.askdirectory() # 獲得選擇好的文件夾pass def save_route2(self, event):global Folderpath2root = tk.Tk()root.withdraw()Folderpath2 = filedialog.askdirectory() # 獲得選擇好的文件夾pass def register_cap(self, event):# 創(chuàng)建 cv2 攝像頭對象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() # 返回兩個值: # 一個布爾值true/false,用來判斷讀取視頻是否成功/是否到視頻末尾 # 圖像對象,圖像的三維矩陣 flag, im_rd = self.cap.read() # 每幀數(shù)據(jù)延時1ms,延時為0讀取的是靜態(tài)幀 kk = cv2.waitKey(1) # 人臉數(shù) 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)# 獲取當(dāng)前捕獲到的圖像的所有人臉的特征,存儲到 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): # 將某張人臉與存儲的所有人臉數(shù)據(jù)進(jìn)行比對 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] + ' 的人臉數(shù)據(jù)已存在rn')self.flag_registed = Trueself.OnFinishRegister()_thread.exit()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][biggest_face.left() + jj] if len(self.name) > 0:cv2.imencode(’.jpg’, im_blank)[1].tofile( PATH_FACE + self.name + '/img_face_' + str(self.pic_num) + '.jpg') # 正確方法self.pic_num += 1print('寫入本地:', str(PATH_FACE + self.name) + '/img_face_' + str(self.pic_num) + '.jpg')self.infoText.AppendText( self.getDateAndTime() + '圖片:' + str(PATH_FACE + self.name) + '/img_face_' + str(self.pic_num) + '.jpg保存成功rn')except: print('保存照片異常,請對準(zhǔn)攝像頭')if self.new_register.IsEnabled(): _thread.exit()if self.pic_num == 30: self.OnFinishRegister() _thread.exit() def OnNewRegisterClicked(self, event):self.new_register.Enable(False)self.finish_register.Enable(True)self.loadDataBase(1)while self.id == ID_WORKER_UNAVIABLE: self.id = wx.GetNumberFromUser(message='請輸入您的工號(-1不可用)', prompt='工號', caption='溫馨提示', value=ID_WORKER_UNAVIABLE, 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='請輸入您的的姓名,用于創(chuàng)建姓名文件夾', caption='溫馨提示', default_value='', parent=self.bmp) # 監(jiān)測是否重名 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 + ' 的人臉數(shù)據(jù)已成功存入rn') passelse: os.rmdir(PATH_FACE + self.name) print('已刪除空文件夾', PATH_FACE + self.name)self.initData() def OnFinishRegisterClicked(self, event):self.OnFinishRegister()pass def punchcard_cap(self, event):# 調(diào)用設(shè)置上班時間的函數(shù),根據(jù)當(dāng)前時間和上班時間判斷是否遲到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是否初始化成功self.loadDataBase(5)print('長度是')print(len(working_times))if len(working_times) == 0: win32api.MessageBox(0, '您未設(shè)置上班時間,請先設(shè)置上班時間后再設(shè)置下班時間', '提醒', win32con.MB_ICONWARNING) self.start_punchcard.Enable(True) self.end_puncard.Enable(False)else: working = working_times[0] print('-----------') print(working) offworking = offworking_times[0] print('-----------') print(offworking) while self.cap.isOpened():# cap.read()# 返回兩個值:# 一個布爾值true/false,用來判斷讀取視頻是否成功/是否到視頻末尾# 圖像對象,圖像的三維矩陣flag, im_rd = self.cap.read()# 每幀數(shù)據(jù)延時1ms,延時為0讀取的是靜態(tài)幀kk = cv2.waitKey(1)# 人臉數(shù) detsdets = detector(im_rd, 1)# 檢測到人臉if len(dets) != 0: biggest_face = dets[0] # 取占比最大的臉 maxArea = 0 for det in dets:w = det.right() - det.left()h = det.top() - det.bottom()if w * h > maxArea: biggest_face = det maxArea = w * h # 繪制矩形框 cv2.rectangle(im_rd, tuple([biggest_face.left(), biggest_face.top()]), tuple([biggest_face.right(), biggest_face.bottom()]), (255, 0, 255), 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)前捕獲到的圖像的所有人臉的特征,存儲到 features_cap_arr shape = 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):# 將某張人臉與存儲的所有人臉數(shù)據(jù)進(jìn)行比對compare = return_euclidean_distance(features_cap, knew_face_feature)if compare == 'same': # 找到了相似臉 print('same') flag = 0 nowdt = self.getDateAndTime() for j, logcat_name in enumerate(self.logcat_name):if logcat_name == self.knew_name[i] and nowdt[0:nowdt.index(' ')] == self.logcat_datetime[ j][0:self.logcat_datetime[ j].index(' ')]: self.infoText.AppendText(nowdt + '工號:' + str(self.knew_id[i]) + ' 姓名:' + self.knew_name[i] + ' 簽到失敗,重復(fù)簽到rn') speak_info(self.knew_name[i] + ' 簽到失敗,重復(fù)簽到 ') flag = 1 break if flag == 1:break if nowdt[nowdt.index(' ') + 1:-1] <= working:self.infoText.AppendText(nowdt + '工號:' + str(self.knew_id[i]) + ' 姓名:' + self.knew_name[i] + ' 成功簽到,且未遲到rn')speak_info(self.knew_name[i] + ' 成功簽到 ')self.insertARow([self.knew_id[i], self.knew_name[i], nowdt, '否'], 2) elif offworking >= nowdt[nowdt.index(' ') + 1:-1] >= working:self.infoText.AppendText(nowdt + '工號:' + str(self.knew_id[i]) + ' 姓名:' + self.knew_name[i] + ' 成功簽到,但遲到了rn')speak_info(self.knew_name[i] + ' 成功簽到,但遲到了 ')self.insertARow([self.knew_id[i], self.knew_name[i], nowdt, '是'], 2) elif nowdt[nowdt.index(' ') + 1:-1] > offworking:self.infoText.AppendText(nowdt + '工號:' + str(self.knew_id[i]) + ' 姓名:' + self.knew_name[i] + ' 簽到失敗,超過簽到時間rn')speak_info(self.knew_name[i] + ' 簽到失敗,超過下班時間 ') self.loadDataBase(2) break if self.start_punchcard.IsEnabled():self.bmp.SetBitmap(wx.Bitmap(self.pic_index))_thread.exit() def OnStartPunchCardClicked(self, event):self.start_punchcard.Enable(False)self.end_puncard.Enable(True)self.loadDataBase(2)threading.Thread(target=self.punchcard_cap, args=(event,)).start()pass def OnEndPunchCardClicked(self, event):self.start_punchcard.Enable(True)self.end_puncard.Enable(False)pass def initInfoText(self):# 少了這兩句infoText背景顏色設(shè)置失敗,莫名奇怪resultText = wx.StaticText(parent=self, pos=(10, 20), size=(90, 60))resultText.SetBackgroundColour(wx.GREEN)# resultText.SetBackgroundColour((12,12,12))self.info = 'rn' + self.getDateAndTime() + '程序初始化成功rn'# 第二個參數(shù)水平混動條self.infoText = wx.TextCtrl(parent=self, size=(320, 500), style=(wx.TE_MULTILINE | wx.HSCROLL | wx.TE_READONLY))# 前景色,也就是字體顏色self.infoText.SetForegroundColour(’Black’)self.infoText.SetLabel(self.info)font = wx.Font()font.SetPointSize(12)font.SetWeight(wx.BOLD)font.SetUnderlined(True)self.infoText.SetFont(font)self.infoText.SetBackgroundColour(’WHITE’)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)對象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.execute(’’’create table if not exists time (id intconstraint table_name_pkprimary key, working_time time not null, offwork_time time 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)對象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):nowday = self.getDateAndTime()day = nowday[0:nowday.index(' ')]print(day)global logcat_id, logcat_name, logcat_datetime, logcat_late, working_times, offworking_timesconn = sqlite3.connect('inspurer.db') # 建立數(shù)據(jù)庫連接cur = conn.cursor() # 得到游標(biāo)對象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])if type == 3: logcat_id = [] logcat_name = [] logcat_datetime = [] logcat_late = [] s = '’' sql = ’select w.id,w.name,l.datetime,l.late from worker_info w left join logcat l on w.id=l.id and l.datetime like’ + ’ ’ + s + day + ’%’ + s + ’ ’ + ’order by datetime desc’ print(sql) cur.execute(sql) origin = cur.fetchall() for row in origin:print(row[0])logcat_id.append(row[0])print(row[1])logcat_name.append(row[1])print(row[2])logcat_datetime.append(row[2])print(row[3])logcat_late.append(row[3])if type == 4: sql = ’select working_time from time’ cur.execute(sql) countResult = (cur.fetchall()) print(countResult) str = '’' if not countResult:sql = ’insert into time (id,working_time,offworking_time) values (1,’ + str + working + str + ’,’ + str + offworking + str + ’)’cur.execute(sql)print(sql)conn.commit()print('插入時間成功') else:str='’'sql = ’update time set working_time=’ + str + working + str + ’,offworking_time=’ + str + offworking + str + ’ where id=1’cur.execute(sql)conn.commit()print(sql)print('更新時間成功')if type==5: sql = ’select working_time,offworking_time from time’ cur.execute(sql) print(sql) origin = cur.fetchall() print(origin) working_times = [] offworking_times = [] for row in origin:print('這是數(shù)據(jù)庫取出的上班時間')print(row[0])working_times.append(row[0])print('這是數(shù)據(jù)庫取出的下班時間')print(row[1])offworking_times.append(row[1])cur.close()conn.commit()conn.close()passapp = wx.App()frame = WAS()frame.Show()app.MainLoop()

以上就是python實(shí)現(xiàn)的人臉識別打卡系統(tǒng)的詳細(xì)內(nèi)容,更多關(guān)于python 人臉識別打卡的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 一级毛片,一级毛片 | 久久久极品 | 久久久久国产精品 | 午夜一区二区三区 | 久久精品国产亚洲blacked | 久久成人国产精品 | 欧美视频三区 | 国产在线1 | 狠狠av | 国产精品九九九 | 国产精品久久久久久吹潮 | 国产综合亚洲精品一区二 | 在线免费黄色 | 麻豆久久 | 人人澡人人射 | 久久久精品 | 不卡的免费av | 精品亚洲网 | 韩国精品在线 | 久久精品在线视频 | 亚洲欧洲精品视频在线观看 | 成人1区2区 | 日韩欧美视频一区二区三区 | 久久国产精品久久久久久久久久 | 精品久久一区二区 | 成人国产精品一级毛片视频 | 6080亚洲精品一区二区 | 在线看av网址 | 久久久成人av | 91视频一88av | 国产精品久久久久久久久久免费看 | 成人免费在线视频播放 | 在线天堂视频 | 中文av网站 | 国产精品国产成人国产三级 | 一区在线视频 | 久久夜视频| 国内福利视频 | 成人午夜免费视频 | 艹逼逼视频 | 日韩喷潮 | 日韩成人在线一区 | 精品一区二区国产 | 久久国产精品首页 | 亚洲美女在线视频 | 玖玖综合网| 亚洲一区二区三区在线播放 | 激情欧美一区二区三区中文字幕 | 亚洲一区视频在线 | 狠狠操天天干 | 日韩综合区| 亚洲性人人天天夜夜摸 | 国产精品一区二区三区免费 | 欧美一级c片 | 狠狠撸在线视频 | 国产精品国产精品 | 在线一区二区三区 | 日摸夜操 | 黄久久久 | 欧美日韩国产综合在线 | 91一区二区 | 日韩欧美大片在线观看 | 国产精品jizz在线观看麻豆 | 日韩欧美精品一区 | 黑人一区| 精品欧美一区二区精品久久久 | 精品国产乱码久久久久久1区2区 | 蜜桃视频网站在线观看 | 国产成人一级毛片 | 久久国产精品久久久久久 | 91精品国产欧美一区二区 | 一级黄色大片免费 | 中文字幕一区二区三区四区五区 | 午夜影院在线观看版 | 国产视频色 | 亚洲综合欧美 | 午夜精品久久久久久久99黑人 | 亚洲综合视频 | 在线观看av网站永久 | 暖暖视频日韩欧美在线观看 | 久久久久综合 | 一级毛片在线 | 亚洲天堂一区 | 蜜桃视频一区二区三区 | 午夜成人免费视频 | 国产精品久久久久久 | 看免费av | 国产精品99久久免费观看 | 欧美一级免费 | 国产中文在线 | 国产一区中文字幕 | 韩日精品 | 欧美老妇交乱视频 | 欧洲一级视频 | 中文字幕在线视频一区 | 97伦理片 | 国产视频一区二区 | 永久免费精品视频 | 国产区在线 | 久草视频在线播放 | 午夜免费剧场 | 中文在线视频 | 亚洲精品美女久久久 | 久久手机视频 | 久久免费电影 | 亚洲中国精品精华液 | 日韩精品一区二区三区中文字幕 | 爱爱视频在线 | 亚洲国产欧美在线 | 国产美女一区 | 日韩在线中文字幕 | av大片| 中文字幕视频网站 | 国产高清视频在线观看 | 天天干天天操天天爽 | 精品久久不卡 | 成人超碰在线 | 国产 日韩 欧美 在线 | www.日本三级 | 麻豆国产一区二区三区四区 | 久久国产区 | 亚洲精品在线网站 | 一区二区三区在线看 | 亚洲精色| 最近免费中文字幕在线视频2 | 国产区在线 | av网站在线播放 | 亚洲精品一区二区三区不 | av一级久久| 亚洲精品久久久久午夜 | 日韩视频在线免费观看 | 成人福利av | 在线免费观看毛片 | 国产一区二区av | 午夜视频在线播放 | 欧美一区二区三区在线视频 | 亚洲自啪 | 色综合久久久 | 九九色综合 | 四虎免看黄 | 一级毛片网| 91精品久久久久久久 | 久久欧美高清二区三区 | 91精品国产综合久久婷婷香蕉 | av成人毛片 | 日本做暖暖视频高清观看 | 精品乱码久久久 | 性培育学校羞耻椅子调教h 欧美精品网站 | 男女免费视频 | 国产成人在线视频 | 日本成人久久 | 国产精品伦理 | 久久综合91 | av免费网站 | 欧美成人综合在线 | 日韩在线成人 | 高清国产一区二区三区四区五区 | 国产午夜精品久久久久久久 | 久久精品影视 | 久久精品亚洲精品国产欧美 | 国产一区 | 91免费看网站 | 欧美成人精品一区二区男人看 | 欧美日韩一区二区三区在线观看 | 中文在线一区二区 | 久久精品这里热有精品 | 日本精品一区 | 欧美电影一区 | 超碰人人干 | 中文字幕一级 | 黄色免费网站在线看 | 久久av综合 | 嫩草视频在线观看免费 | 一区二区视频 | 91久久精品国产91久久 | 色婷婷激情 | 久久久成人精品 | 国产午夜精品久久 | 一区二区视频在线 | 成人亚洲 | 亚洲一区二区三区四区五区中文 | 91 在线| 四虎动漫 | 91伊人| 国产精品久久av | 在线观看中文字幕 | 色婷婷综合久久久久中文一区二区 | zzzwww在线观看免 | 一区二区在线看 | 国产精品国产精品国产专区不蜜 | 麻豆国产露脸在线观看 | 欧美一级日韩 | 亚洲在线免费观看 | 国产精品久久久久久亚洲调教 | 在线观看不卡一区 | 日韩一级电影在线 | 一区二区三区四区不卡视频 | 亚洲成人福利在线观看 | 亚洲精品日本 | 伊人激情综合网 | 国产婷婷色一区二区三区 | 在线天堂新版最新版在线8 www.国产欧美 | 不卡一区二区三区四区 | 色婷婷久久一区二区三区麻豆 | 午夜精品久久久久久久男人的天堂 | 久久一区二区三区四区五区 | 精品久 | 麻豆资源 | eeuss国产一区二区三区四区 | 日韩一区二区黄色片 | 亚洲精品久久久久久久久久久久久 | 午夜精品久久久久 | 精品一区二区三区三区 | 亚洲免费片 | 欧美国产一区二区三区 | 欧洲一级毛片 | 日本福利视频 | 久久久美女| 国产一区二区三区在线免费 | 午夜精品久久久久久99热软件 | 亚洲一区二区三区四区五区午夜 | 日本高清中文字幕 | 亚洲成人av一区二区 | 日韩高清一区 | 色综合成人| 亚洲国产一区二区三区四区 | 人人人人澡 | a级性视频 | 可以看黄的视频 | 色综合免费 | 日韩免费区 | 百性阁综合另类 | 在线色站 | 亚洲综合区| 久久9久久 | 国产精品欧美一区二区三区 | 精品日韩欧美一区二区三区 | 久久另类ts人妖一区二区 | 超碰一区二区三区 | 亚洲福利片 | 精品av| 99精品一区二区三区 | 中文字幕在线观看 | 欧美一级二级三级 | 日韩视频中文字幕 | 99精品福利视频 | 精品一区二区三区在线观看 | 麻豆精品国产91久久久久久 | 中文字幕亚洲欧美精品一区四区 | 久久综合久色欧美综合狠狠 | 欧美一级片毛片免费观看视频 | 欧美日韩视频在线 | 国产高清小视频 | 欧美视频在线播放 | 一区二区视频 | 欧美日韩视频网站 | 美女三区| 龙珠z普通话国语版在线观看 | 亚洲欧美综合精品久久成人 | 久久精品亚洲一区 | 久热中文字幕 | 成年免费a级毛片 | 日本在线网 | 欧美综合国产精品久久丁香 | 午夜影院男女 | 亚洲 欧美日韩 国产 中文 | 在线视频91| 成人精品在线 | www.久久伊人 | 日韩精品久久 | 五月色综合 | 午夜影视剧场 | 国产视频久久久久久久 | 国产成人在线看 | 欧美精品久久一区 | 国产欧美精品一区二区三区四区 | 成人在线视频一区 | 日韩一区二区福利视频 | 一区二区三区影院 | 最新高清无码专区 | 午夜私人福利 | 欧美日韩精品一区二区三区蜜桃 | 蜜桃免费一区二区三区 | 欧美日韩三级 | 久草毛片| 日韩精品视频在线观看免费 | 国产一区二区三区免费在线 | 韩国一区二区视频 | 丝袜美腿一区二区三区 | 99热影院| 韩日一区二区 | 99草免费视频 | 午夜免费高清视频 | 国产69精品久久久久观看黑料 | 免费观看特级毛片 | 国产精品久久久久久亚洲调教 | 国产成人一区 | 欧美二区三区 | 久久99一区二区 | 热久久这里只有精品 | 看毛片软件 | 免费看国产片在线观看 | 成人性大片免费观看网站 | 成人在线视频免费 | 成人福利在线 | 欧美精品一区二区三区蜜桃视频 | 欧美精品一区二区三区四区五区 | 久久综合一区 | 91超碰caoporn97人人 | 亚洲a级 | 粉嫩在线| 久久久www成人免费精品 | 国产91亚洲精品 | 国产夜夜夜 | 国产一区 | 日本成人福利视频 | 欧美日韩国产高清视频 | 日本午夜精品 | 男女羞羞视频免费观看 | 久久精品欧美一区二区三区不卡 | 午夜精品网站 | 国产小视频在线播放 | 狼人狠狠干| 日韩在线中文字幕 | a级毛片免费高清视频 | 午夜精品久久久久久久久久久久 | 国产成人av电影 | 国产农村妇女精品 | 精品久久久久久久人人人人传媒 | 久久亚洲一区二区三区四区 | 免费成人av | 久久99精品久久久久久按摩秒播 | 日韩国产一区二区三区 | 黄色91| 亚洲日韩中文字幕一区 | 日韩精品极品视频在线 | 96久久久久久 | 国产亚洲精品久久久优势 | 欧美日韩福利 | 国产视频网 | 成人涩涩日本国产一区 | 91看片在线观看 | 一级欧美在线 | 午夜精| 国产精品大片在线观看 | 国产免费自拍 | 久久porn| av中文字幕在线播放 | 国产一区2区 | 免费一区二区三区 | 中文字幕在线一区 | 国产精品二区三区在线观看 | 成人在线看片 | 亚洲精品福利 | 亚洲电影二区 | 日韩av免费在线观看 | 日韩中文在线 | 亚洲精品成人在线 | 亚洲在线播放 | 国产精品日韩欧美一区二区三区 | 午夜精品在线 | 一级久久久久 | 亚洲精色 | 欧美成人一级 | 99国产精品久久久久久久成人热 | 欧美日韩中文字幕 | 久久久久国产精品一区二区 | 蜜桃视频在线观看www社区 | 久久免费视频观看 | 欧美一区二区三区精品免费 | 色花av | 日韩在线免费观看av | 国产精品亚洲天堂 | 日韩1| 亚洲天堂色2017 | 国产精品一区久久久久 | 午夜精品一区二区三区在线视频 | 国产高清小视频 | 精品欧美乱码久久久久久 | 中文字幕日韩欧美 | 亚洲不卡在线 | 奇米精品一区二区三区在线观看 | 免费观看一级毛片 | 久久久久久久精 | 日韩精品小视频 | 97精品视频在线 | 久久天堂 | 亚洲视频三区 | 欧美亚洲一区二区三区 | 亚洲一区二区在线播放 | 欧美 日韩 国产 一区 | 91亚洲精品久久久 | 久久99精品国产麻豆婷婷洗澡 | 九九精品免费视频 | 国产浪潮av色综合久久超碰 | 国产日韩一区二区三区 | 特黄级国产片 | 国产精品成人在线观看 | 国产精品免费观看 | 播放一区 | 欧美日韩精品一区二区三区在线观看 | 欧美视频精品在线观看 | 亚洲精品乱码久久久久久不卡 | 综合伊人久久 | 99国产精品久久久久久久 | 欧美日韩国产精品一区二区 | 91精品国产99 | 国内久久精品 | 高清一区二区 | hh99me在线观看 | 国产精品一区二区三区免费 | 成年网站在线 | 久草最新 | 国产亚洲精品美女久久久久久久久久 | 欧美黄色一区 | 午夜视频在线播放 | 999精品在线 | 亚洲免费在线视频 | 自拍偷拍第一页 | 国产精产国品一二三产区视频 | 久久一 | 美女久久久 | 91亚洲成人 | 天天久久 | 成人亚洲免费视频 | 久久久久久久久一区二区 | 国产伦精品一区二区三区高清 | 国产小视频在线 | 国产精品久久久久久久久久久久久久 | 天天操天天添 | 国产综合精品一区二区三区 | 中文字幕国产区 | 国产伦精品一区二区三区高清 | 91综合网| 国产精品欧美一区二区三区 | 午夜精品视频在线观看 | 免费看一区二区三区 | 黄色毛片免费看 | 91精品国产色综合久久 | 91资源总站 | 狠狠av| 久久美女视频 | 亚洲电影一区二区 | 亚洲天堂男人 | 欧美另类综合 | 久久草视频 | 国产高清一区 | 欧美精品一区二区三区四区在线 | 欧日韩不卡在线视频 | 亚洲专区在线播放 | 欧美精品色 | 亚洲精品专区 | 国产一区二区三区免费 | 久久久国产一区二区 | 亚洲精品久久久久久久久久久 | 中文字幕91视频 | 香蕉二区| 蜜桃视频一区二区三区 | 日韩免费一区 | 欧美一区二区三区免费在线观看 | 亚洲网在线 | 欧美日韩一级二级三级 | 色在线看 | 黄片毛片在线观看 | 欧美日韩国产影院 | 精品久久久久久久久久久 | 亚洲高清av | 亚洲视频在线观看一区二区三区 | 黄色欧美一级片 | 欧美一区二区在线免费观看 | 国产成人精品高清久久 | 狠狠se| 成人久久久久久久 | 超碰操| 精品久久久久久久久久久 | 欧美一性一交 | 国产精品久久久久久久午夜 | 久久久久久艹 | 2019国产精品| 欧美日韩不卡视频 | 久久国产传媒 | 黄色毛片看看 | 欧美一区二区激情三区 | av看片| 午夜激情电影在线 | 九九在线视频 | 成年免费观看 | 黄色免费在线观看 | 精品一区二区三区视频 | 亚洲视频一区在线 | 成人免费网站视频 | 亚洲高清不卡视频 | 午夜爽视频 | 91在线精品一区二区 | 欧美色综合天天久久综合精品 | 久久高清毛片 | 国产成人一区二区三区影院在线 | 97色综合 | 成人精品久久久 | 国产精品亚洲a | 成人激情视频在线播放 | 欧美暴操| 国产区区 | 国产综合视频在线观看 | 国产精品3区| 私人毛片免费高清视频 | 国产综合精品一区二区三区 | 国产成人av一区二区三区 | 欧美日韩精品久久久 | 日韩三级在线 | 嫩草91| 天天干人人 | 91观看在线视频 | 天天看夜夜 | 久久综合av | 精品久久久久久久 | 亚洲一区二区国产 | 天天爽夜夜爽 | 夜夜草视频 | 亚洲一区 日韩精品 中文字幕 | 欧美日韩视频 | 亚洲免费一区 | 国产精品久久久久久久久久ktv | 国产一区二区在线免费观看 | 人人干天天干 | 久久亚洲欧美日韩精品专区 | 级毛片| 亚洲视频一区在线播放 | 五月天婷婷国产精品 | 日本aⅴ毛片成人实战推荐 成人免毛片 | 亚洲h | 亚洲精品一区二区三区在线看 | 精品国产一区二区三区小蝌蚪 | 国产大片在线观看 | 一级毛片免费网站 | 欧美日韩一区二区三区四区 | 日韩精品一区二 | 色综合一区 | 久久中文视频 | 国产精品一区久久久 | 国产噜噜噜噜噜久久久久久久久 | 亚洲国产日本 | 亚洲欧美国产精品专区久久 | 国产精品一区一区 | 五月天婷婷丁香 | 亚洲精品在线视频观看 | 91精品国产乱码久久久久久久久 | 可以在线观看的黄色 | 欧美成人精品一区二区三区在线看 | 国产精品久久久久久亚洲调教 | 久久国产欧美日韩精品 | 激情网五月天 | 玖玖操 | 日韩中文字幕在线观看 | 国产精品久久久999 成人亚洲视频 | 欧美精品一区二区三区在线四季 | 婷婷色综合 | 亚洲国产二区三区 | 久久另类 | 久久99精品久久久久久园产越南 | 亚洲高清久久 | 精品香蕉一区二区三区 | 在线观看理论电影 | 亚洲欧美视频一区 | 北条麻妃国产九九九精品小说 | 国产一区二区三区视频 | 精品少妇一区二区三区日产乱码 | 精品久久久久久亚洲精品 | a级片在线观看 | 羞羞视频在线观看视频 | av网站在线播放 | av日韩一区 | 99久久婷婷国产综合精品 | 羞羞色影院 | 久久中文网 | 国产色婷婷精品综合在线播放 | 日韩在线亚洲 | 亚洲精品一区二区三区在线观看 | 国产九九精品视频 | 欧美日韩不卡合集视频 | 日韩精品视频在线 | 夜夜夜夜夜操 | 国产精品成人在线观看 | 国产一级免费视频 | 亚洲视频一区二区三区四区 | 欧美亚洲91 | 久久国产香蕉视频 | a视频在线观看 | 精品三级在线观看 | av高清在线免费观看 | 黄片毛片在线观看 | 国产精品久久久久久影院8一贰佰 | 天天拍拍天天干 | www国产亚洲精品久久网站 | 天堂一区| 九九精品视频在线观看 | 精品视频成人 | 国产情品 | 91精品综合久久久久久五月天 | 日韩一级大片 | 一级黄色大片免费 | 黄色一级片在线看 | 视频在线一区二区 | 香港黄色录像片 | 丝袜美腿一区二区三区 | 国产午夜精品久久久久久久 | 91视频免费看 | 欧美高清一区 | 成年人黄色一级片 | 国产精品亚洲一区二区三区 | 九九99 | 亚洲最大成人 | www精品美女久久久tv | 国产在线精品一区二区 | 国产一区二区三区免费视频 |