当前位置:网站首页>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 :

边栏推荐
- MySQL Foundation
- cocospods 的使用
- I've been interviewed. The starting salary is 16K
- 基于Pyqt5工具栏按钮可实现界面切换-2
- (stinger) use pystinger Socks4 to go online and not go out of the network host
- How difficult is it to be high? AI rolls into the mathematics circle, and the accuracy rate of advanced mathematics examination is 81%!
- How much do you know about synchronized?
- JSON数据传递参数
- CDN 加速,需要域名先备案
- 35页危化品安全管理平台解决方案2022版
猜你喜欢

JDBC tutorial

C MVC creates a view to get rid of the influence of layout

Eight honors and eight disgraces of the programmer version~

How does win11 turn on visual control? Win11 method of turning on visual control

MarkDown基本语法

Why does RTOS system use MPU?

Bean load control

How much do you know about synchronized?

RuntimeError: no valid convolution algorithms available in CuDNN
![[analysis of STL source code] imitation function (to be supplemented)](/img/40/a02a04a24f385a31e0484d1071ecec.jpg)
[analysis of STL source code] imitation function (to be supplemented)
随机推荐
理想汽车×OceanBase:当造车新势力遇上数据库新势力
容器运行时分析
Yolox enhanced feature extraction network panet analysis
Master the development of facial expression recognition based on deep learning (based on paddlepaddle)
【Proteus仿真】51单片机+LCD12864推箱子游戏
Compose 中的 'ViewPager' 详解 | 开发者说·DTalk
php 获取真实ip
Writing of head and bottom components of non routing components
How to set automatic reply for mailbox and enterprise mailbox?
Three solutions to frequent sticking and no response of explorer in win11 system
JDBC practice cases
数据集-故障诊断:西储大学轴承的各项数据以及数据说明
基于Pyqt5工具栏按钮可实现界面切换-1
[array] binary search
附加:token;(没写完,别看…)
Arduino - character judgment function
Golang common settings - modify background
Third party payment function test point [Hangzhou multi tester _ Wang Sir] [Hangzhou multi tester]
RuntimeError: no valid convolution algorithms available in CuDNN
Go project operation method