InsightFace实现人脸比对[升级版] | 不用建立索引的那种 (二)

InsightFace-paddle的版本还是太麻烦了

并没有真正做到不建立索引

下面来说一下真正不需要建立索引的

https://github.com/deepinsight/insightfaceicon-default.png?t=M0H8https://github.com/deepinsight/insightface没错,这次我们使用原版InsightFace项目

安装非常简单,使用pip的包

pip install -U insightface

安装好了之后直接上测试代码:

# 测试代码
import argparse
import cv2
import sys
import numpy as np
import insightface
from insightface.app import FaceAnalysis
from insightface.data import get_image as ins_get_image
assert insightface.__version__>='0.3'
parser = argparse.ArgumentParser(description='insightface app test')
parser.add_argument('--ctx', default=0, type=int, help='ctx id, <0 means using cpu')
parser.add_argument('--det-size', default=640, type=int, help='detection size')
args = parser.parse_args()
app = FaceAnalysis(name="antelopev2")
app.prepare(ctx_id=args.ctx, det_size=(args.det_size,args.det_size))
img_1 = cv2.imread("face1.png")
img_2 = cv2.imread("face2.png")
faces_1 = app.get(img_1)
faces_2 = app.get(img_2)
assert len(faces_1)!=0 and len(faces_2)!=0
#rimg_1 = app.draw_on(img_1, faces_1)
#rimg_2 = app.draw_on(img_2, faces_2)
#cv2.imwrite("./f1_output.jpg", rimg_1)
#cv2.imwrite("./f2_output.jpg", rimg_2)
# then print all-to-all face similarity
feats = []
for face in faces_1:
    feats.append(face.normed_embedding)
for face in faces_2:
    feats.append(face.normed_embedding)
feats = np.array(feats, dtype=np.float32)
sims = np.dot(feats, feats.T)
print(sims)

思路非常简单,通过内置接口获得面部嵌入,然后算个点积就行了,至于那个相似度矩阵,两张照片直接取sims[0][1]那个位置的值就可以了,一般来说大于0.45就认为这两张照片是同一个人,但是实际来看如果不是什么稀奇古怪的角度或者光线,但部分都是0.1以内和0.7以上。

速度上非常快,使用onnxruntime-gpu时推理时间能控制在10ms左右

我就不放图了,如果测试成功记得回来点个赞~

你可能感兴趣的:(深度学习CV方向,深度学习,python,计算机视觉)