【Ubuntu】基于C++实现人脸识别( 八 )


lyl@ubuntu:~$ ls /usr/share/opencv4/haarcascades/# 注OpenCV2.x版本的存储路径为:/usr/share/opencv/haarcascades/haarcascade_eye.xml# 检测眼睛haarcascade_eye_tree_eyeglasses.xml# 检测佩戴眼镜的眼睛haarcascade_lefteye_2splits.xml# 检测左眼haarcascade_righteye_2splits.xml# 检测右眼haarcascade_frontalface_default.xml# 检测正面的人脸-默认,准确度较差haarcascade_frontalface_alt.xml# 检测正面的人脸,准确度较差haarcascade_frontalface_alt2.xml# 检测正面的人脸,准确度提高haarcascade_frontalface_alt_tree.xml# 检测正面的人脸,准确度最高haarcascade_profileface.xml# 检测侧脸haarcascade_smile.xml# 检测微笑haarcascade_frontalcatface.xml# 检测正面视角的猫脸,速度快准确度相对低haarcascade_frontalcatface_extended.xml# 检测正面视角的猫脸,速度慢准确度相对高,对侧脸等不同角度也有一定检测能力haarcascade_fullbody.xml# 检测完整人体haarcascade_upperbody.xml# 检测上半身haarcascade_lowerbody.xml# 检测下半身haarcascade_russian_plate_number.xml# 检测俄罗斯车牌号码,速度快准确度相对低haarcascade_licence_plate_rus_16stages.xml# 检测俄罗斯车牌号码,速度慢准确度相对高
于是下面就使用这些特征库来进行人脸检测:
加载人脸模型文件 。用到了“.”中的“类” 。人脸检测 。用到了“.”中的“类”中的“::” 。框出人脸区域 。用到了“core. The Core ”中的“方法” 。注意要判断一下是否有人脸,如果有才框起来 。
//终端编译指令/g++ main.cpp -o main -lopencv_videoio -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_objdetect//cpp源代码/#include #include "opencv2/opencv.hpp"using namespace std;using namespace cv;int main() {// 打开摄像头//VideoCapture cap(0);VideoCapture cap(0, cv::CAP_V4L2);// 打开(默认的)摄像头0(编译时加上-lopencv_videoio)if(!cap.isOpened()) {// 检查摄像头是否成功打开cout << "Camera open failed!" << endl;return -1;}cout << "Camera open success." << endl;/显示视频-开始/Mat img_color; // 定义彩色图像(注意因为用到了mat,所以编译时加上-lopencv_core)Mat img_gray;// 定义灰度图Mat img_eql;// 定义直方图均衡化后的灰度图vector face_all;// 存储所有脸的方框列表// 加载人脸的模型文件(-lopencv_objdetect)CascadeClassifier Classifier("/usr/share/opencv4/haarcascades/haarcascade_frontalface_alt2.xml");for(;;) {cap >> img_color;// 获取一帧彩色图像cvtColor(img_color, img_gray, cv::COLOR_BGR2GRAY);// 将彩图转换成灰度图(-lopencv_imgproc)equalizeHist(img_gray, img_eql);// 直方图均衡化(-lopencv_imgproc)Classifier.detectMultiScale(img_eql, face_all);// 人脸检测for(int i=0; i
图4-3 人脸检测效果
下面是我在开发过程中的终端实际操作:
lyl@ubuntu:~/桌面$ vim main.cpplyl@ubuntu:~/桌面$ g++ main.cpp -o main -lopencv_videoio -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_objdetectlyl@ubuntu:~/桌面$ ./mainCamera open success.^C

【Ubuntu】基于C++实现人脸识别

文章插图
注意.()方法相对复杂,当电脑配置不高时,视频就会很卡,此时优化方法为:
硬件优化:给电脑的硬件都升级一下 。软件优化:多线程/进程并发 。但是本课程不涉及 。4.3 编程-图像人脸检测(下)