DeepFace:人臉識(shí)別庫(kù) DeepFace 簡(jiǎn)單認(rèn)知

人臉識(shí)別基本原理:

人臉檢測(cè):人臉檢測(cè)是指在圖像或視頻中自動(dòng)檢測(cè)出人臉的位置,并將其框出來(lái)的過(guò)程。該技術(shù)通常使用分類器或神經(jīng)網(wǎng)絡(luò)模型來(lái)檢測(cè)面部特征、形狀、顏色等,從而確定人臉的位置。

人臉識(shí)別:人臉識(shí)別是指在已經(jīng)檢測(cè)到人臉的基礎(chǔ)上,通過(guò)對(duì)其特征進(jìn)行比較和匹配,將其與先前存儲(chǔ)的一組人臉數(shù)據(jù)集中的個(gè)體進(jìn)行識(shí)別和辨認(rèn)的過(guò)程。這種技術(shù)通常使用各種算法(如 PCA、LBP、CNN 等)來(lái)提取人臉特征,并使用相似性計(jì)算方法來(lái)比較和匹配人臉。

2DeepFace
DeepFace 是 Python 上最輕量級(jí)的人臉識(shí)別和面部屬性分析庫(kù)。開(kāi)源的 DeepFace 庫(kù)包括所有用于人臉識(shí)別的前沿 AI 模型,并自動(dòng)處理后臺(tái)面部識(shí)別的所有程序。

安裝很方便,更過(guò)內(nèi)容小伙伴可以參考項(xiàng)目文檔,https://github.com/serengil/deepface

# pip install deepface==0.0.79
在識(shí)別時(shí),需要下載對(duì)應(yīng)模型的權(quán)重文件,有些是特征點(diǎn)獲取的模型,需要科學(xué)上網(wǎng),如果無(wú)法下載,可以到有網(wǎng)的機(jī)器下載,項(xiàng)目中的 單元測(cè)試中有一些測(cè)試腳本,執(zhí)行的時(shí)候會(huì)下載,

3支持的功能:
人臉檢測(cè):人臉檢測(cè)是指通過(guò)圖片或者視頻幀,通過(guò)檢測(cè)算法,確定人臉的位置坐標(biāo)
rst = DeepFace.extract_faces(
            img_path=image,
            target_size=(224, 224),
            detector_backend="mtcnn",
            enforce_detection=True,
            align=True,
            grayscale=False)
人臉驗(yàn)證:人臉驗(yàn)證的任務(wù)是指將一張臉與另一張人臉進(jìn)行比較,以驗(yàn)證它是否匹配。因此,人臉驗(yàn)證通常用于將候選人的面部與另一個(gè)候選人的面部進(jìn)行比較。這可用于確認(rèn)物理人臉是否與身份證件中的人臉匹配。
verification = DeepFace.verify(img1_path = "img1.jpg", img2_path = "img2.jpg")
人臉識(shí)別:任務(wù)是指在圖像數(shù)據(jù)庫(kù)中查找人臉。執(zhí)行人臉識(shí)別需要多次運(yùn)行人臉驗(yàn)證。
recognition = DeepFace.find(img_path = "img.jpg", db_path = “C:/facial_db")
面部屬性分析:人臉屬性分析的任務(wù)是指描述人臉圖像的視覺(jué)屬性。因此,面部屬性分析用于提取年齡、性別分類、情緒分析或種族/民族預(yù)測(cè)等屬性。
analysis = DeepFace.analyze(img_path = "img.jpg", actions = ["age", "gender", "emotion", "race"]) print(analysis)
實(shí)時(shí)人臉?lè)治觯捍斯δ馨ㄊ褂镁W(wǎng)絡(luò)攝像頭的實(shí)時(shí)視頻源測(cè)試人臉識(shí)別和面部屬性分析。
DeepFace.stream(db_path = “C:/facial_db”)
4人臉檢測(cè)器
人臉檢測(cè)和對(duì)齊是面部識(shí)別管道非常重要的階段。谷歌表示,僅面部對(duì)齊就可以將面部識(shí)別準(zhǔn)確率提高0.76%。這里的檢測(cè)即指這圖片中找到人臉的位置,對(duì)齊即把人臉通過(guò)類似透視變換的操作一樣。deepface 支持的檢測(cè)器如下:

