赞
踩
目录
OpenCV是一个开源的计算机视觉和机器学习软件库,它可以广泛的在Windos、Linux、Mac等多种操作系统下自由使用,是一种高拓展性、轻量级的库。OpenCV基于C语言和少量C++类函数,并且提供了Matlab、Python等丰富的接口。
自从1999年1月第一个OpenCV的beta版本发布开始,它就被广泛应用于许多领域,例如卫星地图和电子地图的拼接,扫描图像、医学影像分析、安全和入侵系统分析等多个方面,同时在质量检测系统、摄像头标定、无人驾驶方面,也大量的使用了OpenCV库。
OpenCV提供的视觉处理算法非常丰富,由于它部分以高效的C语言编写,加上其开源的特性,处理得当,不需要添加新的外部支持也可以完整地编译链接生成执行程序,所以很多研究者用它来做算法的移植。
OpenCV可用于解决如下领域的问题:
- 人机交互
- 物体识别
- 图像分区
- 人脸识别
- 动作识别
- 运动跟踪
- 机器人
- 无人驾驶
1、 系统信息
2、发布版本信息
//这里使用在线安装的方式安装(确保系统可以正常访问internet)
sudo apt-get install libopencv-dev
查看安装状态:dpkg -s libopencv-dev
这里对应自己安装的版本,就去下载那个版本的压缩包,解压之后有个index.html的文件打开查看手册
1、将摄像头添加到ubuntu系统中,在/dev目录下查看
2、程序测试
#include <iostream> #include <opencv2/opencv.hpp> using namespace cv; using namespace std; int main() { VideoCapture cap(0); // 默认方式打开摄像头0 if (!cap.isOpened()) { cout << "ERROR! Camera open failed!\n"; return -1; } cout << "Camera open success!" << endl; return 0; }
3、使用摄像头拍照(这里使用USB摄像头)
Mat ColorImage; cap >> ColorImage; // 拍照 imshow("vodeo", ColorImage); // 显示照片 waitKey(3000);
1、图像处理
灰度处理:提高识别准确度与处理速度 Mat GrayImage; // 用与存放处理后的照片 cvtColor(ColorImage, GrayImage, COLOR_BGR2GRAY);![]()
均衡化处理:提高对比度 Mat ContrastImage; equalizeHist(GrayImage, ContrastImage);![]()
2、人脸检测
// 实例化级联分类器,添加模型(通过训练具有一定能力的模型): CascadeClassifier Classifier("/usr/share/opencv4/haarcascades/haarcascade_frontalface_alt2.xml"); // 检测人脸,并使用矩形框起来 vector<Rect> AllFace; // 用来存放圈人脸的框 Classifier.detectMultiScale(ContrastImage, AllFace); // 使用矩形将人脸圈起来 rectangle(GrayImage, AllFace[0], Scalar(255,0,0)); // 在图片上显示矩形![]()
3、人脸截取(用来做对比)
Mat MatFace; vector<uchar> jpgFace; MatFace = GrayImage(AllFace[0]); imencode(".jpg", MatFace, jpgFace); // 将图像转化成jpg格式
1、人脸库的创建与管理
这里使用百度云的人脸搜索功能,点击立即使用,创建应用
先新建组,在组中添加人脸信息(这里自己添加)
2、人脸识别SDK环境搭建
①、这里使用官方提供的技术手册进行搭建
②、SDK下载解压并上传到ubuntu系统
③、安装依赖库,添加第三方链接库
安装curl库:sudo apt install libcurl4-openssl-dev
安装openssl库:sudo apt install openssl
安装jsoncpp库:sudo apt install libjsoncpp-dev
安装ssl库:sudo apt install libssl-dev
查看安装状态:dpkg -s xxxxxxx(库)
④、在源码中添加下面两行,对应手册中第五条
#include "face.h"
using namespace aip;
⑤、链接库进行编译
将自己写的代码mv到SDK库中
编译: g++ main.cpp -I /usr/include/opencv4 -lopencv_core -lopencv_highgui -lopencv_videoio -lopencv_imgproc -lopencv_objdetect -lopencv_imgcodecs -std=c++11 -lcurl -lcrypto -ljsoncpp这里编译时出现错误:No such file or directory
修改对应文件中引入头文件的路径:jsoncpp/json/json.h
3、云平台接入----新建client:这里参考手册中的示例代码
根据手册将下面代码添加到自己写的代码中
先将我们截取的jpg格式的图片转化成base64格式,用于数据对比 string base64Face; // 存放base64数据格式图片 Json::Value result; //用于存放识别结果 base64Face = base64_encode((char *)jpgFace.data(), jpgFace.size()); result = client.search(base64Face, "BASE64", "shibie", aip::null); cout << result << endl;
1、对result中数据进行处理:
if(!result["result"].isNull()) //判断result结果是否为空 { if(result["result"]["user_list"][0]["score"].asInt() > 80) // 判断相似度 { cout << result["result"]["user_list"][0]["user_id"] << endl; // 打印id } }2、获取系统时间
time_t sec; sec = time(NULL); cout << ctime(&sec) <<endl;3、将id与时间写在图片上
putText(ColorImage, result["result"]["user_list"][0]["user_id"].asString(),Point(0,50),FONT_HERSHEY_SIMPLEX, 1, Scalar(255,0,0)); putText(ColorImage, ctime(&sec), Point(0,100), FONT_HERSHEY_SIMPLEX, 1, Scalar(255,0,0));4、将识别信息存储到文件中
5、查看日志信息
到这里考勤机功能基本实现,可以在打卡日志中查看记录。
针对百度云平台接入系统后比较卡顿,这里可以考虑用多线程的方式对数据进行处理。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。