1、Python+OpenCV人脸识别签到打卡系统实现功能: 1.人员人脸识别并完成签到/签退 2.考勤时间计算 3.保存考勤数据为CSV格式(Excel表格)核心代码MainWindow.pyUI文件加载:class Ui_Dialog(QDialog): def _init_(self): super(Ui_Dialog, self)._init_() loadUi(mainwindow.ui, self) #加载QTUI文件 self.runButton.clicked.connect(self.runSlot) self._new_window = None self.Videocapture_ = None摄像头调用: def refreshAll(self): print(当前调用人俩检测摄像头编号(0为笔记本内置摄像头,1为USB外置摄像头):) self.Videocapture_ = 0OutWindow.py获取当前系统时间class Ui_OutputDialog(QDialog): def _init_(self): super(Ui_OutputDialog, s
2、elf)._init_() loadUi(./outputwindow.ui, self) #加载输出窗体UI #datetime 时间模块 now = QDate.currentDate() current_date = now.toString(ddd dd MMMM yyyy) #时间格式 current_time = datetime.datetime.now().strftime(%I:%M %p) self.Date_Label.setText(current_date) self.Time_Label.setText(current_time) self.image = None签到时间计算 def ElapseList(self,name): with open(Attendance.csv, r) as csv_file: csv_reader = csv.reader(csv_file, delimiter=,) line_count = 2 Time1 = datetime.datetime.now() Time2 = datetime.datetime.now(
3、) for row in csv_reader: for field in row: if field in row: if field = Clock In: if row0 = name: Time1 = (datetime.datetime.strptime(row1, %y/%m/%d %H:%M:%S) self.TimeList1.append(Time1) if field = Clock Out: if row0 = name: Time2 = (datetime.datetime.strptime(row1, %y/%m/%d %H:%M:%S) self.TimeList2.append(Time2)人脸识别部分# 人脸识别部分 faces_cur_frame = face_recognition.face_locations(frame) encodes_cur_frame = face_recognition.face_encodings(frame, faces_cur_frame) for encodeFace, faceLoc in zip(encodes
4、_cur_frame, faces_cur_frame): match = face_pare_faces(encode_list_known, encodeFace, tolerance=0.50) face_dis = face_recognition.face_distance(encode_list_known, encodeFace) name = unknown #未知人脸识别为unknown best_match_index = np.argmin(face_dis) if matchbest_match_index: name = class_namesbest_match_index.upper() y1, x2, y2, x1 = faceLoc cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2) cv2.rectangle(frame, (x1, y2 - 20), (x2, y2), (0, 255, 0), cv2.FILLED) cv2.putText(frame, name, (x1 + 6,
5、y2 - 6), cv2.FONT_HERSHEY_COMPLEX, 0.5, (255, 255, 255), 1) mark_attendance(name) return frame签到数据保存与判断# csv表格保存数据 def mark_attendance(name): :param name: 人脸识别部分 :return: if self.ClockInButton.isChecked(): self.ClockInButton.setEnabled(False) with open(Attendance.csv, a) as f: if (name != unknown): #签到判断:是否为已经识别人脸 buttonReply = QMessageBox.question(self, 欢迎 + name, 开始签到 , QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if buttonReply = QMessageBox.Yes: date_time_string = datetime.datetime.now(
6、).strftime(%y/%m/%d %H:%M:%S) f.writelines(fnname,date_time_string,Clock In) self.ClockInButton.setChecked(False) self.NameLabel.setText(name) self.StatusLabel.setText(签到) self.HoursLabel.setText(开始签到计时中) self.MinLabel.setText() self.Time1 = datetime.datetime.now() self.ClockInButton.setEnabled(True) else: print(签到操作失败) self.ClockInButton.setEnabled(True) elif self.ClockOutButton.isChecked(): self.ClockOutButton.setEnabled(False) with open(Attendance.csv, a) as f: if (name != unknown): buttonReply = QMessageBox.question(self, 嗨呀 + name, 确认签退?, QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if buttonReply = QMessageBox.Yes: date_time_string = datetime.datetime.now().strftime(%y/%m/%d %H:%M:%S)
《Python+OpenCV人脸识别签到打卡》由会员知***分享,可在线阅读,更多相关《Python+OpenCV人脸识别签到打卡》请在金锄头文库上搜索。