OpenCV4.5.4人臉識別詳解與代碼演示
重磅干貨,第一時間送達
人臉識別原理與模型
基于深度學習的人臉識別基本上分為兩步完成,第一步是人臉檢測與對齊;第二步是人臉特征提取與比對;在第一步中人臉檢測與landmark檢測,實現(xiàn)人臉對齊,對齊又分為2D/3D對齊;第二步中提取人臉特征數(shù)據(jù),從128維到024維都有可能,獲取特征之后識別分為兩種模型,一種是1:1稱為驗證,另外一種1:N稱為鑒別。整個流程圖示如下:

OpenCV4.5.4發(fā)布中包含了一個新的人臉識別算法支持,算法來自北郵鄧偉洪教授團隊貢獻,SFace模型大小為37MB,屬于輕量級的人臉識別模型,輸出特征維度是128維。該模型采用一種新?lián)p失功能,如下所示:

SFace的損失函數(shù)通過在超球面流形上增加類內和類間約束以增大類間距離而減小類內距離,從而提升模型穩(wěn)定性與泛化性能,實現(xiàn)更高精度的人臉識別。模型下載之后可以查看輸入,圖示如下:

要求輸入的人臉大小為112x112,輸出是128維人臉特征向量。
人臉識別函數(shù)支持與演示
virtual void cv::FaceRecognizerSF::alignCrop ( // 對齊InputArray src_img,InputArray face_box,OutputArray aligned_img?)??const?virtual void cv::FaceRecognizerSF::feature ( // 提取128維度特征InputArray aligned_img,OutputArray face_feature)virtual double cv::FaceRecognizerSF::match ( // 特征比對,默認余弦相似InputArray _face_feature1,InputArray _face_feature2,int dis_type = FaceRecognizerSF::FR_COSINE) const
小編最終把人臉檢測跟識別都放到了一個類中,封裝成了一個人臉檢測與識別的通用類,支持人臉注冊、檢測、識別、FPS顯示功能。其中識別人臉比對的方法如下:
void?FaceAlgo::matchFace(cv::Mat?&frame,?std::vector>?&infoList,?bool?l2)?{
????double?cosine_similar_thresh?=?0.363;
????double?l2norm_similar_thresh?=?1.128;
????for(auto?face?:?infoList)?{
????????cv::Mat?aligned_face,?feature;
????????faceRecognizer->alignCrop(frame,?face->detResult,?aligned_face);
????????faceRecognizer->feature(aligned_face,?feature);
????????double?min_dist?=?100.0;
????????double?max_cosine?=?0.0;
????????std::string?matchedName?=?"Unknown";
????????for(auto?item?:?this->face_models)?{
????????????//std::cout<<"face_models.item?:"?<
????????????//std::cout<<"face_models.item?:"?<
????????????if(l2)?{
????????????????double?L2_score?=?faceRecognizer->match(feature,?item.second,?cv::FaceRecognizerSF::DisType::FR_NORM_L2);
????????????????if(L2_score?????????????????????min_dist?=?L2_score;
????????????????????matchedName?=?item.first;
????????????????}
????????????}?else?{
????????????????double?cos_score?=?faceRecognizer->match(feature,?item.second,?cv::FaceRecognizerSF::DisType::FR_COSINE);
????????????????if(cos_score?>?max_cosine)?{
????????????????????max_cosine?=?cos_score;
????????????????????matchedName?=?item.first;
????????????????}
????????????}
????????}
????????//std::cout<<"matchedName?:"?<
????????if(max_cosine?>?cosine_similar_thresh)?{
????????????face->name.clear();
????????????face->name.append(matchedName);
????????}
????????if(l2?&&?min_dist?????????????face->name.clear();
????????????face->name.append(matchedName);
????????}
????????//?std::cout<<"face.name?:"?<name?<
????????//?std::cout<<"max_cosine?:"?<
????????//?std::cout<<"min_dist?:"?<
????}
} 代碼演示部分是我基于QT5+OpenCV4.5.4完成的,主要功能包括人臉注冊、人臉比對、支持1:N與1:1兩種模型、支持顯示設置、支持圖象與視頻實時識別。從注冊到識別演示如下:

選擇視頻,開始識別(可以看到識別結果跟注冊的一致):

其實本人自己也注冊,測試了一波,運行圖示如下:

人臉檢測與識別模型請這里下載:https://gitee.com/opencv_ai/opencv_tutorial_data
交流群
歡迎加入公眾號讀者群一起和同行交流,目前有美顏、三維視覺、計算攝影、檢測、分割、識別、醫(yī)學影像、GAN、算法競賽等微信群
個人微信(如果沒有備注不拉群!) 請注明:地區(qū)+學校/企業(yè)+研究方向+昵稱
下載1:何愷明頂會分享
在「AI算法與圖像處理」公眾號后臺回復:何愷明,即可下載。總共有6份PDF,涉及 ResNet、Mask RCNN等經(jīng)典工作的總結分析
下載2:終身受益的編程指南:Google編程風格指南
在「AI算法與圖像處理」公眾號后臺回復:c++,即可下載。歷經(jīng)十年考驗,最權威的編程規(guī)范!
下載3 CVPR2021 在「AI算法與圖像處理」公眾號后臺回復:CVPR,即可下載1467篇CVPR?2020論文 和 CVPR 2021 最新論文

