天天看點

InsightFace一個用于2D與3D人臉檢測與識别的python庫

作者:人工智能研究所

人臉的檢測與識别,這方面的文章,我們前期的文章也有相關的介紹,主要涉及到MediaPipe Face Detection,以及基于openCV的人臉檢測與識别,并且我們基于CNN卷積神經網絡訓練了自己的人臉識别模型。本期我們分享一個可以用于2D與3D人臉檢測與識别的python庫InsightFace。

InsightFace一個用于2D與3D人臉檢測與識别的python庫

InsightFace是一個用于2D和3D人臉分析的內建Python庫。 InsightFace 有效地實作了各種最先進的人臉識别、人臉檢測和人臉對齊算法,并針對訓練和部署進行了優化。它支援一系列主幹架構,包括 IResNet、RetinaNet、MobileFaceNet、InceptionResNet_v2 和 DenseNet。 除了模型之外,它還可以使用 MS1M、VGG2 和 CASIA-WebFace 等面部資料集。

https://github.com/deepinsight/insightface
PyTorch 1.6+ and/or MXNet=1.6-1.8, with Python 3.x.           
InsightFace一個用于2D與3D人臉檢測與識别的python庫

使用insightface前,我們需要安裝相應的第三方庫,insightface主要基于pytorch,在運作本期代碼前,確定自己的電腦上安裝了pytorch,且版本大于1.6。然後我們還需要安裝insightface。

pip install insightface           

這裡隻需要使用pip進行安裝即可,安裝過程中,會自動安裝相關的第三方庫。

Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/
Collecting 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) ... done
Requirement 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:00
Building 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/e3773fb8b6d1cca87ea1d33d9b1f20a223a6493c896da249b5
Successfully built insightface
Installing collected packages: onnx, insightface
Successfully installed insightface-0.7.3 onnx-1.14.0           

安裝完成後,會自動安裝insightface與onnx,當然此模型還需要安裝onnxruntime,若電腦中有GPU可以安裝GPU版本,當然若隻有CPU,可以直接安裝onnxruntime。

InsightFace一個用于2D與3D人臉檢測與識别的python庫
pip install onnxruntime-gpu
'''
Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/
Collecting 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:00
Collecting 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:00
Requirement 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:00
Requirement 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-gpu
Successfully installed coloredlogs-15.0.1 humanfriendly-10.0 onnxruntime-gpu-1.15.1
'''           

成功安裝完成所有庫之後,我們就可以進行人臉的檢測與識别任務了。

import cv2
import numpy as np
import insightface
from insightface.app import FaceAnalysis
from insightface.data import get_image as ins_get_image

app = 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一個用于2D與3D人臉檢測與識别的python庫

首先我們需要從insightface.app中import FaceAnalysis人臉檢測分析庫,并基于FaceAnalysis搭建一個用于人臉檢測的app,并配置此app檢測的對象尺寸。

配置完成後,我們就可以讀取一張需要進行人臉檢測的圖檔,這裡可以使用cv2.imread來讀取一張圖檔,當然這裡我們也可以讀取一段視訊來進行人臉的檢測。

得到圖檔後,我們直接使用app.get函數來進行人臉的檢測,最後使用app.draw_on函數,把檢測結果顯示在原圖檔上。從檢測的結果來看,模型不僅進行了人臉檢測,還對人臉的性别與年齡進行了預測,當然insightface不僅可以進行人臉檢測,還可以進行人臉識别,隻不過需要我們自己搭建自己的資料集,并進行人臉模型的訓練,這個我們後期進行分享吧。

InsightFace一個用于2D與3D人臉檢測與識别的python庫