3839|3

92

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

AI挑战营(进阶):1. InsightFace 快速上手 [复制链接]

简介

InsightFace是一个开源的2D/3D人脸分析工具,基于Pytorch和MXNet实现,包含多个人脸识别、人脸检测和人脸对齐的前沿算法,经过优化适合高效的训练与部署。

环境准备与安装

环境需求

  • 操作系统 :Ubuntu 22.04
  • CUDA :11.8
  • Python :3.10
  • PyTorch :2.1.0

安装步骤

InsightFace 的安装非常简单,可以通过以下命令直接完成:

  1. pip install insightface -i https://pypi.tuna.tsinghua.edu.cn/simple

在github上的代码库中还有对安装的一些介绍

可以看到,除了安装insightface库外,为了使用GPU,我们还需要安装一些额外的库,如onnxruntime-gpu以启用 GPU 推理。

  1. pip install mxnet onnxruntime-gpu numpy==1.23.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

注意事项

  1. 卸载onnxruntime 如果您的系统已经安装了 onnxruntime,请在安装 onnxruntime-gpu 前卸载它,否则可能会导致推理过程中出现冲突错误。

    1. pip uninstall onnxruntime
  2. 修改 numpy 版本 使用 InsightFace 的 insightface-cli 工具时,可能会因 numpy 的版本不兼容报错:

    1. AttributeError: module 'numpy' has no attribute 'bool'

    经过尝试,将 numpy 的版本修改为 1.23.2可以避免这个错误。

  3. 解决动态库缺失问题

如果报错如下:

  1. FAIL : Failed to load library libonnxruntime_providers_cuda.so with error: libcublasLt.so.11: cannot open shared object file: No such file or directory

则根据下表安装对应版本的onnxruntime-gpu

CUDA cuDNN PyTorch onnxruntime-gpu Install command
12.x 9.x 2.4.1 1.19.2 pip install onnxruntime-gpu==1.19.2
12.x 8.9 2.3.1 1.18.0 pip install onnxruntime-gpu==1.18.0 --extra-index-urlhttps://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/onnxruntime-cuda-12/pypi/simple/
11.8 8.9 2.3.1 1.19.2 pip install onnxruntime-gpu==1.19.2 --extra-index-urlhttps://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/onnxruntime-cuda-11/pypi/simple/

我尝试的是第三行的安装命令,可以解决我报错的问题。

模型下载

InsightFace 提供了多种模型用于不同场景的人脸分析,如下图所示:

为了能够正常进行推理,我们首先需要使用insightface-cli下载相应的模型:

  1. insightface-cli model.download buffalo_sc

默认会使用 buffalo_l 模型,如果没有提前下载,系统会在首次运行时自动下载。为了节省资源,我们可以选择更小的 buffalo_sc 模型。

github上下载链接为google drive,我已将其上传至百度云盘,如果github上的链接无法访问,可以使用以下百度云盘链接获取模型:

推理与测试

人脸检测

完成上述安装和模型下载后,我们可以使用 InsightFace 进行人脸检测。以下是完整的代码示例:

  1. import cv2
  2. import numpy as np
  3. import insightface
  4. from insightface.app import FaceAnalysis
  5. from insightface.data import get_image as ins_get_image
  6. app = FaceAnalysis(name="buffalo_sc",providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])
  7. app.prepare(ctx_id=0, det_size=(640, 640))
  8. img = ins_get_image('/tmp/code/computer_version/insightface/j1')
  9. faces = app.get(img)
  10. rimg = app.draw_on(img, faces)
  11. cv2.imwrite("./j1_output.jpg", rimg)

说明

  1. 模型名称指定 初始化 FaceAnalysis 时,需指定模型名称为 buffalo_sc。如果未指定,系统将自动下载并使用默认的 buffalo_l 模型。
  2. 图片路径 经尝试,图片路径需要为 绝对路径 ,否则会报错。执行ins_get_image读取图片时,支持的图片格式包括 .jpg.png.jpeg,无需额外指定后缀名。

图片j1.jpg为我们自己准备好的图片,如下图:

执行上述代码进行推理,推理结果就会输出到图片j1_output.jpg中,如下图所示:

人脸识别

在完成检测的基础上,我们可以进一步实现人脸识别,通过比较目标人脸与检测结果的人脸特征向量计算相似度。以下是完整代码:

  1. # 将人脸特征向量转换为矩阵
  2. feats = []
  3. for face in faces:
  4. feats.append(face.normed_embedding)
  5. feats = np.array(feats, dtype=np.float32)
  6. # 提取目标人脸向量
  7. target = ins_get_image("/tmp/code/computer_version/insightface/target")
  8. target_faces = app.get(target) # 得到人脸信息
  9. target_feat = np.array(target_faces[0].normed_embedding, dtype=np.float32)
  10. # 人脸向量相似度对比
  11. sims = np.dot(feats, target_feat)
  12. target_index = int(sims.argmax())
  13. rimg = app.draw_on(img, [faces[target_index]]) # 将人脸框绘制到图片上
  14. cv2.imwrite("j1_output_target.jpg", rimg) # 保存图片

注意事项

  1. 目标人脸的选择 在准备目标人脸图片时,建议截取稍大范围的区域,避免仅包含人脸部分,否则可能识别失败。

其中/tmp/code/computer_version/insightface/target就是我们要识别的目标图片,如下图所示:

执行上述代码后,识别结果会保存为 j1_output_target.jpg,识别结果如下图所示:

总结

通过以上流程,我们在 PC 端初步完成了 InsightFace 的全流程操作,为后续在 RV1106 上的部署提供了参考与思路。借助 InsightFace 提供的功能包,我们快速实现了高效的多人实时人脸识别。整个流程涵盖了环境配置、模型下载与加载以及推理测试等关键步骤,其中核心部分主要集中在人脸检测和人脸识别两个模型的使用。

最新回复

大佬厉害   详情 回复 发表于 2024-12-9 16:52
点赞(3) 关注

回复
举报

5275

帖子

239

TA的资源

管理员

沙发
 

速度~

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
 

回复

210

帖子

0

TA的资源

一粒金砂(高级)

板凳
 

跟大佬学习一下。

 

 
 
 

回复

37

帖子

2

TA的资源

一粒金砂(中级)

4
 

大佬厉害

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
【干货上新】电源解决方案和技术第二趴 | DigiKey 应用探索站
当月好物、电源技术资源、特色活动、DigiKey在线实用工具,干货多多~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 4

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表