OpenCV: 與其他人臉檢測(cè)器相比,OpenCV 是最輕量級(jí)的人臉檢測(cè)器。流行的圖像處理工具使用不基于深度學(xué)習(xí)技術(shù)的 haar-cascade 算法。這就是為什么它很快,但它的性能相對(duì)較低。為了使 OpenCV 正常工作,需要正面圖像。此外,它的眼睛檢測(cè)性能一般。這會(huì)導(dǎo)致對(duì)齊問(wèn)題。請(qǐng)注意,DeepFace 中的默認(rèn)檢測(cè)器是 OpenCV。使用 OpenCV 進(jìn)行人臉檢測(cè)
Dlib: 該檢測(cè)器在后臺(tái)使用 hog 算法。因此,與 OpenCV 類似,它不是基于深度學(xué)習(xí)的。盡管如此,它的檢測(cè)和對(duì)齊分?jǐn)?shù)相對(duì)較高。
SSD: SSD 代表 單次檢測(cè)器;它是一種流行的基于深度學(xué)習(xí)的檢測(cè)器。SSD 的性能可與 OpenCV 相媲美。但是,SSD 不支持面部特征點(diǎn),并且依賴于 OpenCV 的眼睛檢測(cè)模塊來(lái)對(duì)齊。盡管其檢測(cè)性能很高,但對(duì)準(zhǔn)分?jǐn)?shù)僅為平均水平。
MTCNN: MTCNN 這是一個(gè)基于深度學(xué)習(xí)的人臉檢測(cè)器,它帶有面部特征點(diǎn)。這就是為什么 MTCNN 的檢測(cè)和對(duì)齊得分都很高的原因。但是,它比 OpenCV,SSD 和 Dlib 慢。MTCNN 是一種多任務(wù)級(jí)聯(lián)卷積神經(jīng)網(wǎng)絡(luò)的人臉檢測(cè)算法,能夠同時(shí)實(shí)現(xiàn)人臉檢測(cè)、關(guān)鍵點(diǎn)定位和人臉對(duì)齊等功能。其對(duì)于大尺寸人臉的檢測(cè)效果較好,并且相對(duì)于 RetinaFace 的模型規(guī)模較小。
RetinaFace: RetinaFace 被公認(rèn)為最先進(jìn)的基于深度學(xué)習(xí)的人臉檢測(cè)模型。它在野外的表現(xiàn)具有挑戰(zhàn)性。但是,它需要很高的計(jì)算能力。這就是為什么與其他人臉檢測(cè)器相比,RetinaFace 是速度最慢的人臉檢測(cè)器。RetinaFace 是一種基于卷積神經(jīng)網(wǎng)絡(luò)的人臉檢測(cè)算法,具有高精度的特點(diǎn)。其在 WIDER FACE 和 COCO 數(shù)據(jù)集上的表現(xiàn)比 MTCNN 更好,尤其是對(duì)于小尺寸人臉的檢測(cè)效果更佳。
detectors = ["opencv", "ssd", "mtcnn", "dlib", "retinaface"]
應(yīng)該使用哪種人臉檢測(cè)器?需要根據(jù)實(shí)際情況分析

如果 高置信度,考慮使用 RetinaFace 或 MTCNN
如果希望高速,清洗一部分沒(méi)有人臉的照片,那么,可以使用 OpenCV 或 SSD
5人臉識(shí)別模型
人臉識(shí)別模型,即通過(guò)對(duì)人臉庫(kù)的數(shù)據(jù)進(jìn)行特征提取,然后提取需要識(shí)別的圖片的特征,兩者通過(guò)計(jì)算生成一個(gè)相似度值,這個(gè)值的指定閾值內(nèi),即確定為同一個(gè)人。

