seetaface 使用总结
seetaface,是中科院計算機所山世光老師所帶領的團隊開發(fā)出來的人臉識別庫,開源免費可用,據說識別率可達97.1%,實測下來,識別率確實是蠻高的,比opencv自帶的人臉識別功能強多了。
在此,感謝開源的分享精神,可以讓我們這些軟件開發(fā)工程師們站在巨人的肩膀上,做一些解決實際問題的項目。同時,避免了大量重復造輪子的工作。
本文主要記錄了花費5天的時間,基于seetaface,開發(fā)一個小型的人臉識別登錄系統。并提供代碼下載。
seetaface分為FaceDetection(人臉檢測)、FaceAlignment(人臉對齊)、FaceIdentification(人臉識別)三個模塊,三個模塊相互獨立,綜合利用起來即可實現最終的人臉識別功能。
1、FaceDetection
const char* img_path = "2.jpg";seeta::FaceDetection detector("seeta_fd_frontal_v1.0.bin");//seeta_fd_frontal_v1.0.bin 文件是作者已經訓練好并提供的//設置人臉檢測的參數detector.SetMinFaceSize(40);detector.SetScoreThresh(2.f);detector.SetImagePyramidScaleFactor(0.8f);detector.SetWindowStep(4, 4);cv::Mat img = cv::imread(img_path, cv::IMREAD_UNCHANGED);cv::Mat img_gray;if (img.channels() != 1)cv::cvtColor(img, img_gray, cv::COLOR_BGR2GRAY);elseimg_gray = img;seeta::ImageData img_data;img_data.data = img_gray.data;//注意這里必須是單通道的圖像img_data.width = img_gray.cols;img_data.height = img_gray.rows;img_data.num_channels = 1;long t0 = cv::getTickCount();std::vector<seeta::FaceInfo> faces = detector.Detect(img_data);//人臉檢測的主要函數long t1 = cv::getTickCount();double secs = (t1 - t0)/cv::getTickFrequency();cout << "Detections takes " << secs << " seconds " << endl; #ifdef USE_OPENMPcout << "OpenMP is used." << endl; #elsecout << "OpenMP is not used. " << endl; #endif#ifdef USE_SSEcout << "SSE is used." << endl; #elsecout << "SSE is not used." << endl; #endifcout << "Image size (wxh): " << img_data.width << "x" << img_data.height << endl;cv::Rect face_rect;int32_t num_face = static_cast<int32_t>(faces.size());for (int32_t i = 0; i < num_face; i++) //提取找到的人臉區(qū)域{face_rect.x = faces[i].bbox.x;face_rect.y = faces[i].bbox.y;face_rect.width = faces[i].bbox.width;face_rect.height = faces[i].bbox.height;cv::rectangle(img, face_rect, CV_RGB(0, 0, 255), 4, 8, 0);}cv::namedWindow("Test", cv::WINDOW_AUTOSIZE);cv::imshow("Test", img);cv::waitKey(0);cv::destroyAllWindows();運行效果如下圖所示:
2、FaceAlignment
運行效果如下圖所示
3、FaceIdentification
其主要為計算兩張圖片中人臉的相似度。輸入為兩張圖片,經過前面人臉檢測,人臉對齊,得到人臉的特征,輸出為人臉相似度。
作者提供的人臉相似度試驗,同一張照片,其相似度可為1。
博主以自己不同環(huán)境下拍攝的照片做實驗,可得到如下圖所示的結果??梢园l(fā)現,幾乎都在0.6分以上。
然后又對比了博主與另外一個人不同環(huán)境下的臉,結果如下圖所示,可以發(fā)現相似度都在0.5以下
那么,博主得到了這樣的結論:相似度在0.7分以下,為不同的人臉,0.7分以上為同一個人的臉,有了這個結論,就可以用seetaface來開發(fā)一個小型的人臉識別登錄系統了。
其他注意事項:
1、下載了別人的代碼和工程,特別想要直接可以跑起來,最頭疼的是各種報錯,請參考我的博文?包含目錄、庫目錄等注意事項
2、提供修改后的和部分注釋的seetaface下載,分為三部分?人臉檢測?人臉對齊?人臉識別
3、如果不想調試作者的源代碼,想要跟opencv一樣直接使用,僅需要lib dll include即可,點擊下載
最終,基于seetaface的人臉識別demo開發(fā)出來了,可以添加人臉,刪除人臉,識別人臉,點擊下載?。因為上傳文件大小的限制,把seeaface所需的三個bin文件放到了百度云盤,鏈接:http://pan.baidu.com/s/1qYGW84c 密碼:in6o 下載后,將其放到model文件夾中即可運行。
總結
以上是生活随笔為你收集整理的seetaface 使用总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人体检测报警装置c语言,一种人体感应报警
- 下一篇: 天空之城(十孔口琴谱)