import time import uuid import logging import json from django.conf import settings from aliyunsdkcore.client import AcsClient from aliyunsdkfacebody.request.v20191230 import DetectFaceRequest from aliyunsdkfacebody.request.v20191230 import CompareFaceRequest from aliyunsdkocr.request.v20191230.RecognizeIdentityCardRequest import RecognizeIdentityCardRequest from aliyunsdkcloudauth.request.v20190307.VerifyMaterialRequest import VerifyMaterialRequest logger = logging.getLogger(__name__) class AliyunFace: def __init__(self, *args, **kwargs): self.ACCESS_KEY_ID = settings.ALIYUN_OSS['ACCESS_KEY_ID'] self.ACCESS_KEY_SECRET = settings.ALIYUN_OSS['ACCESS_KEY_SECRET'] self.client = AcsClient(self.ACCESS_KEY_ID, self.ACCESS_KEY_SECRET, "cn-shanghai") # def get_aliyun_viapi_url(self, image_url, content_type=None): # print('***************************************************\n\n******************************************') # file_utils = FileUtils(self.ACCESS_KEY_ID, self.ACCESS_KEY_SECRET) # return file_utils.get_oss_url(image_url, content_type or "jpg", False) def detect_face(self, image_viapi_url): request = DetectFaceRequest.DetectFaceRequest() request.set_ImageURL(image_viapi_url) try: response = json.loads(self.client.do_action_with_exception(request)) return response['Data']['FaceCount'] except Exception as e: logger.error(str(e)) return 0 def compare_face(self, face1_viapi_url, face2_viapi_url): request = CompareFaceRequest.CompareFaceRequest() request.set_ImageURLA(face1_viapi_url) request.set_ImageURLB(face2_viapi_url) try: response = json.loads(self.client.do_action_with_exception(request)) return response['Data']['Confidence'] except Exception as e: logger.error(str(e)) return 0 def recognize_chinese_id_card(self, image_viapi_url): request = RecognizeIdentityCardRequest() request.set_accept_format('json') request.set_ImageURL(image_viapi_url) request.set_Side("face") response = json.loads(self.client.do_action_with_exception(request)) return response def verity_chinese_id_with_capture(self, image_viapi_url, chinese_id, name): request = VerifyMaterialRequest() request.set_accept_format('json') request.set_FaceImageUrl(image_viapi_url) request.set_BizType("UniversityFaceIdentity") request.set_BizId('{}-{}'.format(int(time.time()), str(uuid.uuid1()))) request.set_Name(name) request.set_IdCardNumber(chinese_id) try: response = json.loads(self.client.do_action_with_exception(request)) return response['VerifyStatus'] == 1 except Exception as e: logger.warning(str(e)) return False aliyun_face = AliyunFace()