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

<< result << endl;}imshow("video", img_eql); // 在“video”窗口中显示图片(编译时加上-lopencv_highgui)waitKey(50);// 等待50ms(20fps)}/显示视频-结束/return 0;}
下面是我在开发过程中的终端实际操作:
lyl@ubuntu:~/桌面/aip-cpp-sdk-4.16.5$ vim main.cpp ############################################ 更新代码但是face_search_v3的第四个参数为aip:null###########################################lyl@ubuntu:~/桌面/aip-cpp-sdk-4.16.5$ g++ main.cpp -o main -lopencv_videoio -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_objdetect -lopencv_imgcodecs -lcurl -lcrypto -ljsoncpp -std=c++11main.cpp: In function ‘int main()’:main.cpp:59:87: error: cannot convert ‘const std::map, std::__cxx11::basic_string >’ to ‘const Json::Value&’59 | nt.face_search_v3(img_face_base64, "BASE64", "my_test", aip::null);|~~~~~^~~~|||const std::map, std::__cxx11::basic_string >In file included from main.cpp:3:face.h:635:33: note:initializing argument 4 of ‘Json::Value aip::Face::face_search_v3(const string&, const string&, const string&, const Json::Value&)’635 |const Json::Value & options)|~~~~~~~~~~~~~~~~~~~~^~~~~~~lyl@ubuntu:~/桌面/aip-cpp-sdk-4.16.5$ vim main.cpp ############################################ 更新代码,face_search_v3的第四个参数为aip:json_null###########################################lyl@ubuntu:~/桌面/aip-cpp-sdk-4.16.5$ g++ main.cpp -o main -lopencv_videoio -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_objdetect -lopencv_imgcodecs -lcurl -lcrypto -ljsoncpp -std=c++11lyl@ubuntu:~/桌面/aip-cpp-sdk-4.16.5$ ./mainCamera open success.{"cached" : 0,"error_code" : 0,"error_msg" : "SUCCESS","log_id" : 2434230510,"result" : {"face_token" : "e494f1b0ed493b6d680f9de1bda39b9a","user_list" : [{"group_id" : "my_test","score" : 90.982292175292997,"user_id" : "humu","user_info" : ""}]},"timestamp" : 1695462034}{"cached" : 0,"error_code" : 222202,"error_msg" : "pic not has face","log_id" : 2983155634,"result" : null,"timestamp" : 1695462583}# 很多其他的返回就不显示了^C
第六章 解析人脸识别数据
上一小节最后可以看到百度云返回的信息,本章则来拆解这个数据包,从中提取出“相似度score”和“姓名” 。但需要说明的是,由于可能会误判人脸,所以可能上传给没有意义的截图给百度云,百度云接收到截图后也会先进行一下人脸检测,发现没有人脸时会返回“pic not has face” 。所以本节要做的内容:
Json数据解析 。百度云返回“pic not has face”或者相似度小于80%时,不打印信息 。Linux系统时间获取 。考勤信息记录 。直接使用输出重定向>>指令,将终端输出内容写入到文件中./main >> log.txt 。将“姓名-时间”信息添加到图像上 。用到“方法” 。
注:解析数据包时用到的是库中的方法 。
于是便有下面的代码:
//终端编译指令/g++ main.cpp -o main -std=c++11 -lopencv_videoio -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_objdetect -lopencv_imgcodecs -lcurl -lcrypto -ljsoncpp//cpp源代码/#include #include "opencv2/opencv.hpp"#include "face.h"using namespace std;using namespace cv;using namespace aip;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;// 新建与百度云通信的客户端// 设置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