OpenCV學習筆記(五十四)——概述FaceRecognizer人臉識別類contrib

在最新版的2.4.2中,文檔的更新也是一大亮點,refrence manual擴充了200多頁的內容,添加了contrib部分的文檔。contrib就是指OpenCV中新添加的模塊,但又不是很穩定,可以認為是一個雛形的部分。這次結合refman的閱讀,介紹一下FaceRecognizer這個人臉識別類,這個類也是2.4.2更新日志里著重強調過的更新,配套的文檔也是相當充實。這個類的基類也是Algorithm類,對于Algorithm類的簡單介紹,請參看我之前的blogOpenCV學習筆記(五十)——Algorithm類介紹(core),這個類內的接口函數也是異常簡單,人臉識別的任務也就是兩大部分,訓練和預測,分別對應著train函數和predict函數,還有對應的數據加載保存函數save和load。不過它當然還可以調用其基類Algorithm的函數。特別說明的是,人臉識別中預測的參數也是可以調節的,但這里只給出了train和predict函數,為啥沒有setparameter的函數呢,那是因為各中人臉識別方法的參數并不相同,要通過Algorithm的get和set函數實時的調整~~v5啊!

先來說說訓練的過程,train函數的兩個參數也很簡單,訓練的圖像組vector<Mat>和對應的標簽組vector<int>,這個label標簽只需保證同一個人的標簽相同即可,不需要保證圖像的按標簽順序輸入,方便極了。對于預測,有兩種調用,其中的參數有測試圖像、返回的標簽值和測試樣本和標簽樣本的相似性返回的標簽值為-1,說明測試樣本在訓練集中無對應或距離較遠。這里用個FisherFace作為示例說明一下如何訓練和預測:

[cpp] view plaincopy
  1. vector<Mat>?images;??
  2. vector<int>?labels;??
  3. //?images?for?first?person??
  4. images.push_back(imread("person0/0.jpg",?CV_LOAD_IMAGE_GRAYSCALE));??
  5. labels.push_back(0);??
  6. images.push_back(imread("person0/1.jpg",?CV_LOAD_IMAGE_GRAYSCALE));??
  7. labels.push_back(0);??
  8. //?images?for?second?person??
  9. images.push_back(imread("person1/0.jpg",?CV_LOAD_IMAGE_GRAYSCALE));??
  10. labels.push_back(1);??
  11. images.push_back(imread("person1/1.jpg",?CV_LOAD_IMAGE_GRAYSCALE));??
  12. labels.push_back(1);??
  13. ??
  14. Ptr<FaceRecognizer>?model?=?createFisherFaceRecognizer();??
  15. model->train(images,?labels);??
  16. ??
  17. Mat?img?=?imread("person1/2.jpg",?CV_LOAD_IMAGE_GRAYSCALE);??
  18. int?predicted?=?model->predict(img);??

當然我們也不需要每次使用都進行一次訓練,可以把訓練好的模型通過save函數保存成一個文件,下次使用的時候只需load即可

目前支持的3種人臉識別的方案:特征臉EigenFace、Fisher臉FisherFace、LBP直方圖LBPHFace。分別調用函數createEigenFaceRecognizer、createFisherFaceRecognizer、createLBPHFaceRecognizer建立模型

對于EigenFace兩個輸入參數,分別為PCA主成分的維數num_components和預測時的閾值threshold,主成分這里沒有一個選取的準則,要根據輸入數據的大小而決定,通常認為80維主成分是足夠的。除了這兩個輸入參數外,還有eigenvalues和eigenvectors分別代表特征值和特征向量,mean參數為訓練樣本的平均值,projections為訓練數據的預測值,labels為預測時的閾值。

對于FisherFace,和EigenFace非常相似,也有num_componentsthreshold兩個參數和其他5個參數,FisherFace的降維是LDA得到的。默認值為c-1,如果設置的初始值不在(0,c-1]的范圍內,會自動設定為c-1。

特別需要強調的是,EigenFace和FisherFace的訓練圖像和測試圖像都必須是灰度圖,而且是經過歸一化裁剪過的

