OpenCV之識別自己的臉——C++源碼放送
前言
在將近一年之前,我在CSDN專欄《OpenCV實踐之路》中連續發了三篇博客,完整地描述了基於OpenCV進行人臉識別的全過程。三篇都將近一萬的閱讀量和大量的評論的表明,人臉識別果然是大家在學習OpenCV過程中最感興趣的課題,之一。當然,也有可能是本科生畢設老師最感興趣的課題之一。。。
由於當時寫的時候是按照前後流程來的,所以源碼比較分散。加之我想當然地認爲,很多源碼是之前博客中已經放出來的,可以一句帶過。這導致了很多同學學習的時候很不方面。但是我由於重裝系統,導致當初的源碼遺失,也一直沒有抽出時間去重新整理一下。這個清明節,沒有出門,根據之前的博客基於當下最新的OpenCV3.2重新整理了一遍源碼。現在放出來,以饗讀者。
小小的區別
當然了,重新整理也不是簡單的把源碼收集到一起,如果真的那麼簡單,也就不用去整理了,大家自行收集即可。因爲OpenCV3.2人臉識別的內容也是有些小變動。所以現在的代碼跟原來的三篇博客仍然是統一的,但是有一些細節不同。
1. 自動拍照
之前採集自己的圖像的時候,程序設定是運行之後按’p’鍵拍照並保存圖像,然後需要自己手動的去把圖像大小轉化爲跟ORL人臉數據庫中的圖片大小一樣。
現在一切自動,只需要運行即可拍照,變化尺寸,並保存。默認設定拍10張照片,與ORL人臉數據庫一致。
2. Python腳本生成at.txt
當時寫博客的時候還不會用Python,所以生成的at.txt並不是s1文件夾對應的label就是1,s2就對應2。而是比較混亂的。誰是誰需要自己去記憶。
經過修改後的Python腳本可以是文件夾可label完美對應起來了
3. 訓練代碼
訓練人臉識別模型的代碼部分有些改動,主要是因爲OpenCV的變動。
頭文件和命名空間需要各加一句:
#include<opencv2\face.hpp>
using namespace cv::face;
創建模型部分的改變,原來的代碼是
Ptr<FaceRecognizer> model = createEigenFaceRecognizer();
Ptr<FaceRecognizer> model1 = createFisherFaceRecognizer();
Ptr<FaceRecognizer> model2 = createLBPHFaceRecognizer();
現在改爲:
Ptr<BasicFaceRecognizer> model = createEigenFaceRecognizer();
Ptr<BasicFaceRecognizer> model1 = createFisherFaceRecognizer();
Ptr<LBPHFaceRecognizer> model2 = createLBPHFaceRecognizer();
其餘部分沒有太大變化。
下載辦法
源碼已經分別上傳到Github、百度網盤。其中github由於大小限制,不含我訓練好的模型。
Github:`https://github.com/LiuXiaolong19920720/recognise-your-own-face
百度網盤:網盤: https://pan.baidu.com/s/1htt7KES
密碼: trtb
最近申請了微信公衆號,分享機器視覺和機器學習的內容,感興趣的同學可以掃碼關注。