当前位置:网站首页>Realization of mask recognition based on OpenCV
Realization of mask recognition based on OpenCV
2022-07-02 23:45:00 【I'm not Xiao Haiwa~~~~】
Then the first step to do , Is to train the classifier we need , I choose OpenCV in ml Modular SVM Classifier to train mask recognition classifier . The code for the training section is as follows :
string positive_path = "D:\\opencv_c++\\opencv_tutorial\\data\\test\\positive\\";
string negative_path = "D:\\opencv_c++\\opencv_tutorial\\data\\test\\negative\\";
vector<string> positive_images_str, negative_images_str;
glob(positive_path, positive_images_str);
glob(negative_path, negative_images_str);
vector<Mat>positive_images, negative_images;
for (int i = 0; i < positive_images_str.size(); i++)
{
Mat positive_image = imread(positive_images_str[i]);
positive_images.push_back(positive_image);
}
for (int j = 0; j < negative_images_str.size(); j++)
{
Mat negative_image = imread(negative_images_str[j]);
negative_images.push_back(negative_image);
}
string savePath = "face_mask_detection.xml";
trainSVM(positive_images, negative_images, savePath);
First read all training images , Contains positive samples ( Wear a mask ) Images and negative samples ( Don't wear a mask ) Images , Then pack the positive and negative sample sets into vector type , Pass in the training function trainSVM() in , This function is defined in the header file “face_mask.h” in .
In the process of training , We are not training by fully unfolding the image , But through feature extraction , Get the image of each sample HOG features , Recalculate each HOG Feature descriptor of feature , Train through feature descriptors SVM classifier .
It should be noted that , We are not doing a complete sample image HOG Feature extraction and description , Instead, the face region of the sample image is extracted first , The extracted face region image is then HOG Feature extraction and description and training .
meanwhile , You also need to label the positive and negative sample sets , Positive samples are marked as 1, Negative samples are marked as -1.
The code is as follows :
for (int i = 0; i < positive_num; i++)
{
Mat positive_face;
Rect positive_faceBox;
if (faceDetected(positive_images[i], positive_face, positive_faceBox))
{
resize(positive_face, positive_face, Size(64, 128));
Mat gray;
cvtColor(positive_face, gray, COLOR_BGR2GRAY);
vector<float> descriptor;
hog_train->compute(gray, descriptor);
train_descriptors.push_back(descriptor);
labels.push_back(1);
}
}
for (int j = 0; j < negative_num; j++)
{
Mat negative_face;
Rect negative_faceBox;
if (faceDetected(negative_images[j], negative_face, negative_faceBox))
{
resize(negative_face, negative_face, Size(64, 128));
Mat gray;
cvtColor(negative_face, gray, COLOR_BGR2GRAY);
vector<float> descriptor;
hog_train->compute(gray, descriptor);
train_descriptors.push_back(descriptor);
labels.push_back(-1);
}
}
int width = train_descriptors[0].size();
int height = train_descriptors.size();
Mat train_data = Mat::zeros(Size(width, height), CV_32F);
for (int r = 0; r < height; r++)
{
for (int c = 0; c < width; c++)
{
train_data.at<float>(r, c) = train_descriptors[r][c];
}
}
auto train_svm = ml::SVM::create();
train_svm->trainAuto(train_data, ml::ROW_SAMPLE, labels);
train_svm->save(path);
hog_train->~HOGDescriptor();
train_svm->clear();
The function for face extraction faceDetected() Definition in header file “face.h” in . Here we use opencv_face_detector_uint8.pb Face detection model .
So at this point , It realizes the detection of whether to wear a mask SVM Training of classifiers , The model files obtained from training are as follows :
Next , We are going to load this xml File and detect the input image . among , The function used for detection is FaceMaskDetect(), This function is defined in “face_mask.h” Header file .
auto detecModel = ml::SVM::load("face_mask_detection.xml");
Mat test_image = imread("D:/BaiduNetdiskDownload/ Face mask detection data set /val/test_00004577.jpg");
FaceMaskDetect(test_image, detecModel);
imshow("test_image", test_image);
Come here , We achieved from training , To the process of running detection , Let's see how the operation works :
First look at the image without mask , If it is detected that the mask is not worn , Then the face is framed in red , And marked red “ Not Face Mask ” word :
边栏推荐
- leetcode 650. 2 keys keyboard with only two keys (medium)
- ArrayList分析2 :Itr、ListIterator以及SubList中的坑
- Solution: exceptiole 'xxxxx QRTZ_ Locks' doesn't exist and MySQL's my CNF file append lower_ case_ table_ Error message after names startup
- Leetcode DP three step problem
- 简述中台的常识
- Dishes launcher small green program and directory management (efficiency tool)
- [ml] Li Hongyi III: gradient descent & Classification (Gaussian distribution)
- 跨境电商如何通过打好数据底座,实现低成本稳步增长
- Hisilicon VI access video process
- JSON数据传递参数
猜你喜欢
JSON数据传递参数
高数有多难?AI 卷到数学圈,高数考试正确率 81%!
[ml] Li Hongyi III: gradient descent & Classification (Gaussian distribution)
Maybe you read a fake Tianlong eight
程序分析与优化 - 9 附录 XLA的缓冲区指派
Remote connection of raspberry pie by VNC viewer
采用VNC Viewer方式远程连接树莓派
【STL源码剖析】仿函数(待补充)
CDN 加速,需要域名先备案
Highly available cluster (HAC)
随机推荐
VIM interval deletion note
Boost库链接错误解决方案
MySQL Foundation
面试过了,起薪16k
[array] binary search
Fudian bank completes the digital upgrade | oceanbase database helps to layout the distributed architecture of the middle office
MySQL基础
How much do you know about synchronized?
Simple square wave generating circuit [51 single chip microcomputer and 8253a]
Why does RTOS system use MPU?
The use of 8255 interface chip and ADC0809
Interface switching based on pyqt5 toolbar button -1
Mapper agent development
【直播预约】数据库OBCP认证全面升级公开课
Interface switching based on pyqt5 toolbar button -2
Mapper代理开发
Compose 中的 'ViewPager' 详解 | 开发者说·DTalk
Third party payment function test point [Hangzhou multi tester _ Wang Sir] [Hangzhou multi tester]
Agnosticism and practice makes perfect
开发知识点