對于LBPHFace,我想不用過多介紹,LBP簡單和效果是大家都很喜歡的,參數包括半徑radius,鄰域大小即采樣點個數neighbors,x和y方向的單元格數目grid_x,grid_y,還有兩個參數histograms為訓練數據得到的直方圖,labels為直方圖對應的標簽。這個方法也要求訓練和測試的圖像是灰度圖

接下來應該結合文檔進一步研究一下這個人臉識別類。我之前大量的人臉實驗都是在matlab下進行的,有了這個利器,我感覺會有越來越多的學生做老師和老板布置的project會選擇用OpenCV,而不是Matlab。希望我們都愛的OpenCV越來越好,越來越強大。歡迎交流

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255500.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255500.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255500.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【調試】Linux下超強內存檢測工具Valgrind

【調試】Linux下超強內存檢測工具Valgrind 內容簡介 Valgrind是什么&#xff1f;Valgrind的使用Valgrind詳細教程1. Valgrind是什么&#xff1f; Valgrind是一套Linux下&#xff0c;開放源代碼&#xff08;GPLV2&#xff09;的仿真調試工具的集合。Valgrind由內核&#xff08;c…

【python學習】——讀取csv文件

file_name rD:\ParttimeJobs\MinistConfiguration\datas\mnist_train.csv # 數據集為42000張帶標簽的28x28手寫數字圖像y []x []y_t []x_t []with open(file_name, r) as f:reader csv.reader(f)header_row next(reader)# print(header_row)for row in reader:if np.ra…

機器學習實戰(python)-Ch02KNN-Notes

Chapter2 KNN 1.numpy.tile函數 格式&#xff1a;tile&#xff08;A,reps&#xff09; * A&#xff1a;array_like * 輸入的array * reps&#xff1a;array_like * A沿各個維度重復的次數 舉例&#xff1a;A[1,2] 1. tile(A,2) 結果&#xff1a;[1,2,1,2] 2. tile(A,(2,3)) 結果…

猜1-10的數字python腳本

#!/usr/bin/python#coding:utf-8import randomnumrandom.randint(1,10)while True:caiint(raw_input(請輸入隨機數字:))if cai num:print 猜對了exit()elif cai > num:print 猜大了else:print 猜小了非交互式的cp腳本#!/usr/bin/python#coding:utf-8import sysfile1sys.arg…

慣量匹配和最佳傳動比

慣量是剛體繞軸轉動慣性的度量&#xff0c;轉動慣量是表征剛體轉動慣性大小的物理量。它是伺服選型的重要標準&#xff0c;如果慣量匹配不好&#xff0c;會導致電機運行不穩定。如小慣量電機制動性能好&#xff0c;運行反應速度快&#xff0c;適用于輕負載、高速定位的環境;而中…

【pyqt5學習】——滑動條的使用slider

