项目框架
考虑到成本因素,我们可以采用自己的笔记本电脑即可完成项目。
整个项目大致分为:图像采集、人脸截图、将人脸截图上传到百度智能云平台进行比对,返回对比结果 。
初识OpenCV
-
OpenCV 是一个开源的计算机视觉和机器学习软件库,其使用一系列C 语言函数和少量C++类实现,内部实现了很多图像处理和计算机视觉的通用算法;OpenCV可以运行在Linux 系统上,且其轻量、高效所以在嵌入式领域得到广泛的应用;
-
在线安装
sudo apt-get install libopencv-dev
- 在线文档
https://opencv.org/
根据帮助文档来编写程序,其中涉及的知识比较多,通过文章写出来有点不太现实,所以下面仅给出完整的程序代码,感兴趣的可以自己实践论证:
#include<iostream>
#include"opencv2/opencv.hpp"
#include"face.h"
using namespace cv;
using namespace std;
using namespace aip;
int main(){
VideoCapture cap(0);
if(!cap.isOpened()){
cout<<"Camera open failed"<<endl;
return 0;
}
cout<<"Camera open success"<<endl;
CascadeClassifier Classifier("/usr/share/opencv/haarcascades/haarcascade_frontalface_alt2.xml");
// 设置APPID/AK/SK
std::string app_id = "24742766";
std::string api_key = "9lLn4zkodUWDttPcYKSk6D77";
std::string secret_key = "YOgOQfBqsVE81dsyBb55NCnjGYlIkrry";
aip::Face client(app_id, api_key, secret_key);
Mat ColorImage;
Mat GrayImage;
vector<Rect> AllFace;
Mat MatFace;
vector<uchar> JpgFace;
string Base64Face;
Json::Value result;
time_t sec;
for(;;){
cap>>ColorImage;
cvtColor(ColorImage,GrayImage,CV_BGR2GRAY);
equalizeHist(GrayImage,GrayImage);
Classifier.detectMultiScale(GrayImage,AllFace);
if( AllFace.size()){
rectangle(GrayImage,AllFace[0],Scalar(255,255,255));
MatFace=GrayImage(AllFace[0]);
imencode(".jpg",MatFace,JpgFace);
Base64Face=base64_encode((char *)JpgFace.data(),JpgFace.size());
result = client.search(Base64Face,"BASE64","Myself",aip::null);
if(!result["result"].isNull())
{
if( result["result"]["user_list"][0]["score"].asInt()>80)
{
cout<<result["result"]["user_list"][0]["user_id"]<<endl;
sec=time(NULL);
cout<<ctime(&sec)<<endl;
putText(GrayImage,result["result"]["user_list"][0]["user_id"].asString(),Point(0,50),FONT_HERSHEY_SIMPLEX,1,Scalar(255,100,100));
putText(GrayImage,ctime(&sec),Point(0,100),FONT_HERSHEY_SIMPLEX,1,Scalar(255,100,100));
}
}
}
imshow("23practice",GrayImage);
waitKey(40);
}
return 0;
}
程序编译、执行指令分别如下:
g++ cv.cpp -o cv -lopencv_highgui -lopencv_core -lopencv_imgproc -lopencv_objdetect -std=c++11 -lcurl -lcrypto -ljsoncpp
./cv
下面是程序运行结果截图:
如想获取完整程序及相关文件包,请关注公号:编程有料 ,后台回复 “人脸考勤 ”
后面会带你体验完整的百度智能云平台的接入过程。