opencv3人臉識別問題解決
阿新 • • 發佈:2018-12-13
問題描述
最近實現人臉識別,由於採用的是opencv3,而opencv3的人臉識別庫等contrib模組已經不再內建了。
解決方法1
解決方法2
整個contrib模組是很大的,而我只想使用其中的人臉識別模組,即face,我又對cmake不太熟悉,所以我用了一個直接匯入標頭檔案和原始檔的方式。
下面我用vs2015+mfc+opencv3.4.3來為大家演示
步驟如下:
- 解壓找到\-master\modules\face 然後include裡面的就是opencv,開啟後就是face和face.hpp標頭檔案,src裡面是原始檔
- 將檔案放置到工程目錄下 ,然後在專案中右鍵新增現有項,將相關檔案新增至專案即可,效果如圖
- 這時候執行的話會出現一系列問題,主要是檔案中的包含關係的問題,例如:
在eigen_faces.cpp中
#include <opencv2/face.hpp>
這是會出錯的,因為在我們的opencv3的庫中沒有這個標頭檔案,然而改成相對路徑就行了
#include "../face.hpp"
最後把所有提示錯誤的檔案錯誤的包含關係改了就行了。
其他問題
如果用了MFC的問題的話,可能會報 fatal error C1010: 在查詢預編譯頭時遇到意外的檔案結尾 這樣的問題
解決方法是提示哪個檔案有問題就右鍵該檔案,點選屬性,預編譯頭選擇不使用預編譯頭
注意:新的人臉模組使用方式有些許變化
例如模型的訓練
//構建與訓練
Ptr<FaceRecognizer> modelFisher1 = FisherFaceRecognizer::create();
modelFisher1->train(images, labels);
modelFisher1->save("PCA_Model.xml");
//載入
modelPCA = EigenFaceRecognizer::create();
modelPCA->read("PCA_Model.xml");
還有需要提醒的是images訓練圖片的畫素大小必須相同,且都是pgm格式,不然可能會發生錯誤