人臉識(shí)別2:InsightFace實(shí)現(xiàn)人臉識(shí)別Face Recognition(含源碼下載)
目錄
人臉識(shí)別2:InsightFace實(shí)現(xiàn)人臉識(shí)別Face Recognition(含源碼下載)
1. 前言
2. 項(xiàng)目安裝
3. 人臉識(shí)別系統(tǒng)
(1)人臉檢測(cè)和關(guān)鍵點(diǎn)檢測(cè)
(2)人臉校準(zhǔn)
(3)人臉特征提取
(4)人臉比對(duì)(1:1)
(5)人臉?biāo)阉?1:N)
(6)配置文件config
(7)人臉識(shí)別優(yōu)化建議
4. 人臉識(shí)別Demo效果
5. 人臉識(shí)別C/C++版本源碼下載
6. 人臉識(shí)別Android版本源碼下載
7. 人臉識(shí)別Python版本源碼下載
1. 前言
這是項(xiàng)目《人臉識(shí)別Face Recognition》系列之《InsightFace實(shí)現(xiàn)人臉識(shí)別Face Recognition》Python版本;項(xiàng)目基于開(kāi)源ArcFace(也稱InsightFace)模型搭建一套完整的Python版本人臉識(shí)別系統(tǒng)(Face Recognition or Face Identification);
整套人臉識(shí)別系統(tǒng)核心算法包含人臉檢測(cè)和人臉關(guān)鍵點(diǎn)檢測(cè),人臉校準(zhǔn),人臉特征提取以及人臉比對(duì)(1:1)和人臉?biāo)阉?1:N)。本項(xiàng)目人臉識(shí)別系統(tǒng)可以達(dá)到目前商業(yè)級(jí)別的人臉識(shí)別準(zhǔn)確率,在誤識(shí)率(FAR)0.1%的情況下,可提供99.57%的通過(guò)率(TAR);可以滿足人臉比對(duì),人臉簽到、人臉門禁、人員信息查詢、安防監(jiān)控等人臉識(shí)別應(yīng)用場(chǎng)景。
Python版本人臉檢測(cè)和人臉識(shí)別效果:
【尊重原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處】https://blog.csdn.net/guyuealian/article/details/130600472?
更多項(xiàng)目《人臉識(shí)別Face Recognition》系列文章請(qǐng)參考:
- 人臉識(shí)別1:人臉識(shí)別數(shù)據(jù)集https://blog.csdn.net/guyuealian/article/details/130600545
- 人臉識(shí)別2:InsightFace實(shí)現(xiàn)人臉識(shí)別Face Recognition(含源碼下載)https://blog.csdn.net/guyuealian/article/details/130600472
- 人臉識(shí)別3:C/C++ InsightFace實(shí)現(xiàn)人臉識(shí)別Face Recognition(含源碼)https://blog.csdn.net/guyuealian/article/details/130600571
- 人臉識(shí)別4:Android InsightFace實(shí)現(xiàn)人臉識(shí)別Face Recognition(含源碼)https://blog.csdn.net/guyuealian/article/details/130600600
2. 項(xiàng)目安裝
項(xiàng)目結(jié)構(gòu)說(shuō)明
.
├── configs # 配置文件(設(shè)置檢測(cè)模型,特征提取模型)
├── core
│?? ├── alignment # 人臉校準(zhǔn)算法
│?? ├── detection # 人臉檢測(cè)模型
│?? ├── feature # 人臉特征提取模型
│?? ├── face_detector.py # 人臉檢測(cè)(支持MTCNN和RFB)
│?? ├── face_feature.py # 人臉特征提取模型
│?? ├── face_matcher.py # 人臉匹配算法
│?? ├── face_recognizer.py # 人臉識(shí)別
│?? └── face_register.py # 人臉注冊(cè)
├── data # 人臉識(shí)別相關(guān)數(shù)據(jù)
├── face_compare.py # 1:1人臉比對(duì)Demo
├── face_search.py # 1:N人臉?biāo)阉鱀emo
├── register.py # 1:N人臉?biāo)阉魅四様?shù)據(jù)庫(kù)注冊(cè)Demo
├── README.md # 說(shuō)明文檔
└── requirements.txt # 項(xiàng)目依賴文件
Python依賴環(huán)境,使用pip安裝即可,項(xiàng)目代碼都在Ubuntu系統(tǒng)和Windows系統(tǒng)驗(yàn)證正常運(yùn)行,請(qǐng)放心使用;若出現(xiàn)異常,大概率是相關(guān)依賴包版本沒(méi)有完全對(duì)應(yīng)
numpy==1.16.3
matplotlib==3.1.0
Pillow==6.0.0
easydict==1.9
opencv-contrib-python==4.5.2.52
opencv-python==4.5.1.48
pandas==1.1.5
PyYAML==5.3.1
scikit-image==0.17.2
scikit-learn==0.24.0
scipy==1.5.4
seaborn==0.11.2
tensorboard==2.5.0
tensorboardX==2.1
torch==1.7.1+cu110
torchvision==0.8.2+cu110
tqdm==4.55.1
xmltodict==0.12.0
basetrainer
pybaseutils
?項(xiàng)目安裝教程請(qǐng)參考(初學(xué)者入門,麻煩先看完下面教程,配置好開(kāi)發(fā)環(huán)境):?
- 項(xiàng)目開(kāi)發(fā)使用教程和常見(jiàn)問(wèn)題和解決方法
- 視頻教程:1 手把手教你安裝CUDA和cuDNN(1)
- 視頻教程:2 手把手教你安裝CUDA和cuDNN(2)
- 視頻教程:3 如何用Anaconda創(chuàng)建pycharm環(huán)境
- 視頻教程:4 如何在pycharm中使用Anaconda創(chuàng)建的python環(huán)境
3. 人臉識(shí)別系統(tǒng)
人臉識(shí)別主要包含人臉比對(duì)(1:1)和人臉?biāo)阉?1:N)兩大功能,涉及的核心算法主要包含:人臉檢測(cè)和人臉關(guān)鍵點(diǎn)檢測(cè),人臉校準(zhǔn),人臉特征提取以及人臉比對(duì)(1:1)和人臉?biāo)阉?1:N);當(dāng)然,實(shí)際業(yè)務(wù)中,可能還會(huì)增加人臉質(zhì)量檢測(cè)以及活體識(shí)別等算法,礙于篇幅,后續(xù)再分享活體識(shí)別算法。
下圖給出本項(xiàng)目人臉識(shí)別系統(tǒng)算法實(shí)現(xiàn)架構(gòu)流程圖:
(1)人臉檢測(cè)和關(guān)鍵點(diǎn)檢測(cè)
人臉檢測(cè)的方法比較多,項(xiàng)目提供兩種人臉檢測(cè)方法:一種是基于MTCNN的通用人臉檢測(cè)模型,另一種是輕量化的、快速的RFB人臉檢測(cè)模型;這個(gè)兩個(gè)模型都能實(shí)現(xiàn)人臉檢測(cè),并同時(shí)預(yù)測(cè)人臉的五個(gè)關(guān)鍵點(diǎn)(Landmark)。
模型 | Paper | 源碼 | 說(shuō)明 |
MTCNN | Paper | Link |
|
RFB | Paper | Link |
|
- MTCNN人臉檢測(cè)參考項(xiàng)目:GitHub - Sierkinhane/mtcnn-pytorch: A face detection algorithm
- RFB人臉檢測(cè)參考項(xiàng)目:GitHub - Linzaer/Ultra-Light-Fast-Generic-Face-Detector-1MB: ??1MB lightweight face detection model (1MB輕量級(jí)人臉檢測(cè)模型)
下圖是MTCNN模型人臉檢測(cè)和人臉關(guān)鍵點(diǎn)(Landmark)檢測(cè)效果??
- ?人臉關(guān)鍵點(diǎn)(Landmark):共預(yù)測(cè)五個(gè)人臉關(guān)鍵點(diǎn),分別為:左眼中心點(diǎn),右眼中心點(diǎn),鼻尖中心點(diǎn)以及左嘴角和右嘴角
- 利用Landmark信息,后續(xù)可以通過(guò)仿射變換,對(duì)人臉進(jìn)行校準(zhǔn),獲得相對(duì)比較正的人臉。人臉校準(zhǔn)可以有效提升人臉識(shí)別的效果
?
(2)人臉校準(zhǔn)
利用Landmark信息,可以通過(guò)仿射變換,對(duì)人臉進(jìn)行校準(zhǔn),獲得相對(duì)比較正的人臉,項(xiàng)目core/alignment模塊提供人臉校準(zhǔn)算法。
其中實(shí)現(xiàn)思路是:
利用OpenCV的estimateAffine2D()函數(shù)估計(jì)人臉關(guān)鍵點(diǎn)(5個(gè)landmark)和參考人臉關(guān)鍵點(diǎn)(reference landmark)的仿射變換矩陣M,再根據(jù)仿射變換矩陣M矯正人臉圖像
下圖給出人臉校準(zhǔn)的效果圖,其中【image】是原始圖像,【ref-Landmark】圖像是112×112圖像的參考人臉關(guān)鍵點(diǎn)(reference landmark),而【face_alignment】是最終矯正的人臉效果圖。
(3)人臉特征提取
項(xiàng)目基于開(kāi)源的ArcFace(也稱InsightFace)訓(xùn)練框架,開(kāi)發(fā)并優(yōu)化了三個(gè)版本的人臉識(shí)別模型:mobilenet_v2,IR-18(resnet18優(yōu)化版)以及IR-50(resnet50優(yōu)化版),用于人臉特征提取
ArcFace:GitHub - TreB1eN/InsightFace_Pytorch: Pytorch0.4.1 codes for InsightFace
模型 | LFW | CFP_FF | CFP_FP | AgeDB | CALFW | CPLFW |
---|---|---|---|---|---|---|
resnet50 | 99.78 | 99.69 | 98.14 | 97.53 | 95.87 | 92.45 |
resnet18 | 99.55 | 99.61 | 97.74 | 96.52 | 94.66 | 90.01 |
mobilenet_v2 | 99.23 | 99.27 | 90.74 | 93.22 | 93.57 | 88.69 |
resnet50和resnet18參數(shù)量比較大,計(jì)算量較大,適合在PC服務(wù)器部署 ;而mobilenet_v2
模型計(jì)算量較小,適合嵌入式,開(kāi)發(fā)板,Android等終端部署。
(4)人臉比對(duì)(1:1)
1:1人臉比對(duì)(也稱人臉驗(yàn)證,身份驗(yàn)證),即將兩張人臉進(jìn)行1:1比對(duì),得到人臉相似度,來(lái)判斷是否是同一個(gè)人,一般用作人證比對(duì)等場(chǎng)景,比如銀行卡/QQ/微信/支付寶等賬號(hào)登錄時(shí)人臉身份驗(yàn)證。
項(xiàng)目實(shí)現(xiàn)了1:1人臉比對(duì)功能(face_compare.py)
# -*- coding: utf-8 -*-
import os
import cv2
import argparse
import traceback
from core import face_recognizer
from pybaseutils import image_utils, file_utils
class Example2(face_recognizer.FaceRecognizer):
def __init__(self, database):
"""
@param database: 人臉數(shù)據(jù)庫(kù)的路徑
"""
super(Example2, self).__init__(database=database)
def compare_face_task(self, image_file1, image_file2, score_thresh=0.75, vis=True):
"""
1:1人臉比對(duì),比較兩張肖像圖是否是同一個(gè)人
@param image_file1 肖像圖1
@param image_file2 肖像圖2
@param score_thresh 相似人臉?lè)謹(jǐn)?shù)人臉閾值
"""
# 去讀取圖片
image1 = cv2.imread(image_file1)
image2 = cv2.imread(image_file2)
face_info1, face_info2, score = self.compare_face(image1, image2)
if len(face_info1['face']) > 0 and len(face_info2['face']) > 0:
v1 = face_info1["feature"]
v2 = face_info2["feature"]
same_person = score > score_thresh
print("feature1.shape:{}\nfeature1:{}".format(v1.shape, v1[0, 0:20]))
print("feature2.shape:{}\nfeature2:{}".format(v2.shape, v2[0, 0:20]))
print("similarity: {}, same person: {}".format(score, same_person))
if vis: self.show_result(image1, face_info1, image2, face_info2)
else:
print("No face detected")
return score
def show_result(self, image1, face_info1, image2, face_info2):
face1 = face_info1["face"]
face2 = face_info2["face"]
if len(face1) > 0: image_utils.cv_show_image("face1", face1[0], delay=1)
if len(face2) > 0: image_utils.cv_show_image("face2", face2[0], delay=1)
self.draw_result("image1", image=image1, face_info=face_info1, vis=True, delay=1)
self.draw_result("image2", image=image2, face_info=face_info2, vis=True, delay=0)
def parse_opt():
image_file1 = "data/test_image/test1.jpg"
image_file2 = "data/test_image/test2.jpg"
parser = argparse.ArgumentParser()
parser.add_argument('--image_file1', type=str, default=image_file1, help='image_file1')
parser.add_argument('--image_file2', type=str, default=image_file2, help='image_file1')
opt = parser.parse_args()
print(opt)
return opt
if __name__ == "__main__":
"""1:1人臉比對(duì),可用于人證比對(duì)等場(chǎng)景"""
opt = parse_opt()
fr = Example2(database="")
fr.compare_face_task(opt.image_file1, opt.image_file2, vis=True)
測(cè)試1:1人臉比對(duì),可在終端運(yùn)行:
python face_compare.py --image_file1 "data/test_image/test1.jpg" --image_file2 "data/test_image/test2.jpg"
運(yùn)行結(jié)果如下:
(5)人臉?biāo)阉?1:N)
1:N人臉?biāo)阉?,將一張人臉和N張人臉進(jìn)行比對(duì),找出最相似的一張或多張人臉,即1:N人臉?biāo)阉???捎米魅四樅灥?、人臉門禁、人員信息查詢、安防監(jiān)控等應(yīng)用場(chǎng)景。
項(xiàng)目實(shí)現(xiàn)了1:N人臉?biāo)阉鞴δ?,需要提前生成人臉?shù)據(jù)庫(kù)(Face database),先錄入注冊(cè)人臉數(shù)據(jù)
項(xiàng)目register.py 實(shí)現(xiàn)人臉數(shù)據(jù)庫(kù)(database)人臉注冊(cè),database人臉圖像要求滿足以下:
- 圖片按照[ID-XXXX.jpg]命名,如:張三-image.jpg,作為人臉識(shí)別的底圖
- 個(gè)人照片可以是個(gè)人證件照,生活照,肖像照片,要求五官清晰且正臉的照片,不能出現(xiàn)多個(gè)人臉的情況
- 盡量不要出現(xiàn)過(guò)度美顏,頭發(fā)遮擋,低頭側(cè)臉等問(wèn)題
?實(shí)現(xiàn)人臉注冊(cè), 可在終端運(yùn)行(register.py):
# 默認(rèn)人臉數(shù)據(jù)庫(kù),圖像存放在portrait = "./data/database/portrait"
# 默認(rèn)人臉數(shù)據(jù)庫(kù),特征文件保存在database='./data/database/database-resnet50.json'
python register.py
運(yùn)行結(jié)果如下:
?如果需要注冊(cè)新人?,請(qǐng)參考如下步驟:
- 采集一張新人的個(gè)人照片,以張三的照片為例子
- 照片保存在人臉數(shù)據(jù)庫(kù)中(data/database/portrait)中,圖片按照[ID-XXXX.jpg]命名,如:張三-image.jpg,作為人臉識(shí)別的底圖
- 然后運(yùn)行register.py,完成人臉數(shù)據(jù)庫(kù)的人臉注冊(cè)
完成人臉注冊(cè)后,下一步可以進(jìn)行1:N人臉?biāo)阉?,?shí)現(xiàn)人臉識(shí)別的功能(face_search.py):
- 測(cè)試圖片文件,可在終端運(yùn)行:
# 待識(shí)別人臉圖片存放在項(xiàng)目目錄data/test_image
python face_search.py --image_dir "data/test_image"
- 測(cè)試視頻文件,可在終端運(yùn)行:
# 測(cè)試視頻文件,--video_file填寫(xiě)視頻文件的路徑
python face_search.py --video_file "data/test-video.mp4"
- 測(cè)試攝像頭,可在終端運(yùn)行:
# 測(cè)試攝像頭,--video_file填寫(xiě)攝像頭ID號(hào),一般默認(rèn)從0開(kāi)始
python face_search.py --video_file 0
# -*- coding: utf-8 -*-
import os
import cv2
import argparse
import traceback
from configs import configs
from core import face_recognizer
from pybaseutils import image_utils, file_utils
class Example1(face_recognizer.FaceRecognizer):
def __init__(self, database):
"""
@param database: 人臉數(shù)據(jù)庫(kù)的路徑
"""
super(Example1, self).__init__(database=database)
def start_capture(self, video_file, save_video=None, detect_freq=1, vis=True):
"""
start capture video
:param video_file: *.avi,*.mp4,...
:param save_video: *.avi
:param detect_freq:
:return:
"""
video_cap = image_utils.get_video_capture(video_file)
width, height, numFrames, fps = image_utils.get_video_info(video_cap)
if save_video:
self.video_writer = image_utils.get_video_writer(save_video, width, height, fps)
count = 0
while True:
if count % detect_freq == 0:
# 設(shè)置抽幀的位置
if isinstance(video_file, str): video_cap.set(cv2.CAP_PROP_POS_FRAMES, count)
isSuccess, frame = video_cap.read()
if not isSuccess:
break
frame, face_info = self.search_face_task(frame, thickness=4, fontScale=2.0, delay=10, vis=True)
if save_video:
self.video_writer.write(frame)
count += 1
video_cap.release()
def detect_image_dir(self, image_dir, out_dir=None, vis=True):
"""
@param image_dir:
@param out_dir:
@param vis:
@return:
"""
image_list = file_utils.get_files_lists(image_dir, postfix=file_utils.IMG_POSTFIX)
for image_file in image_list:
try:
print("image_file:{}\t".format(image_file), end=',', flush=True)
image = image_utils.read_image_ch(image_file)
image = image_utils.resize_image(image, size=(None, 640))
image, face_info = self.search_face_task(image, vis=vis)
if out_dir:
out_file = file_utils.create_dir(out_dir, None, os.path.basename(image_file))
print("save result:{}".format(out_file))
cv2.imwrite(out_file, image)
except:
traceback.print_exc()
print(image_file, flush=True)
def search_face_task(self, bgr, thickness=2, fontScale=1.5, delay=0, vis=False):
"""
1:N人臉?biāo)阉魅蝿?wù)
:param bgr: BGR image
:return:
"""
face_info = self.detect_search(bgr, max_face=-1, vis=False)
image = self.draw_result("Recognizer", image=bgr, face_info=face_info,
thickness=thickness, fontScale=fontScale, delay=delay, vis=vis)
return image, face_info
def parse_opt():
database = configs.database # 存儲(chǔ)人臉數(shù)據(jù)庫(kù)特征路徑database
# image_dir = 'data/database-test' # 測(cè)試圖片的目錄
image_dir = 'data/test_image' # 測(cè)試圖片的目錄
out_dir = "output/" # 保存檢測(cè)結(jié)果
video_file = None # video_file is None表示進(jìn)行圖片測(cè)試
# video_file = "data/test-video.mp4" # 視頻文件測(cè)試
# video_file = "0" # 攝像頭測(cè)試
parser = argparse.ArgumentParser()
parser.add_argument('--database', type=str, default=database, help='存儲(chǔ)人臉數(shù)據(jù)庫(kù)特征路徑database')
parser.add_argument('--image_dir', type=str, default=image_dir, help='image_dir')
parser.add_argument('--video_file', type=str, default=video_file, help='camera id or video file')
parser.add_argument('--out_dir', type=str, default=out_dir, help='save result')
opt = parser.parse_args()
print(opt)
return opt
if __name__ == "__main__":
"""1:N人臉?biāo)阉?可用于人臉簽到、人臉門禁、人員信息查詢、安防監(jiān)控等應(yīng)用場(chǎng)景"""
opt = parse_opt()
fr = Example1(database=opt.database)
if isinstance(opt.video_file, str) or isinstance(opt.video_file, int):
opt.video_file = str(opt.video_file)
if len(opt.video_file) == 1: opt.video_file = int(opt.video_file)
save_video = os.path.join(opt.out_dir, "result.avi") if opt.out_dir else None
fr.start_capture(opt.video_file, save_video, detect_freq=1, vis=True)
else:
fr.detect_image_dir(opt.image_dir, opt.out_dir, vis=True)
(6)配置文件config
項(xiàng)目配置文件configs/configs.py,用于設(shè)置人臉檢測(cè)模型,特征提取模型,可以根據(jù)自己的需要選擇
- 人臉檢測(cè)模型,目前支持RFB和MTCNN人臉檢測(cè)
- 人臉識(shí)別(特征提取)模型,目前支持resnet50,resnet18和mobilenet_v2模型
人臉識(shí)別特征提取模型,提供resnet50,resnet18和mobilenet_v2 ,其測(cè)試準(zhǔn)確率,參考如下:
模型 | LFW | CFP_FF | CFP_FP | AgeDB | CALFW | CPLFW |
---|---|---|---|---|---|---|
resnet50 | 99.78 | 99.69 | 98.14 | 97.53 | 95.87 | 92.45 |
resnet18 | 99.55 | 99.61 | 97.74 | 96.52 | 94.66 | 90.01 |
mobilenet_v2 | 99.23 | 99.27 | 90.74 | 93.22 | 93.57 | 88.69 |
resnet50和resnet18參數(shù)量比較大,計(jì)算量較大,適合在PC服務(wù)器部署 ;而mobilenet_v2
模型計(jì)算量較小,適合嵌入式,開(kāi)發(fā)板,Android等終端部署。
# -*-coding: utf-8 -*-
import torch
import os
root = os.path.dirname(os.path.dirname(__file__))
det_thresh = 0.5 # 人臉檢測(cè)閾值,小于該閾值的檢測(cè)框會(huì)被剔除
rec_thresh = 0.5 # 人臉識(shí)別閾值,小于該閾值的人臉識(shí)別結(jié)果為unknown,表示未知
# 人臉檢測(cè)模型,目前支持RFB和MTCNN人臉檢測(cè)
DETECTOR = {
# "net_name": "RFB",
"net_name": "MTCNN",
}
# 人臉識(shí)別(特征提取)模型配置文件,目前支持resnet50,resnet18和mobilenet_v2模型
FEATURE = {
"net_name": "resnet50",
# "net_name": "resnet18",
# "net_name": "mobilenet_v2",
"input_size": (112, 112),
"embedding_size": 512
}
# 人臉數(shù)據(jù)庫(kù)圖像路徑,用于注冊(cè)人臉
portrait = "./data/database/portrait"
# 人臉數(shù)據(jù)庫(kù)特征路徑database(注冊(cè)人臉后生成的特征文件)
database = os.path.join(os.path.dirname(portrait), "database-{}.json".format(FEATURE['net_name']))
# 運(yùn)行設(shè)備
# device = "cpu"
device = "cuda:0" if torch.cuda.is_available() else "cpu"
(7)人臉識(shí)別優(yōu)化建議
- 人臉識(shí)別依賴人臉檢測(cè),一個(gè)高精度的人臉檢測(cè)模型算法,可以有效提高人臉識(shí)別的準(zhǔn)確率
- 人臉校準(zhǔn)算法可以矯正人臉傾斜等問(wèn)題,可以極大提高人臉識(shí)別效果;需要依賴人臉關(guān)鍵點(diǎn)檢測(cè)(Landmark),本項(xiàng)目使用的RFB和MTCNN模型都可預(yù)測(cè)人臉關(guān)鍵點(diǎn)
- 人臉識(shí)別中,待識(shí)別人臉圖片,如果存在低頭側(cè)臉,或者人臉存在遮擋等情況,人臉識(shí)別準(zhǔn)確率較低(可能被識(shí)別為unknown),實(shí)際使用過(guò)程中,需要用戶配合,正對(duì)著攝像頭,以提高人臉識(shí)別準(zhǔn)確率的效果。
- 1:N人臉?biāo)阉髦?/strong>,要求注冊(cè)底庫(kù)的人臉數(shù)據(jù)庫(kù)是高質(zhì)量的個(gè)人照片;建議每人需要提供一張高清的、不模糊的、少美顏的,五官清晰可見(jiàn)的,正臉的,不低頭不側(cè)臉的個(gè)人自拍照(生活照、證件照),以便可以生成高質(zhì)量的人臉特征
- 1:N人臉?biāo)阉髦?/strong>,當(dāng)N屬于百萬(wàn)級(jí)別以上海量人臉數(shù)據(jù)時(shí),人臉識(shí)別會(huì)比較慢,畢竟需要遍歷人臉進(jìn)行特征匹配,性能較差;解決方法是可以采用人臉特征聚類,分而治之的思路;目前已有很多開(kāi)源框架,感興趣的可以參考Faiss 、milvus等庫(kù)。
- 目前,項(xiàng)目暫不支持人臉真?zhèn)舞b別(活體識(shí)別),后續(xù)計(jì)劃開(kāi)發(fā)基于RGB的活體識(shí)別功能,敬請(qǐng)期待哈
4. 人臉識(shí)別Demo效果
下圖是Python版本的人臉識(shí)別Demo效果,圖中繪制了綠色框,框上面文本是人臉識(shí)別結(jié)果和匹配相似度(置信度);當(dāng)置信度小于rec_thresh=0.5時(shí),人臉識(shí)別結(jié)果為unknown,表示未知。
?
5. 人臉識(shí)別C/C++版本源碼下載
參考文章?《人臉檢測(cè)和人臉識(shí)別3:C/C++實(shí)現(xiàn)人臉檢測(cè)和人臉識(shí)別》https://blog.csdn.net/guyuealian/article/details/130600571
C/C++版本人臉識(shí)別效果 | Python版本人臉識(shí)別效果 |
![]() |
![]() |
6. 人臉識(shí)別Android版本源碼下載
參考文章?《人臉檢測(cè)和人臉識(shí)別4:Android實(shí)現(xiàn)人臉檢測(cè)和人臉識(shí)別》https://blog.csdn.net/guyuealian/article/details/130600600
??
7. 人臉識(shí)別Python版本源碼下載
InsightFace人臉識(shí)別Python版本源碼下載:人臉識(shí)別2:Python實(shí)現(xiàn)人臉識(shí)別Face Recognition(含源碼)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-446615.html
項(xiàng)目源碼包含內(nèi)容:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-446615.html
- 提供兩種人臉檢測(cè)方法:一種是基于MTCNN的通用人臉檢測(cè)模型,另一種是輕量化的、快速的RFB人臉檢測(cè)模型;這個(gè)兩個(gè)模型都能實(shí)現(xiàn)人臉檢測(cè),并同時(shí)預(yù)測(cè)人臉的五個(gè)關(guān)鍵點(diǎn)(Landmark)。
- 提供三個(gè)人臉識(shí)別特征提取模型:mobilenet_v2,IR-18(resnet18優(yōu)化版)以及IR-50(resnet50優(yōu)化版),用于人臉特征提取
- 提供1:1人臉比對(duì):face_compare.py,可用于人證比對(duì)等場(chǎng)景
- 提供人臉注冊(cè)功能:register.py,項(xiàng)目自帶人臉識(shí)別測(cè)試數(shù)據(jù),可用于驗(yàn)證人臉識(shí)別效果
- 提供1:N人臉?biāo)阉鳎?/strong>face_search.py,可用于人臉簽到、人臉門禁、人員信息查詢、安防監(jiān)控等應(yīng)用場(chǎng)景
- 項(xiàng)目1:N人臉?biāo)阉鳎?/strong>face_search.py,支持圖片,視頻和攝像頭測(cè)試
到了這里,關(guān)于人臉識(shí)別2:InsightFace實(shí)現(xiàn)人臉識(shí)別Face Recognition(含源碼下載)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!