日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

OpenCV3.3人脸识别模块的API的变化

發(fā)布時間:2024/3/26 pytorch 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV3.3人脸识别模块的API的变化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

OpenCV3.3人臉識別模塊的API的變化

1. 前言

開始用最新版的OpenCV進行人臉識別的小伙伴也許已經(jīng)發(fā)現(xiàn)了,人臉識別的最新API變化了。這也正是人臉識別等contrib模塊沒有放到主倉庫的原因:不穩(wěn)定,仍在開發(fā)中。當然這次的變化也預示著一些好的事情,畢竟自從OpenCV2.4時期人臉識別模塊加入到OpenCV之后就幾乎沒怎么變過,這次變化說明又有人開始為OpenCV的人臉識別模塊貢獻代碼了。而且還不僅于此,感興趣的小伙伴可以去github看看OpenCV最新的人臉識別模塊的代碼,已經(jīng)加入了人臉關(guān)鍵點檢測、人臉對齊的內(nèi)容,簡直是非常讓人期待!

其他的都是以后的事情,我們今天先看看人臉識別模塊的變化,我們從facerec.hpp來看。

2. opencv3.3之前的facerec.hpp

(提示:代碼可以左右滑動查看)

#ifndef __OPENCV_FACEREC_HPP__ #define __OPENCV_FACEREC_HPP__#include "opencv2/face.hpp" #include "opencv2/core.hpp"namespace cv { namespace face {// base for two classes class CV_EXPORTS_W BasicFaceRecognizer : public FaceRecognizer { public:/** @see setNumComponents */CV_WRAP virtual int getNumComponents() const = 0;// ----------- 此處省略代碼若干行 -----------// ----------- 此處省略代碼若干行 ------------// ----------- 此處省略代碼若干行 -----------CV_WRAP virtual cv::Mat getEigenValues() const = 0;CV_WRAP virtual cv::Mat getEigenVectors() const = 0;CV_WRAP virtual cv::Mat getMean() const = 0; };CV_EXPORTS_W Ptr<BasicFaceRecognizer> createEigenFaceRecognizer(int num_components = 0, double threshold = DBL_MAX);CV_EXPORTS_W Ptr<BasicFaceRecognizer> createFisherFaceRecognizer(int num_components = 0, double threshold = DBL_MAX);class CV_EXPORTS_W LBPHFaceRecognizer : public FaceRecognizer { public:/** @see setGridX */CV_WRAP virtual int getGridX() const = 0;/** @copybrief getGridX @see getGridX */CV_WRAP virtual void setGridX(int val) = 0;// ----------- 此處省略代碼若干行 -----------// ----------- 此處省略代碼若干行 ------------// ----------- 此處省略代碼若干行 -----------CV_WRAP virtual cv::Mat getLabels() const = 0; };CV_EXPORTS_W Ptr<LBPHFaceRecognizer> createLBPHFaceRecognizer(int radius=1, int neighbors=8, int grid_x=8, int grid_y=8, double threshold = DBL_MAX);}} //namespace cv::face#endif //__OPENCV_FACEREC_HPP__

這個文件里要注意的有:

  • 第九行的那句注釋:// base for two classes。說明BasicFaceRecognizer是兩個類的基類:EigenFaceRecognizer和FisherFaceRecognizer。跟LBPHFaceRecognizer是沒啥關(guān)系的。即使到了新的API中仍然是這樣。

  • 第23、25、40行。創(chuàng)建三種人臉識別器的方法。大致如下,注意第三個和前兩個的區(qū)別。

    (提示:代碼可以左右滑動查看)

    Ptr<BasicFaceRecognizer> model = createEigenFaceRecognizer(); Ptr<BasicFaceRecognizer> model = createFisherFaceRecognizer(); Ptr<LBPHFaceRecognizer> model = createLBPHFaceRecognizer();

3. opencv3.3的facerec.hpp

(提示:代碼可以左右滑動查看)

#ifndef __OPENCV_FACEREC_HPP__ #define __OPENCV_FACEREC_HPP__#include "opencv2/face.hpp" #include "opencv2/core.hpp"namespace cv { namespace face {// base for two classes class CV_EXPORTS_W BasicFaceRecognizer : public FaceRecognizer { public:/** @see setNumComponents */CV_WRAP int getNumComponents() const;// ----------- 此處省略代碼若干行 -----------// ----------- 此處省略代碼若干行 ------------// ----------- 此處省略代碼若干行 -----------CV_WRAP cv::Mat getEigenValues() const;CV_WRAP cv::Mat getEigenVectors() const;CV_WRAP cv::Mat getMean() const;virtual void read(const FileNode& fn);virtual void write(FileStorage& fs) const;virtual bool empty() const;using FaceRecognizer::read;using FaceRecognizer::write;protected:int _num_components;double _threshold;std::vector<Mat> _projections;Mat _labels;Mat _eigenvectors;Mat _eigenvalues;Mat _mean; };class CV_EXPORTS_W EigenFaceRecognizer : public BasicFaceRecognizer { public:CV_WRAP static Ptr<EigenFaceRecognizer> create(int num_components = 0, double threshold = DBL_MAX); };class CV_EXPORTS_W FisherFaceRecognizer : public BasicFaceRecognizer { public:CV_WRAP static Ptr<FisherFaceRecognizer> create(int num_components = 0, double threshold = DBL_MAX); };class CV_EXPORTS_W LBPHFaceRecognizer : public FaceRecognizer { public:/** @see setGridX */CV_WRAP virtual int getGridX() const = 0;// ----------- 此處省略代碼若干行 -----------// ----------- 此處省略代碼若干行 ------------// ----------- 此處省略代碼若干行 -----------CV_WRAP virtual cv::Mat getLabels() const = 0;CV_WRAP static Ptr<LBPHFaceRecognizer> create(int radius=1, int neighbors=8, int grid_x=8, int grid_y=8, double threshold = DBL_MAX); };}} //namespace cv::face#endif //__OPENCV_FACEREC_HPP__

我們對比同一個文件的不同時期的內(nèi)容就可以看出一些變化了。首先需要注意的還是第九行的注釋。前面說的同樣適用。而且第二個文件的代碼看起來更加清晰:EigenFaceRecognizer和FisherFaceRecognizer都是繼承自BasicFaceRecognizer。然而LBPHFaceRecognizer跟BasicFaceRecognizer一樣,都是繼承自FaceRecognizer。

第二個是創(chuàng)建各人臉識別器的代碼都同一變成了類的成員函數(shù):create()。所以我們創(chuàng)建人臉識別檢測器的時候就要用下面這樣的代碼了。

(提示:代碼可以左右滑動查看)

Ptr<EigenFaceRecognizer> model = EigenFaceRecognizer::create(); Ptr<FisherFaceRecognizer> model = FisherFaceRecognizer::create(); Ptr<LBPHFaceRecognizer> model = LBPHFaceRecognizer::create();

4. 以后的人臉識別模塊

目前人臉識別模塊頭文件夾下只有以下三個文件:

bif.hpp facerec.hpp predict_collector.hpp

而現(xiàn)在最新的contrib倉庫里,人臉識別的頭文件夾下,已經(jīng)是下面這樣:

一起期待吧。


知識星球

除了平時發(fā)文章之外,也會發(fā)一些平時學習過程中其他的參考資料和代碼,歡迎加入。

總結(jié)

以上是生活随笔為你收集整理的OpenCV3.3人脸识别模块的API的变化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。