OpenCV+百度云人脸识别项目及源码
1、需要的硬件环境
2、整体项目的框架 用Opencv识别人脸,上传百度云进行识别对比 3、虚拟机上需要装的库
- sudo apt-get install libopencv-dev,验证是否安装完成dpkg -s libopencv-dev
- Opencv官方文挡:https://opencv.org/
百度云SDK中需要的依赖库也装在虚拟机上:(百度云的SDK去官网下载即可,版本:aip-cpp-sdk-0.8.1) - sudo apt-get install libcurl4-openssl-dev,验证安装是否成功dpkg -s libcurl4-openssl-dev
- sudo apt-get install openssl,验证安装是否成功dpkg -s openssl
- sudo apt-get install libjsoncpp-dev,验证是否安装成功 dpkg -s libjsoncpp-dev 版本>1.7.2
- sudo apt-get install libssl-dev,验证是否安装成功 dpkg -s libssl-dev
4、百度云中的环境搭建
- https://cloud.baidu.com/product/face/search 百度智能云 人脸识别(人脸搜索)
- 立即使用 https://login.bce.baidu.com/?account=&redirect=http%3A%2F%2Fconsole.bce.baidu.com%2Fai%2F#/ai/face/overview/index
- 注册一个账号 或者扫码登录 登陆成功 我同意
- 创建应用—名称自己起名字----接口选择(默认人脸)—应用归属(个人)–应用描述(随便写就行)
- 点击查看人脸库—新建组(名字自己起)–点击自己的名字–新建用户-用户id(名字-拼音)–添加图片(清晰的)
- 上传完之后确认—添加其他的人脸一样操作—完成
5、开始敲代码 注:代码文件要放在百度云SDK文件下
#include <iostream>
#include "opencv2/opencv.hpp"
#include "face.h"
using namespace std;
using namespace cv;
using namespace aip;
int main()
{
VideoCapture cap(0);
if(!cap.isOpened())
{
cout << "Camera open failed" << endl;
return -1;
}
cout << "Camera open success" << endl;
CascadeClassifier Classifier("/usr/share/opencv/haarcascades/haarcascade_frontalface_alt2.xml")
aip::Face client("24694935", "cwyOatQmgGGTCeXUd5x7Khv5", "ROkT0Z7UE0PBSCMM3co2hyAMctrORNAe");
Mat paizhao;
Mat cuntu;
vector<Rect> AllFace;
Mat MatFace;
vector<uchar> jpgFace;
string Base64Face;
Json::Value result;
time_t sec;
for(;;)
{
cap >> paizhao;
cvtColor(paizhao, cuntu, CV_BGR2GRAY);
equalizeHist(cuntu,cuntu);
Classifier.detectMultiScale(cuntu,AllFace);
if(AllFace.size())
{
rectangle(cuntu,AllFace[0], Scalar(255,255,255));
MatFace = cuntu(AllFace[0]);
imencode(".jpg",MatFace,jpgFace);
Base64Face = base64_encode((char *)jpgFace.data(),jpgFace.size());
result = client.search(Base64Face, "BASE64", "ha", aip::null);
#if 1
cout << result << endl;
#else
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(cuntu, result["result"]["user_list"][0]["user_id"].asString(), Point(0,50), FONT_HERSHEY_SIMPLEX,1, Scalar(255,255,255));
putText(cuntu, ctime(&sec), Point(0,100), FONT_HERSHEY_SIMPLEX,1, Scalar(255,255,255));
}
}
#endif
}
imshow("video",cuntu);
waitKey(40);
}
return 0;
}
6、一切就绪,准备编译
g++ main.cpp -o main -lopencv_highgui -lopencv_core -lopencv_imgproc -lopencv_objdetect -std=c++11 -lcurl -lcrypto -ljsoncpp
7、运行
./main >> log.txt
8、可能会遇到的一些问题及对应解决办法
- 摄像头打不开:cd /dev/ 查看有没有摄像头 没有的话进行以下操作
(1)虚拟机–设置—usb控制器—兼容性改成3.0或者3.1 (2) 虚拟机–可移动设备—Micro— 重新找/dev/下有没有video,或者右下角建一个小的摄像头 - OpenCV有训练好的思维逻辑,无需我们自己训练,
cd /usr/share/opencv/haarcascades/ 里面有训练好的东西, haarcascade_frontalface_alt2.xml 这个是训练人脸的
|