当前位置:网站首页>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 :
边栏推荐
- SharedPreferences save list < bean > to local and solve com google. gson. internal. Linkedtreemap cannot be cast to exception
- Print out mode of go
- Optimization of streaming media technology
- Container runtime analysis
- 判断二叉树是否为满二叉树
- 附加:token;(没写完,别看…)
- Highly available cluster (HAC)
- 67页新型智慧城市整体规划建设方案(附下载)
- Data set - fault diagnosis: various data and data description of bearings of Western Reserve University
- YOLOX加强特征提取网络Panet分析
猜你喜欢
基于Pyqt5工具栏按钮可实现界面切换-2
JSON data transfer parameters
How to apply for company email when registering in company email format?
How difficult is it to be high? AI rolls into the mathematics circle, and the accuracy rate of advanced mathematics examination is 81%!
跨境电商如何通过打好数据底座,实现低成本稳步增长
Mapper代理开发
67页新型智慧城市整体规划建设方案(附下载)
Hisilicon VI access video process
Wechat applet basic learning (wxss)
Maybe you read a fake Tianlong eight
随机推荐
Highly available cluster (HAC)
[array] binary search
2022年最新最全软件测试面试题大全
Codeforces Round #771 (Div. 2)---A-D
【OJ】两个数组的交集(set、哈希映射 ...)
Fusion de la conversion et de la normalisation des lots
How much do you know about synchronized?
Getting started with golang: for Range an alternative method of modifying the values of elements in slices
Bean加载控制
Ideal car × Oceanbase: when the new forces of car building meet the new forces of database
MySQL基础
Markdown basic grammar
理想汽车×OceanBase:当造车新势力遇上数据库新势力
接口自动化覆盖率统计——Jacoco使用
Optimization of streaming media technology
Which common ports should the server open
Hisilicon VI access video process
【STL源码剖析】仿函数(待补充)
PHP get real IP
[OJ] intersection of two arrays (set, hash mapping...)