Spaces:
Paused
Paused
| #!/usr/bin/env python | |
| import os | |
| import os.path as osp | |
| import argparse | |
| import cv2 | |
| import numpy as np | |
| import onnxruntime | |
| from scrfd import SCRFD | |
| from arcface_onnx import ArcFaceONNX | |
| onnxruntime.set_default_logger_severity(5) | |
| assets_dir = osp.expanduser('~/.insightface/models/buffalo_l') | |
| detector = SCRFD(os.path.join(assets_dir, 'det_10g.onnx')) | |
| detector.prepare(0) | |
| model_path = os.path.join(assets_dir, 'w600k_r50.onnx') | |
| rec = ArcFaceONNX(model_path) | |
| rec.prepare(0) | |
| def parse_args() -> argparse.Namespace: | |
| parser = argparse.ArgumentParser() | |
| parser.add_argument('img1', type=str) | |
| parser.add_argument('img2', type=str) | |
| return parser.parse_args() | |
| def func(args): | |
| image1 = cv2.imread(args.img1) | |
| image2 = cv2.imread(args.img2) | |
| bboxes1, kpss1 = detector.autodetect(image1, max_num=1) | |
| if bboxes1.shape[0]==0: | |
| return -1.0, "Face not found in Image-1" | |
| bboxes2, kpss2 = detector.autodetect(image2, max_num=1) | |
| if bboxes2.shape[0]==0: | |
| return -1.0, "Face not found in Image-2" | |
| kps1 = kpss1[0] | |
| kps2 = kpss2[0] | |
| feat1 = rec.get(image1, kps1) | |
| feat2 = rec.get(image2, kps2) | |
| sim = rec.compute_sim(feat1, feat2) | |
| if sim<0.2: | |
| conclu = 'They are NOT the same person' | |
| elif sim>=0.2 and sim<0.28: | |
| conclu = 'They are LIKELY TO be the same person' | |
| else: | |
| conclu = 'They ARE the same person' | |
| return sim, conclu | |
| if __name__ == '__main__': | |
| args = parse_args() | |
| output = func(args) | |
| print('sim: %.4f, message: %s'%(output[0], output[1])) | |