from django.conf import settings import uuid import face_recognition import os from apps.hrm.models import Employee from apps.hrm.tasks import update_all_user_facedata_cache from apps.system.models import User from django.core.cache import cache 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, '人脸识别失败' # 匹配人脸库 face_datas = cache.get('face_datas') face_users = cache.get('face_users') if face_datas is None: update_all_user_facedata_cache() try: results = face_recognition.compare_faces(face_datas, unknown_face_encoding, tolerance=0.55) except: return None, '人脸匹配失败' for index, value in enumerate(results): if value: # 识别成功 user = User.objects.get(id=face_users[index]) return user, '' return None, '人脸匹配失败' @classmethod def get_facedata_from_img(cls, img_path): try: photo_path = settings.BASE_DIR + img_path picture_of_me = face_recognition.load_image_file(photo_path) my_face_encoding = face_recognition.face_encodings(picture_of_me)[0] face_data_list = my_face_encoding.tolist() return face_data_list, '' except: return None, '人脸识别失败'