VGG-Face:VGG 代表 視覺(jué)幾何組。VGG 神經(jīng)網(wǎng)絡(luò)(VGGNet)是基于深度卷積神經(jīng)網(wǎng)絡(luò)最常用的圖像識(shí)別模型類型之一。VGG 人臉識(shí)別模型在流行的野外標(biāo)記人臉 (LFW) 數(shù)據(jù)集上實(shí)現(xiàn)了 97.78% 的準(zhǔn)確率。
Facenet:該模型由谷歌的研究人員開(kāi)發(fā)。FaceNet 被認(rèn)為是通過(guò)深度學(xué)習(xí)進(jìn)行人臉檢測(cè)和識(shí)別的最先進(jìn)的模型。FaceNet 的主要優(yōu)點(diǎn)是其高效率和高性能,據(jù)報(bào)道,它在 LFW 數(shù)據(jù)集上達(dá)到了99.63%的準(zhǔn)確率。
OpenFace :這個(gè)人臉識(shí)別模型是由卡內(nèi)基梅隆大學(xué)的研究人員建立的。因此,OpenFace 在很大程度上受到 FaceNet 項(xiàng)目的啟發(fā),但這更輕量級(jí),其許可證類型更靈活,OpenFace 在 LFW 數(shù)據(jù)集上實(shí)現(xiàn)了93.80%的準(zhǔn)確率。
DeepFace: 這種人臉識(shí)別模型是由 Facebook 的研究人員開(kāi)發(fā)的。Facebook DeepFace 算法是在屬于 4000 萬(wàn)張面孔的標(biāo)記數(shù)據(jù)集上進(jìn)行訓(xùn)練的,這是發(fā)布時(shí)最大的面部數(shù)據(jù)集。該方法基于具有九層的深度神經(jīng)網(wǎng)絡(luò)。Facebook 模型在 LFW 數(shù)據(jù)集基準(zhǔn)測(cè)試上實(shí)現(xiàn)了97.35%(+/- 0.25%)的準(zhǔn)確率。
DeepID: DeepID 人臉驗(yàn)證算法基于深度學(xué)習(xí)進(jìn)行人臉識(shí)別。它是首批使用卷積神經(jīng)網(wǎng)絡(luò)并在人臉識(shí)別任務(wù)上實(shí)現(xiàn)優(yōu)于人類性能的模型之一。Deep-ID 是由香港中文大學(xué)的研究人員引入的?;?DeepID 人臉識(shí)別的系統(tǒng)是第一批在這項(xiàng)任務(wù)中超越人類表現(xiàn)的系統(tǒng)。例如,DeepID2 在野外標(biāo)記面孔(LFW)數(shù)據(jù)集上實(shí)現(xiàn)了99.15%。
Dlib: Dlib 人臉識(shí)別模型將自己命名為“世界上最簡(jiǎn)單的 python 面部識(shí)別 API”。Dlib 的人臉識(shí)別工具將人臉圖像映射到 128 維矢量空間,其中同一個(gè)人的圖像彼此靠近,而不同人的圖像相距甚遠(yuǎn)。因此,dlib 通過(guò)將人臉映射到 128d 空間,然后檢查它們的歐幾里得距離是否足夠小來(lái)執(zhí)行人臉識(shí)別。dlib 模型的距離閾值為 0.6,在標(biāo)準(zhǔn) LFW 人臉識(shí)別基準(zhǔn)上實(shí)現(xiàn)了 99.38% 的準(zhǔn)確率。
ArcFace: 這是模型組合中的最新型號(hào)。它的聯(lián)合設(shè)計(jì)師是倫敦帝國(guó)理工學(xué)院和 InsightFace 的研究人員。ArcFace 模型在 LFW 數(shù)據(jù)集上的準(zhǔn)確度達(dá)到 99.40%。
SFace: 是一種人臉識(shí)別的預(yù)訓(xùn)練模型,它是基于深度神經(jīng)網(wǎng)絡(luò)的人臉識(shí)別模型。SFace 模型是由中國(guó)科學(xué)院自動(dòng)化研究所的研究人員開(kāi)發(fā)的,它在多個(gè)人臉識(shí)別競(jìng)賽中表現(xiàn)出色。SFace 模型采用了一種名為“中心損失”的訓(xùn)練方法,可以使得模型在人臉識(shí)別任務(wù)中更加準(zhǔn)確。
models=["VGG-Face", "Facenet", "Facenet512", "OpenFace", "DeepFace", "DeepID", "ArcFace", "Dlib","SFace"]
經(jīng)過(guò)測(cè)試發(fā)現(xiàn),Deepface 中,使用默認(rèn)閾值,ArcFace,和 SFace 的識(shí)別度要好于其他的模型。當(dāng)然,對(duì)應(yīng)的閾值可以通過(guò)修改源碼的方式調(diào)整,這里我們已 cosine 為例

