from django.conf import settings import uuid import face_recognition import os from apps.hrm.models import Employee from apps.system.models import User class HRMService: @classmethod def face_compare_from_base64(cls, base64_data): filename = str(uuid.uuid4()) filepath = settings.BASE_DIR +'/temp/' + filename +'.png' with open(filepath, 'wb') as f: f.write(base64_data) try: unknown_picture = face_recognition.load_image_file(filepath) unknown_face_encoding = face_recognition.face_encodings(unknown_picture)[0] os.remove(filepath) except: os.remove(filepath) return None, '头像解码失败' # 匹配人脸库 user_faces = Employee.objects.filter(face_data__isnull=False, user__is_active=True).values('user', 'face_data') user_l = [] face_l = [] for i in user_faces: user_l.append(i['user']) face_l.append(i['face_data']) results = face_recognition.compare_faces(face_l, unknown_face_encoding, tolerance=0.5) for index, value in enumerate(results): if value: # 识别成功 user = User.objects.get(id=user_l[index]) return user, '' return None, '识别失败'