diff --git a/src/para_facematch.py b/src/para_facematch.py index 297094f75..f610a250f 100644 --- a/src/para_facematch.py +++ b/src/para_facematch.py @@ -15,6 +15,8 @@ import paravision.recognition.utils as pru class Facematch(object): + errstr = "" + def init(self): print("@@@ initialising paravision") try: @@ -62,27 +64,36 @@ class Facematch(object): print("## loading images", dev1, dev2) self.dev1 = dev1 self.dev2 = dev2 + errstr = "" try: # Load images + errstr = "id image load" self.id_image = pru.load_image(id_image_filepath) + errstr = "client photo load" self.photo_image = pru.load_image(photo_image_filepath) - print("++++++++++++++++ ",self.id_image) + #print("++++++++++++++++ ",self.id_image) return True except Exception as e: print("uk oh loading failed ", e) - return None + return False def get_faces(self): + print("# get faces...") + errstr = "" try: # Get all faces from images with qualities, landmarks, and embeddings + errstr = "getting faces" self.inference_result = self.sdk.get_faces([self.id_image, self.photo_image], qualities=True, landmarks=True, embeddings=True) self.image_inference_result = self.inference_result.image_inferences if len(self.image_inference_result)==0: return "no inferences found" # Get most prominent face + print("most prominent...") + errstr = "getting most prominent id face" self.id_face = self.image_inference_result[0].most_prominent_face_index() + errstr = "getting most prominent id face" self.photo_face = self.image_inference_result[1].most_prominent_face_index() if self.id_face<0: return "no id face found" @@ -90,23 +101,27 @@ class Facematch(object): return "no live face found" # Get numerical representation of faces (required for face match) + print("digesting...") + errstr = "getting numericals" if (len(self.image_inference_result)<2): return "ID or human face could not be recognised" self.id_emb = self.image_inference_result[0].faces[self.id_face].embedding self.photo_emb = self.image_inference_result[1].faces[self.photo_face].embedding except Exception as ex: - return "image processing exception "+str(ex) - - return None + errstr = "image processing exception "+str(ex) + return False + return True # return " id=%d photo=%d result=%d " % (self.id_face, self.photo_face, len(self.image_inference_result)) def compute_scores(self): + print("## compute scores...") try: # Get image quality scores (how 'good' a face is) + errstr = "getting image quality" self.id_qual = self.image_inference_result[0].faces[self.id_face].quality self.photo_qual = self.image_inference_result[1].faces[self.photo_face].quality @@ -114,6 +129,7 @@ class Facematch(object): self.photo_qual = round(self.photo_qual, 3) # Get face match score + errstr = "scoring" self.match_score = self.sdk.get_match_score(self.id_emb, self.photo_emb) # Create .json @@ -137,7 +153,11 @@ class Facematch(object): #print(response.read()) except Exception as ex: - return str(ex) + errstr = str(ex) + return False + + return True + def get_scores(self): diff --git a/src/yoloserv.py b/src/yoloserv.py index 6350c0bfc..56805109a 100644 --- a/src/yoloserv.py +++ b/src/yoloserv.py @@ -179,14 +179,17 @@ class yoloserv(object): if self.conf["emulate_facematch"]: return '{ "status":0, "remark":"OK", "data":{} }' - self.facematcher.load(dev1, dev2, img1, img2) + status = self.facematcher.load(dev1, dev2, img1, img2) + if not status: + return '{ "status":777242, "remark":"face loading failed", "guilty_param":"facematch", "guilty_value":"%s" }' % (self.facematcher.errstr) + status = self.facematcher.get_faces() - if status is not None: - return '{ "status":777242, "remark":"face matching failed", "guilty_param":"facematch", "guilty_value":"%s" }' % (status) + if not status: + return '{ "status":777245, "remark":"face finding failed", "guilty_param":"facematch", "guilty_value":"%s" }' % (self.facematcher.errstr) status = self.facematcher.compute_scores() - if status is not None: - return '{ "status":777243, "remark":"face scoring failed", "guilty_param":"facematch", "guilty_value":"%s" }' % (status) + if not status: + return '{ "status":777243, "remark":"face scoring failed", "guilty_param":"facematch", "guilty_value":"%s" }' % (self.facematch.errstr) jsonstr = self.facematcher.get_scores() return '{ "status":0, "remark":"OK", "data":%s }' % (jsonstr)