對(duì)應(yīng)的文件位置為:Python\Python310\site-packages\deepface\commons\distance.py,注釋代碼為默認(rèn)的原來(lái)閾值

......
def findThreshold(model_name, distance_metric):

    base_threshold = {"cosine": 0.40, "euclidean": 0.55, "euclidean_l2": 0.75}

    thresholds = {
        "VGG-Face": {"cosine": 0.40, "euclidean": 0.60, "euclidean_l2": 0.86},
        "Facenet": {"cosine": 0.40, "euclidean": 10, "euclidean_l2": 0.80},
        "Facenet512": {"cosine": 0.30, "euclidean": 23.56, "euclidean_l2": 1.04},
      # "ArcFace": {"cosine": 0.68, "euclidean": 4.15, "euclidean_l2": 1.13},
        "ArcFace": {"cosine": 0.45, "euclidean": 4.15, "euclidean_l2": 1.13},
        "Dlib": {"cosine": 0.07, "euclidean": 0.6, "euclidean_l2": 0.4},
        # "SFace": {"cosine": 0.593, "euclidean": 10.734, "euclidean_l2": 1.055},
        "SFace": {"cosine": 0.60, "euclidean": 10.734, "euclidean_l2": 1.055},
        "OpenFace": {"cosine": 0.10, "euclidean": 0.55, "euclidean_l2": 0.55},
        "DeepFace": {"cosine": 0.23, "euclidean": 64, "euclidean_l2": 0.64},
        "DeepID": {"cosine": 0.015, "euclidean": 45, "euclidean_l2": 0.17},
    }

    threshold = thresholds.get(model_name, base_threshold).get(distance_metric, 0.4)

    return threshold
    .......
6實(shí)際分析
在實(shí)際測(cè)試中發(fā)現(xiàn),deepface 對(duì) GPU 的利用很低,只是使用了顯存,在同等情況下,還不如 CPU 并行跑的快。

實(shí)際使用中,如果采集的照片質(zhì)量太低,考慮對(duì)識(shí)別數(shù)據(jù)進(jìn)行清洗,然后在和人臉庫(kù)比對(duì),比如,檢測(cè)人臉大小過(guò)濾,頭部姿態(tài)過(guò)濾,置信度過(guò)濾等方式,同時(shí)可以調(diào)整閾值,這里需要說(shuō)明的是,deepface 的 余弦相似度,和其他的人臉識(shí)別模型相反的,在取值時(shí),用 1 減了,所以 deepface 的余弦值時(shí)越小越好,而且其他的人臉識(shí)別是越大越好。

可以在源碼的這個(gè)位置看到

.......
def findCosineDistance(source_representation, test_representation):
    a = np.matmul(np.transpose(source_representation), test_representation)
    b = np.sum(np.multiply(source_representation, source_representation))
    c = np.sum(np.multiply(test_representation, test_representation))
    return 1 - (a / (np.sqrt(b) * np.sqrt(c)))
........
簡(jiǎn)單調(diào)用

from deepface import DeepFace

