1. 程式人生 > >opencv3人臉識別問題解決

opencv3人臉識別問題解決

問題描述

最近實現人臉識別,由於採用的是opencv3,而opencv3的人臉識別庫等contrib模組已經不再內建了。

解決方法1

解決方法2

整個contrib模組是很大的,而我只想使用其中的人臉識別模組,即face,我又對cmake不太熟悉,所以我用了一個直接匯入標頭檔案和原始檔的方式。

下面我用vs2015+mfc+opencv3.4.3來為大家演示

步驟如下:

  1. 解壓找到\-master\modules\face   然後include裡面的就是opencv,開啟後就是face和face.hpp標頭檔案,src裡面是原始檔
  2. 將檔案放置到工程目錄下 ,然後在專案中右鍵新增現有項,將相關檔案新增至專案即可,效果如圖                                          
  3. 這時候執行的話會出現一系列問題,主要是檔案中的包含關係的問題,例如:

 在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格式,不然可能會發生錯誤