opencv疲劳驾驶检测 c++代码
时间: 2023-07-24 13:10:20 浏览: 209
以下是使用OpenCV库实现疲劳驾驶检测的C++代码:
```c++
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
VideoCapture cap(0); //打开默认摄像头
if (!cap.isOpened()) //检查摄像头是否成功打开
{
cout << "Failed to open camera!" << endl;
return -1;
}
//设置视频帧大小
cap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
CascadeClassifier face_cascade; //人脸检测器
face_cascade.load("haarcascade_frontalface_alt.xml"); //加载训练好的分类器
Mat frame;
int count = 0; //计数器
while (cap.read(frame)) //循环读取每一帧
{
Mat gray;
cvtColor(frame, gray, COLOR_BGR2GRAY); //将每一帧转换为灰度图像
vector<Rect> faces;
face_cascade.detectMultiScale(gray, faces, 1.3, 5); //检测人脸
if (faces.size() == 0) //如果没有检测到人脸
{
count++; //计数器加1
if (count > 20) //如果连续超过20帧没有检测到人脸,则认为驾驶员疲劳
{
cout << "Driver is tired!" << endl;
break;
}
}
else //如果检测到人脸
{
count = 0; //计数器归零
}
for (size_t i = 0; i < faces.size(); i++) //在人脸位置画矩形框
{
rectangle(frame, faces[i], Scalar(0, 0, 255), 2);
}
imshow("Drowsiness Detection", frame); //显示检测结果
if (waitKey(1) == 27) //按ESC键退出
{
break;
}
}
cap.release(); //释放摄像头
destroyAllWindows(); //关闭所有窗口
return 0;
}
```
这段代码通过检测摄像头拍摄到的人脸是否存在来判断驾驶员是否疲劳。如果连续20帧都没有检测到人脸,则认为驾驶员疲劳。使用了OpenCV的CascadeClassifier类来进行人脸检测,通过加载训练好的分类器文件进行检测。