#!/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]))