1、獲取滑動條當前值: 滑動條名稱.value() self.threshold1 self.horizontalSlider.value() self.threahold2 self.horizontalSlider_2.value() 2、滑動條值改變信號綁定槽函數 滑動條名稱.valueChanged.connect(槽函數&#xff09; # 滑條值變化 self.horizontalSlider.valu…

hibernate多對一單向外鍵

hibernate多對一單向外鍵&#xff1a; 描述&#xff1a; 轉載于:https://www.cnblogs.com/blogofwyl/p/5402197.html

Spring在bean配置文件中定義電子郵件模板

在上一篇Spring電子郵件教程&#xff0c;硬編碼的所有電子郵件屬性和消息的方法體中的內容&#xff0c;這是不實際的&#xff0c;應予以避免。應該考慮在Spring bean 配置文件中定義電子郵件模板。1.Spring的郵件發件人Java類使用 Spring的MailSender接口發送電子郵件&#xff…

斐波那契數列規律的計算。

斐波那契數列就是某一個數&#xff0c;總是前兩個數之和&#xff0c;比如0&#xff0c;1&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;5&#xff0c;8。由于輸出是一串數字&#xff0c;可以用列表的結構存儲。開始時&#xff0c;列表中有兩個值&#xff0c;即0&#xf…

【PyQt5學習】——顏色面板使用(QcolorDialog)

from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * BB = QDialogButtonBox# 顏色窗口 class ColorDialog(QColorDialog):def __init__(self, parent=None):super(ColorDialog, self).__init__(parent)self.setOption(QColorDialog.ShowAlph…

PropertyPlaceholderConfigurer實現配置文件讀取

PropertyPlaceholderConfigurer實現配置文件讀取 PropertyPlaceholderConfigurer類的主要的用法是將BeanFactory里定義的內容放在一個.properties的文件中. PropertyPlaceholderConfigurer是個bean工廠后置處理器的實現&#xff0c;也就是BeanFactoryPostProcessor接口的一個實…

算法練習5---快速排序Java版

基本思想&#xff1a;通過一趟排序將要排序的數據分割成獨立的兩部分&#xff0c;其中一部分的所有數據都比另外一部分的所有數據都要小&#xff0c;然后再按此方法對這兩部分數據分別進行快速排序&#xff0c;整個排序過程可以遞歸進行&#xff0c;以此達到整個數據變成有序序…

OPENCV回調函數

OPENCV回調函數 回調函數 回調函數就是一個通過函數指針調用的函數。如果你把函數的指針&#xff08;地址&#xff09;作為參數傳遞給另一個函數&#xff0c;當這個指針被用來調用其所指向的函數時&#xff0c;我們就說這是回調函數。回調函數不是由該函數的實現方法直接調用…

PostCSS自學筆記(二)【番外篇二】

圖解PostCSS的插件執行順序 文章其實是一系列的早就寫完了. 才發現忘了發在SegmentFault上面, 最早發布于https://gitee.com/janking/Inf... 這次我繼續研究PostCSS的插件的執行順序。 之前有研究過做過假設&#xff0c;在插件列表中&#xff0c;PostCSS的插件執行順序自上而下…

【Python學習】——實現文本的朗讀(pyttsx3)

import pyttsx3engine = pyttsx3.init() engine.say(三角形)engine.runAndWait() 1、導入第三方庫 import pyttsx32、創建朗讀器 engine = pyttsx3.init() 3、輸入需要朗讀的文本 engine.say(三角形) 4、開始朗讀并且發聲(這一步不能少,不然沒有聲音) engine.runAndWait() 參…

linux命令詳解——iostat

簡介 iostat主要用于監控系統設備的IO負載情況&#xff0c;iostat首次運行時顯示自系統啟動開始的各項統計信息&#xff0c;之后運行iostat將顯示自上次運行該命令以后的統計信息。用戶可以通過指定統計的次數和時間來獲得所需的統計信息。 安裝 yum install -y sysstat 語法 i…

highgui基礎 OpenCV trackbar

在調試程序或者程序執行時需要調整某個變量的值亦或是參數的值&#xff0c;我們需要一個簡單方便的操作&#xff0c;滾動條就是一個非常使用的工具。通過鼠標點擊對滾動條進行拖動操作以期實現調整某個參數的值。下面例程參見Opencv 安裝目錄 samples tutorial_code文件夾。 #i…

匯編 if else

知識點&#xff1a; ?if else ?逆向還原代碼一、了解if else結構 sub esp,8 00401029 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 0040102C |. 3B45 F8 CMP EAX,DWORD PTR SS:[EBP-8] 0040102F |. 7E 10 JLE SHORT ifelse01.00401041 //表示 else部…

chrome瀏覽器開發模式實現跨域

2019獨角獸企業重金招聘Python工程師標準>>> 增加如下參數&#xff0c; --disable-web-security --user-data-dir 啟動項變為&#xff1a; "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security --user-data-dir 轉載于…

【糾錯】——QThread: Destroyed while thread is still running

目錄 錯誤 出現場景 解決方案 原始代碼 修改后的代碼 錯誤 QThread: Destroyed while thread is still running 出現場景 在對目標缺陷檢測的GUI設計的時候&#xff0c;為了避免界面的卡頓&#xff0c;于是想著利用線程QThread來解決這個問題&#xff0c;但是做好后&#xf…