资源简介

主要实现人脸疲劳检测,应用方面很广,比如货运司机的预警系统,火车预警系统等等

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include “Dlib.h“
#include “FatigueDetect.h“
#include “facedetect-dll.h“


using namespace dlib;
using namespace std;
using namespace cv;

void ImageTest();
void VideoTest();
void VideoTest2();
void VideoTest3();
int main()
{
VideoTest2();
//VideoTest3();
return 0;
}

void ImageTest()
{
long start end;
setUseOptimized(true);
char img_file[] = “E:\\WorkStation\\Project\\DlibTest\\x64\\Debug\\image_0026.png“;
char landmark_file[] = “E:\\WorkStation\\Source\\shape_predictor_68_face_landmarks.dat“;

Mat img = imread(img_file CV_BGR2GRAY);

frontal_face_detector detector = get_frontal_face_detector();
shape_predictor sp;
deserialize(landmark_file) >> sp;

array2d arrImg;
load_image(arrImg img_file);

start = clock();
std::vector dets = detector(arrImg);


for (unsigned long j = 0; j < dets.size(); ++j)
{
full_object_detection shape = sp(arrImg dets[j]);

for (unsigned long i = 0; i < shape.num_parts(); i++)
{
point pt = shape.part(i);
int x = pt.x();
int y = pt.y();

line(img Point(pt.x() pt.y()) Point(pt.x() pt.y()) Scalar(0 0 255) 2);
}
}
end = clock();
printf(“%ld\n“ end - start);//单位:毫秒
imshow(“img“ img);
waitKey();
}

void VideoTest()
{
char landmark_file[] = “shape_predictor_68_face_landmarks.dat“;
Ptr cascade = makePtr(“lbpcascade_frontalface_improved.xml“);
VideoCapture cap(0);
if (!cap.isOpened())
{
std::cout << “open failed“ << std::endl;
return;
}
Mat frame;
Mat merge;
Mat convermat;
std::vector faces;
frontal_face_detector detector = get_frontal_face_detector();
shape_predictor sp;
deserialize(landmark_file) >> sp;
clock_t start end;
while (true)
{
cap >> frame;
if (frame.empty())
{
std::cout<< “frame is empty“ << std:: endl;
break;
}
start = clock();
std::vector splitframe;
split(frame splitframe);
for (int i = 0; i < splitframe.size(); i++)
{
splitframe[i].convertTo(splitframe[i]splitframe[i].type()1.520);
equalizeHist(splitframe[i] splitframe[i]);
}
cv::merge(splitframe merge);
imshow(“equ“merge);

cv_image arrImg(merge);
std::vector dets = detector(arrImg);
for (unsigned long j = 0; j < dets.size(); ++j)
{
full_object_detection shape = sp(arrImg dets[j]);

for (unsigned long i = 0; i < shape.num_parts(); i++)
{
point pt = shape.part(i);
int x = pt.x();
int y = pt.y();

circle(frame Point(pt.x() pt.y()) 0.2 Scalar(0 0 255) 2);
}
}
end = clock();
c

评论

共有 条评论