# 人臉識(shí)別
models=["VGG-Face", "Facenet", "Facenet512", "OpenFace", "DeepFace", "DeepID", "ArcFace", "Dlib"]
# 人臉檢測(cè)
detectors = ["opencv", "ssd", "mtcnn", "dlib", "retinaface"]
# 教室人臉識(shí)別
verification = DeepFace.verify(img1_path = "hg1.png", img2_path = "hg2.png",model_name=models[6],detector_backend = detectors[4] )
print(verification)

這里之前測(cè)試,所以做了一個(gè),deepface 環(huán)境鏡像 ,涉及 deepface API 環(huán)境, deepface 部分 models(*.h5) 權(quán)重文件和檢測(cè)器,環(huán)境有問(wèn)題小伙伴可以直接用

docker pull liruilong/deepface_and_deepface_models






7方法參數(shù)介紹
verify 方法

"""
    @Time    :   2023/06/13 00:34:17
    @Author  :   liruilonger@gmail.com
    @Version :   1.0
    @Desc    :   人臉驗(yàn)證:用于驗(yàn)證圖像對(duì)是否為同一人或不同人,驗(yàn)證函數(shù)將面部圖像表示為向量,然后計(jì)算這些向量之間的相似度。
                  同一人圖像的向量應(yīng)具有更高的相似度(或更小的距離)比不同人的向量。

                 Args:
                   + img1_path (str): 第一張圖像的路徑
                   + img2_path (str): 第二張圖像的路徑
                   + model_name (str): 要使用的人臉識(shí)別模型的名稱(默認(rèn)為“VGG-Face”)
                   + detector_backend (str): 要使用的人臉檢測(cè)后端(默認(rèn)為“opencv”)
                   + distance_metric (str): 用于比較面部嵌入的距離度量(默認(rèn)為“cosine”)
                   + enforce_detection (bool): 是否在圖像中未檢測(cè)到人臉時(shí)引發(fā)異常(默認(rèn)為True)
                   + align (bool): 是否在生成嵌入之前執(zhí)行面部對(duì)齊(默認(rèn)為True)
                   + normalization (str): 用于預(yù)處理圖像的歸一化技術(shù)(默認(rèn)為“base”)
                 Returns:
                   + verified(核實(shí)):True
                   + distance(距離):0.4439834803806296
                   + threshold(閾值):0.593
                   + model:SFace
                   + detector_backend:mtcnn
                   + similarity_metric(相似性指標(biāo)):cosine
                   + facial_areas(人臉位置):{'img1': {'x': 0, 'y': 0, 'w': 200, 'h': 255}, 'img2': {'x': 2, 'y': 13, 'w': 194, 'h': 231}}
                   + time:1.95
                   void
    """

    dfs = DeepFace.verify(
        img1_path="W:\\python_code\\deepface\\temp\\cf\\cf_6dd3a0638cf4f4006aa1f455cac65577d.jpg.png",
        img2_path ="W:\\python_code\\deepface\\temp\\cf\\cf_8a96787835b5d4677a56ad6db0c610958.jpg.png",
        model_name="SFace",
        detector_backend="mtcnn",
        enforce_detection=False)
