fix: 还是使用face_recongnition

This commit is contained in:
caoqianming 2023-09-16 17:49:35 +08:00
parent 4d80d58554
commit 96d83e0b49
5 changed files with 23 additions and 20 deletions

View File

@ -266,9 +266,10 @@ class FaceLoginView(CreateAPIView):
from apps.hrm.services import HrmService from apps.hrm.services import HrmService
base64_data = base64.urlsafe_b64decode(tran64(request.data.get('base64').replace(' ', '+'))) base64_data = base64.urlsafe_b64decode(tran64(request.data.get('base64').replace(' ', '+')))
ep, msg = HrmService.face_find_from_base64(base64_data) ep, msg = HrmService.face_find_from_base64(base64_data)
if ep and ep.user: if ep:
user = ep.user if ep.user and ep.user.is_active and ep.user.is_deleted is False:
refresh = RefreshToken.for_user(ep.user) user = ep.user
refresh = RefreshToken.for_user(ep.user)
# # 可设为在岗 # # 可设为在岗
# now = timezone.now() # now = timezone.now()
# now_local = timezone.localtime() # now_local = timezone.localtime()
@ -286,10 +287,12 @@ class FaceLoginView(CreateAPIView):
# if created: # if created:
# Employee.objects.filter(user=user).update(is_atwork=True, last_check_time=now) # Employee.objects.filter(user=user).update(is_atwork=True, last_check_time=now)
return Response({ return Response({
'refresh': str(refresh), 'refresh': str(refresh),
'access': str(refresh.access_token), 'access': str(refresh.access_token),
'username':user.username, 'username':user.username,
'name':user.name 'name':user.name
}) })
else:
raise ParseError('账户不存在或不可用')
raise ParseError(msg) raise ParseError(msg)

View File

@ -71,14 +71,15 @@ class EmployeeCreateUpdateSerializer(CustomModelSerializer):
old_name = instance.name old_name = instance.name
instance = super().update(instance, validated_data) instance = super().update(instance, validated_data)
if old_photo != instance.photo: # 如果照片有变动,需要更新人脸库 if old_photo != instance.photo: # 如果照片有变动,需要更新人脸库
face_data, msg = HrmService.get_facedata_from_img(settings.BASE_DIR + instance.photo) # 使用的是face_recongition
face_data, msg = HrmService.get_facedata_from_img_x(settings.BASE_DIR + instance.photo)
if face_data: if face_data:
instance.face_data = face_data instance.face_data = face_data
instance.save() instance.save()
else: else:
raise ParseError(msg) raise ParseError(msg)
from apps.hrm.tasks import update_global_face from apps.hrm.tasks import update_all_facedata_cache
update_global_face.delay() update_all_facedata_cache.delay()
if instance.user and instance != old_name: if instance.user and instance != old_name:
instance.user.name = instance.name instance.user.name = instance.name
instance.user.save() instance.user.save()

View File

@ -403,8 +403,8 @@ class HrmService:
for index, value in enumerate(results): for index, value in enumerate(results):
if value: if value:
# 识别成功 # 识别成功
user = User.objects.get(id=face_datas['users'][index]) ep = Employee.objects.get(id=face_datas['eps'][index])
return user, '' return ep, ''
return None, '人脸未匹配,请调整位置' return None, '人脸未匹配,请调整位置'
@classmethod @classmethod

View File

@ -97,14 +97,13 @@ def update_all_facedata_cache():
""" """
更新人脸数据缓存 更新人脸数据缓存
""" """
facedata_queyset = Employee.objects.filter(face_data__isnull=False, facedata_queyset = Employee.objects.filter(face_data__isnull=False).values('eps', 'face_data')
user__is_active=True).values('user', 'face_data') face_eps = []
face_users = []
face_datas = [] face_datas = []
for i in facedata_queyset: for i in facedata_queyset:
face_users.append(i['user']) face_eps.append(i['id'])
face_datas.append(i['face_data']) face_datas.append(i['face_data'])
face_data_dict = {"users": face_users, "datas": face_datas} face_data_dict = {"eps": face_eps, "datas": face_datas}
cache.set('face_datas', face_data_dict) cache.set('face_datas', face_data_dict)

View File

@ -30,4 +30,4 @@ xlwt==1.3.0
openpyxl==3.1.0 openpyxl==3.1.0
cron-descriptor==1.2.35 cron-descriptor==1.2.35
pymysql==1.0.3 pymysql==1.0.3
deepface==0.0.79 # deepface==0.0.79