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

lyl@ubuntu:~/桌面/aip-cpp-sdk-4.16.5$ vim main.cpp ################################## 将上面的新代码拷贝到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 -ljsoncppIn file included from base/base.h:20,from face.h:19,from main.cpp:3:base/http.h:23:10: fatal error: json/json.h: 没有那个文件或目录23 | #include |^~~~~~~~~~~~~compilation terminated.# 将base/http.h第23行的#include 换成#include 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 -ljsoncppIn file included from face.h:19,from main.cpp:3:base/base.h:21:10: fatal error: json/json.h: 没有那个文件或目录21 | #include "json/json.h"|^~~~~~~~~~~~~compilation terminated.# 将base/base.h第21行的#include 换成#include 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$ ./mainCamera open success.^C
现在就可以直接使用百度中的代码了 。
5.3 百度智能云平台接入
本节主要是 新建客户端 用于和百度云交互 。下面的代码主要参考了上述百度云C++ SDK官方文档的示例代码 。
天坑奥:人脸搜索函数第四个参数应该是aip::,而不是代码示例中给的aip::null,否则在编译时会报错 。
//终端编译指令/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 face_all; // 存储所有脸的方框列表Mat img_face_shot;// 存储人脸截图vector img_face_jpg; // 存储.jpg格式的人脸截图string img_face_base64;// 存储BASE64格式的人脸截图Json::Value result; // 存储百度云返回的信息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