find 方法

    """
        @Time    :   2023/05/21 02:35:51
        @Author  :   liruilonger@gmail.com
        @Version :   1.0
        @Desc    :   DeepFace.find方法是DeepFace庫(kù)中的一個(gè)方法,用于在人臉數(shù)據(jù)庫(kù)中查找與給定人臉最相似的人臉。
                     Args:
                        - img_path:要查找的人臉圖像路徑、numpy數(shù)組(BGR)或base64編碼的圖像。
                        - db_path:人臉數(shù)據(jù)庫(kù)路徑。您應(yīng)該在此文件夾中存儲(chǔ)一些.jpg文件。
                        - model_name:人臉識(shí)別模型的名稱,例如VGG-Face、Facenet、Facenet512、OpenFace、DeepFace、DeepID、Dlib、ArcFace、SFace。
                        - distance_metric:距離度量方法可以是cosine、euclidean或euclideanl2。
                        - enforce_detection 參數(shù)是一個(gè)布爾值,指定如果無(wú)法檢測(cè)到人臉,則該函數(shù)是否應(yīng)引發(fā)異常。如果不想得到異常并仍要運(yùn)行該函數(shù),則將其設(shè)置為False。這對(duì)于低分辨率圖像可能很方便。
                        - detector_backend 參數(shù)指定要使用的人臉檢測(cè)器后端,可以是opencv、retinaface、mtcnn、ssd、dlib或mediapipe。
                        - align 參數(shù)是一個(gè)布爾值,指定是否應(yīng)對(duì)人臉進(jìn)行對(duì)齊。
                        - normalization 參數(shù)指定要使用的歸一化方法,可以是base VGGFace Facenet raw 等
                        - silent參數(shù)是一個(gè)布爾值,用于禁用一些日志記錄和進(jìn)度條。
                     Returns:
                       df: 返回一個(gè)滿足指定閾值的 的一個(gè) pandas 對(duì)象
        """
    dfs = DeepFace.find(
        img_path="huge_1.jpg",
        db_path="W:\python_code\db",
        model_name="DeepID",
        distance_metric="cosine",
        enforce_detection=True,
        detector_backend="retinaface",
        align=False,
        normalization="ArcFace",
        silent=False,
    )
extract_faces 方法

    """
    @Time    :   2023/05/20 03:50:07
    @Author  :   liruilonger@gmail.com
    @Version :   1.0
    @Desc    :   extract_faces 用于對(duì)圖像進(jìn)行特征分析,提取頭像坐標(biāo),
                    在實(shí)際使用中,如果對(duì)精度有要求,可以通過(guò) `confidence` 來(lái)對(duì)提取的人臉進(jìn)行過(guò)濾,
                 Args:
                 extract_faces方法接受以下參數(shù):
                    - img_path:要從中提取人臉的圖像路徑、numpy數(shù)組(BGR)或base64編碼的圖像。
                    - target_size:人臉圖像的最終形狀。將添加黑色像素以調(diào)整圖像大小。
                    - detector_backend:人臉檢測(cè)后端可以是 retinaface、mtcnn、opencv、ssd或dlib。
                    - enforce_detection:如果在提供的圖像中無(wú)法檢測(cè)到人臉,則該函數(shù)會(huì)引發(fā)異常。如果不想得到異常并仍要運(yùn)行該函數(shù),則將其設(shè)置為False。
                    - align:根據(jù)眼睛位置對(duì)齊。
                    - grayscale:以RGB或灰度提取人臉。

                 Returns:
                   返回一個(gè)包含人臉圖像、人臉區(qū)域和置信度的字典列表。其中,
                   - face 鍵對(duì)應(yīng)的值是提取的人臉圖像
                   - facial_area 鍵對(duì)應(yīng)的值是人臉在原始圖像中的位置和大小
                   - confidence 鍵對(duì)應(yīng)的值是人臉檢測(cè)的置信度

    """
    rst = DeepFace.extract_faces(
            img_path=image,
            target_size=(224, 224),
            detector_backend="mtcnn",
            enforce_detection=True,
            align=True,
            grayscale=False)
