龙空技术网

InsightFace一个用于2D与3D人脸检测与识别的python库

人工智能研究所 516

前言:

现时你们对“人脸分类算法”大体比较关怀,我们都需要分析一些“人脸分类算法”的相关文章。那么小编同时在网上网罗了一些关于“人脸分类算法””的相关文章,希望咱们能喜欢,兄弟们一起来学习一下吧!

人脸的检测与识别,这方面的文章,我们前期的文章也有相关的介绍,主要涉及到MediaPipe Face Detection,以及基于openCV的人脸检测与识别,并且我们基于CNN卷积神经网络训练了自己的人脸识别模型。本期我们分享一个可以用于2D与3D人脸检测与识别的python库InsightFace。

InsightFace是一个用于2D和3D人脸分析的集成Python库。 InsightFace 有效地实现了各种最先进的人脸识别、人脸检测和人脸对齐算法,并针对训练和部署进行了优化。它支持一系列主干架构,包括 IResNet、RetinaNet、MobileFaceNet、InceptionResNet_v2 和 DenseNet。 除了模型之外,它还可以使用 MS1M、VGG2 和 CASIA-WebFace 等面部数据集。

 1.6+ and/or MXNet=1.6-1.8, with Python 3.x.

使用insightface前,我们需要安装相应的第三方库,insightface主要基于pytorch,在运行本期代码前,确保自己的电脑上安装了pytorch,且版本大于1.6。然后我们还需要安装insightface。

pip install insightface

这里只需要使用pip进行安装即可,安装过程中,会自动安装相关的第三方库。

Looking in indexes: ,  insightface  Downloading insightface-0.7.3.tar.gz (439 kB)     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 439.5/439.5 kB 9.9 MB/s eta 0:00:00  Installing build dependencies ... done  Getting requirements to build wheel ... done  Installing backend dependencies ... done  Preparing metadata (pyproject.toml) ... doneRequirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from insightface) (1.22.4)Collecting onnx (from insightface)  Downloading onnx-1.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (14.6 MB)     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.6/14.6 MB 101.3 MB/s eta 0:00:00Building wheels for collected packages: insightface  Building wheel for insightface (pyproject.toml) ... done  Created wheel for insightface: filename=insightface-0.7.3-cp310-cp310-linux_x86_64.whl size=1054571 sha256=36da8226c173934e3336d6477a2cdab835fb8a173e585bed38277691b2c9a4fb  Stored in directory: /root/.cache/pip/wheels/e3/d0/80/e3773fb8b6d1cca87ea1d33d9b1f20a223a6493c896da249b5Successfully built insightfaceInstalling collected packages: onnx, insightfaceSuccessfully installed insightface-0.7.3 onnx-1.14.0

安装完成后,会自动安装insightface与onnx,当然此模型还需要安装onnxruntime,若电脑中有GPU可以安装GPU版本,当然若只有CPU,可以直接安装onnxruntime。

pip install onnxruntime-gpu'''Looking in indexes: ,  onnxruntime-gpu  Downloading onnxruntime_gpu-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (121.6 MB)     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 121.6/121.6 MB 2.4 MB/s eta 0:00:00Collecting coloredlogs (from onnxruntime-gpu)  Downloading coloredlogs-15.0.1-py2.py3-none-any.whl (46 kB)     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 46.0/46.0 kB 6.6 MB/s eta 0:00:00Requirement already satisfied: flatbuffers in /usr/local/lib/python3.10/dist-packages (from onnxruntime-gpu) (23.3.3)Requirement already satisfied: numpy>=1.21.6 in /usr/local/lib/python3.10/dist-packages (from onnxruntime-gpu) (1.22.4)Requirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from onnxruntime-gpu) (23.1)Requirement already satisfied: protobuf in /usr/local/lib/python3.10/dist-packages (from onnxruntime-gpu) (3.20.3)Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from onnxruntime-gpu) (1.11.1)Collecting humanfriendly>=9.1 (from coloredlogs->onnxruntime-gpu)  Downloading humanfriendly-10.0-py2.py3-none-any.whl (86 kB)     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 86.8/86.8 kB 13.0 MB/s eta 0:00:00Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy->onnxruntime-gpu) (1.3.0)Installing collected packages: humanfriendly, coloredlogs, onnxruntime-gpuSuccessfully installed coloredlogs-15.0.1 humanfriendly-10.0 onnxruntime-gpu-1.15.1'''

成功安装完成所有库之后,我们就可以进行人脸的检测与识别任务了。

import cv2import numpy as npimport insightfacefrom insightface.app import FaceAnalysisfrom insightface.data import get_image as ins_get_imageapp = FaceAnalysis(providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])app.prepare(ctx_id=0, det_size=(640, 640))#img = ins_get_image('t2')img = cv2.imread('112233.jpg')faces = app.get(img)rimg = app.draw_on(img, faces)cv2.imwrite("./t3_output.jpg", rimg)

首先我们需要从insightface.app中import FaceAnalysis人脸检测分析库,并基于FaceAnalysis搭建一个用于人脸检测的app,并配置此app检测的对象尺寸。

配置完成后,我们就可以读取一张需要进行人脸检测的图片,这里可以使用cv2.imread来读取一张图片,当然这里我们也可以读取一段视频来进行人脸的检测。

得到图片后,我们直接使用app.get函数来进行人脸的检测,最后使用app.draw_on函数,把检测结果显示在原图片上。从检测的结果来看,模型不仅进行了人脸检测,还对人脸的性别与年龄进行了预测,当然insightface不仅可以进行人脸检测,还可以进行人脸识别,只不过需要我们自己搭建自己的数据集,并进行人脸模型的训练,这个我们后期进行分享吧。

标签: #人脸分类算法