当前位置:   article > 正文

人脸检测实战-insightface

insightface

目录

简介

一、InsightFace介绍 

二、安装

三、快速体验

四、代码实战

1、人脸检测

 2、人脸识别

五、代码及示例图片链接


简介

目前github有非常多的人脸识别开源项目,下面列出几个常用的开源项目:

1、deepface

2、CompreFace

3、face_recognition

4、insightface

5、facenet

6、facenet-pytorch

开源的人脸检测项目非常多,本文介绍一下insightface的使用方法。首先给出insightface的官方效果图:

 再看一下insightface的网图检测效果:

效果展示结束,下面进入详细的介绍。

一、InsightFace介绍 

insightface是一个开源的基于Pytorch和MXNet实现的2D/3D人脸分析工具,它实现了多个SOTA人脸识别、人脸检测、人脸对齐算法,并对训练和部署进行了优化。目前insightface主分支要求PyTorch 1.6+/MXNet=1.6-1.8,python 3.x。

二、安装

insightface安装非常简单,使用如下命令:

pip install insightface

安装onnxruntime用于推理(有gpu就把onnxruntime替换为onnxruntime-gpu):

pip install onnxruntime

三、快速体验

insightface给出了代码体验示例,文件路径为examples/demo_analysis.py,直接运行该文件,可以得到以下结果:

 注意:可能遇到以下报错“AttributeError: module 'numpy' has no attribute 'int'.”

  1. AttributeError: module 'numpy' has no attribute 'int'.
  2. `np.int` was a deprecated alias for the builtin `int`. To avoid this error in existing code, use `int` by itself. Doing this will not modify any behavior and is safe. When replacing `np.int`, you may wish to use e.g. `np.int64` or `np.int32` to specify the precision. If you wish to review your current use, check the
  3. release note link for additional information.

解决方法:找到安装包目录的face_analysis.py文件,比如\xxxx\envs\blog\lib\site-packages\insightface\app\face_analysis.py,将该文件内的所有np.int替换为‘int’(记得带上‘’),如以下代码(该报错可能由于numpy版本问题引起):

  1. def draw_on(self, img, faces):
  2. import cv2
  3. dimg = img.copy()
  4. for i in range(len(faces)):
  5. face = faces[i]
  6. box = face.bbox.astype('int') # 《=====看这里
  7. color = (0, 0, 255)
  8. cv2.rectangle(dimg, (box[0], box[1]), (box[2], box[3]), color, 2)
  9. if face.kps is not None:
  10. kps = face.kps.astype("int") # 《=====看这里
  11. #print(landmark.shape)
  12. for l in range(kps.shape[0]):
  13. color = (0, 0, 255)
  14. if l == 0 or l == 3:
  15. color = (0, 255, 0)
  16. cv2.circle(dimg, (kps[l][0], kps[l][1]), 1, color,
  17. 2)
  18. if face.gender is not None and face.age is not None:
  19. cv2.putText(dimg,'%s,%d'%(face.sex,face.age), (box[0]-1, box[1]-4),cv2.FONT_HERSHEY_COMPLEX,0.7,(0,255,0),1)
  20. #for key, value in face.items():
  21. # if key.startswith('landmark_3d'):
  22. # print(key, value.shape)
  23. # print(value[0:10,:])
  24. # lmk = np.round(value).astype(np.int)
  25. # for l in range(lmk.shape[0]):
  26. # color = (255, 0, 0)
  27. # cv2.circle(dimg, (lmk[l][0], lmk[l][1]), 1, color,
  28. # 2)
  29. return dimg

四、代码实战

examples/demo_analysis.py已经给出了使用示例,下面对部分代码进行解释,并给出测试结果。

1、人脸检测

使用如下代码即可得到人脸检测的结果:

  1. import cv2
  2. import numpy as np
  3. from insightface.app import FaceAnalysis
  4. app = FaceAnalysis(name='buffalo_sc') # 使用的检测模型名为buffalo_sc
  5. app.prepare(ctx_id=-1, det_size=(640, 640)) # ctx_id小于0表示用cpu预测,det_size表示resize后的图片分辨率
  6. img = cv2.imread("multi_people.webp") # 读取图片
  7. faces = app.get(img) # 得到人脸信息
  8. rimg = app.draw_on(img, faces) # 将人脸框绘制到图片上
  9. cv2.imwrite("multi_people_output.jpg", rimg) # 保存图片

结果如下:

 2、人脸识别

检测到人脸之后,通常将人脸编码为特征向量,再通过特征向量的相似度对比判断2个人脸是否为一个人,下面给出从图片中识别指定人脸的代码,以上图为例,目标人脸为最左侧的人脸,如下图:

 识别的代码如下:

  1. import cv2
  2. import numpy as np
  3. from insightface.app import FaceAnalysis
  4. app = FaceAnalysis(name='buffalo_sc') # 使用的检测模型名为buffalo_sc
  5. app.prepare(ctx_id=-1, det_size=(640, 640)) # ctx_id小于0表示用cpu预测,det_size表示resize后的图片分辨率
  6. img = cv2.imread("multi_people.webp") # 读取图片
  7. faces = app.get(img) # 得到人脸信息
  8. # 将人脸特征向量转换为矩阵
  9. feats = []
  10. for face in faces:
  11. feats.append(face.normed_embedding)
  12. feats = np.array(feats, dtype=np.float32)
  13. # 提取目标人脸向量
  14. target = cv2.imread("target.png")
  15. target_faces = app.get(target) # 得到人脸信息
  16. target_feat = np.array(target_faces[0].normed_embedding, dtype=np.float32)
  17. # 人脸向量相似度对比
  18. sims = np.dot(feats, target_feat)
  19. target_index = int(sims.argmax())
  20. rimg = app.draw_on(img, [faces[target_index]]) # 将人脸框绘制到图片上
  21. cv2.imwrite("multi_people_output_target.jpg", rimg) # 保存图片

最后的效果如下:

五、代码及示例图片链接

代码及示例图片链接

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/289203
推荐阅读
相关标签
  

闽ICP备14008679号