人脸识别用的是OpenCV自带的级联分类器,在opencv\data文件夹里可以找到这些已经训练好的xml文件。我将分别使用CUDA加速和不使用CUDA,比较一下速度上到底有多大提升。
WITH CUDA:
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
VideoCapture cap(0);
if (!cap.isOpened()) {
cerr << "Can not open video source";
return -1;
}
std::vector<cv::Rect> h_found;
cv::Ptr<cv::cuda::CascadeClassifier> cascade = cv::cuda::CascadeClassifier::create("haarcascade_frontalface_alt2.xml");
cv::cuda::GpuMat d_frame, d_gray, d_found;
while (1)
{
Mat frame;
if (!cap.read(frame)) {
cerr << "Can not read frame from webcam";
return -1;
}
d_frame.upload(frame);
cv::cuda::cvtColor(d_frame, d_gray, cv::COLOR_BGR2GRAY);
int64 start = cv::getTickCount();
cascade->detectMultiScale(d_gray, d_found);
cascade->convert(d_found, h_found);
double fps = cv::getTickFreque