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

<< "Camera open failed!" << endl;return -1;}cout << "Camera open success." << endl;// 新建与百度云通信的客户端// 设置APPID/AK/SK,在刚刚创建的百度云人脸识别应用中复制下来即可std::string app_id = "39837794";std::string api_key = "feHHZyllLWoo0pidqVraCaol";std::string secret_key = "zLAaFUqs2IZ8GHtqVsGFlvby4pWI8wP6";aip::Face client(app_id, api_key, secret_key);/显示视频-开始/Mat img_color; // 定义彩色图像(注意因为用到了mat,所以编译时加上-lopencv_core)Mat img_gray;// 定义灰度图Mat img_eql;// 定义直方图均衡化后的灰度图// 加载人脸的模型文件(-lopencv_objdetect)CascadeClassifier Classifier("/usr/share/opencv4/haarcascades/haarcascade_frontalface_alt2.xml");vector face_all;// 存储所有脸的方框列表Mat img_face_shot;// 存储人脸截图vector img_face_jpg; // 存储.jpg格式的人脸截图string img_face_base64;// 存储BASE64格式的人脸截图Json::Value result;// 存储百度云返回的所有信息std::string res_name;// 存储百度云返回信息中的人名信息std::string time_display;// 存储提取好的时间信息for(;;) {cap >> img_color;// 1.获取一帧彩色图像cvtColor(img_color, img_gray, cv::COLOR_BGR2GRAY);// 2.将彩图转换成灰度图(-lopencv_imgproc)equalizeHist(img_gray, img_eql);// 3.直方图均衡化(-lopencv_imgproc)Classifier.detectMultiScale(img_eql, face_all);// 4.人脸检测if( face_all.size() ) {// 5.框出所有的人脸for(int i=0; i 80 ) { // 人脸匹配程度应该大于80%res_name = result["result"]["user_list"][0]["user_id"].asString();// 获取人名time_display = GetTime();// 获取时间cout << res_name << " ";// 输出人名到日志cout << time_display;// 输出时间到日志,注意time_display最后自带\n// 添加名字到屏幕putText(img_color,res_name,//要添加的内容Point(face_all[0].x, face_all[0].y-50), // 添加的位置FONT_HERSHEY_SIMPLEX, // 字体0.8,// 字号Scalar(255,255,255),// 颜色2);// 粗细// 添加时间到屏幕putText(img_color,time_display,//要添加的内容Point(face_all[0].x, face_all[0].y-20), // 添加的位置FONT_HERSHEY_SIMPLEX, // 字体0.8,// 字号Scalar(255,255,255) , // 颜色2);// 粗细}}}imshow("video", img_color); // 在“video”窗口中显示图片(编译时加上-lopencv_highgui)waitKey(50);// 等待50ms(20fps)}/显示视频-结束/return 0;}
下面是我在开发过程中的终端实际操作:
lyl@ubuntu:~/桌面/aip-cpp-sdk-4.16.5$ vim main.cpp lyl@ubuntu:~/桌面/aip-cpp-sdk-4.16.5$ g++ main.cpp -o main -std=c++11 -lopencv_videoio -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_objdetect -lopencv_imgcodecs -lcurl -lcrypto -ljsoncpplyl@ubuntu:~/桌面/aip-cpp-sdk-4.16.5$ ./main >> log.txt^C
【【Ubuntu】基于C++实现人脸识别】图1 优化后的效果