analyze 方法

    """
    @Time    :   2023/05/31 01:44:27
    @Author  :   liruilonger@gmail.com
    @Version :   1.0
    @Desc    :   analyze 方法是 DeepFace 庫(kù)中的一個(gè)函數(shù),用于分析人臉屬性,包括年齡、性別、情緒和種族。
                 在后臺(tái),分析函數(shù)構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)模型,以對(duì)輸入圖像中的人臉進(jìn)行年齡、性別、情緒和種族分類。
                 Args:
                   - img_path:圖像路徑、numpy 數(shù)組(BGR)或 base64 編碼的圖像。如果源圖像中有多個(gè)人臉,則結(jié)果將是出現(xiàn)在圖像中的人臉數(shù)量大小的列表。
                   - actions: 參數(shù)是一個(gè)元組,其中默認(rèn)值為 ('age', 'gender', 'emotion', 'race'),您可以刪除其中的一些屬性。
                   - enforce_detection :參數(shù)默認(rèn)為 True,如果未檢測(cè)到人臉,則函數(shù)會(huì)拋出異常。如果您不想得到異常,則可以將其設(shè)置為 False。這對(duì)于低分辨率圖像可能很方便。
                   - detector_backend: 參數(shù)指定要使用的人臉檢測(cè)器的后端,例如 OpenCV、RetinaFace、MTCNN 等。
                   - align: 參數(shù)是一個(gè)布爾值,表示是否根據(jù)眼睛位置進(jìn)行對(duì)齊。
                   - silent :參數(shù)是一個(gè)布爾值,表示是否禁用(某些)日志消息。
                 Returns:
                    - "region":表示人臉在圖像中的位置和大小。
                    - "age":表示人臉的年齡。
                    - "dominant_gender":表示人臉的主要性別。
                    - "gender":表示人臉的性別及其置信度。
                    - "dominant_emotion":表示人臉的主要情緒。
                    - "emotion":表示人臉的情緒及其置信度。
                    - "dominant_race":表示人臉的主要種族。
                    - "race":表示人臉的種族及其置信度。
    """
    dfs = DeepFace.analyze("database\yz_W.jpg",detector_backend="retinaface")

不同識(shí)別模型測(cè)試的簡(jiǎn)單統(tǒng)計(jì):

識(shí)別流程:

通過(guò) 檢測(cè)模型 retinaface 模型獲取所有的人臉: 選擇原因:小尺寸人臉的檢測(cè)效果更佳,對(duì)人臉進(jìn)行切片
過(guò)濾置信度大于 0.99 的人臉,這里的置信度即為人臉可信度,由 retinaface 給出,同時(shí)對(duì)切片大小過(guò)濾,太小的直接舍棄
通過(guò) opencv 和 Dlib 獲取特征點(diǎn)和頭部姿態(tài),這里實(shí)際上又進(jìn)行了一次檢測(cè),使用 Dlib 庫(kù) 檢測(cè),過(guò)濾頭部姿態(tài)歐拉角小于 15 度的數(shù)據(jù)
過(guò)濾出的數(shù)據(jù)通過(guò) DeepFace.find 方法進(jìn)行人臉庫(kù)比對(duì),這里對(duì)人臉又進(jìn)行了一次檢測(cè),使用檢測(cè)模型 mtcnn,使用識(shí)別模型為下面的變量
相同人臉庫(kù)數(shù)據(jù),相同識(shí)別數(shù)據(jù)集,不同識(shí)別模型統(tǒng)計(jì):

模型名稱          識(shí)別結(jié)果數(shù)        識(shí)別陌生人        識(shí)別總?cè)藬?shù)        識(shí)別錯(cuò)誤        識(shí)別成功        識(shí)別成功率
VGG-Face   
Facenet                  430                267                   163                   118                 45                  27%
Facenet512            432                311                   121                   57                   64                  52%
OpenFace              434                3                       431                   3                     0                     0%
DeepFace              430                267                   163                   125                 38                   23%
Dlib                       428                173                   255                   174                 81                   31%
ArcFace                 430                255                   175                   62                   113                 65%
SFace                    432                346                    86                     7                     79                  91%
測(cè)試發(fā)現(xiàn),當(dāng)前的數(shù)據(jù)集,SFace 相對(duì)來(lái)說(shuō)要好一點(diǎn),但是整體上還是達(dá)不到期望。主要是圖片質(zhì)量問(wèn)題,當(dāng)前檢測(cè)識(shí)別屬于小目標(biāo)檢測(cè)識(shí)別,如果是打卡或者門禁其他的大目標(biāo)正臉識(shí)別,是OK的。





作者: 山河已無(wú)恙


歡迎關(guān)注微信公眾號(hào) :山河已無(wú)恙