人脸识别考勤机
1.项目背景
人脸识别系统的研究始于20世纪60年代,80年代后随着计算机技术和光学成像技术的发展得到提高,而真正进入初级的应用阶段则在90年后期,人脸识别系统成功的关键在于是否拥有尖端的核心算法,并使识别结果具有实用化的识别率和识别速度;“人脸识别系统”集成了人工智能、机器识别、机器学习、模型理论、专家系统、视频图像处理等多种专业技术,同时需结合中间值处理的理论与实现,是生物特征识别的最新应用,其核心技术的实现,展现了弱人工智能向强人工智能的转化。近些年人脸识别在物联网上的运用,充分展示了其拥有的广阔发展前景。
2.项目功能介绍
软件平台:VM (15) Vm(16)+Raspbian(LinuxOS一种)+计算机自带的摄像头
项目采用C/S模式进行客户端与服务器端通信
服务器 采集视频数据,并转发给客户端
客户端 接收server视频数据并显示
3.系统框图
face.cpp调用sql.cpp、time.cpp、云端人脸图像、云端语音库进行人脸识别,并将打卡数据保存在本地数据库中
4.功能描述
在百度智能云上创建人脸识别仓库,存入照片,并创建语音库
视频监控 调用摄像头,采集图像
窗口显示 显示摄像头采集的图像
人脸识别成功时显示姓名,日期
人脸检测、人脸识别、语音播报
检测显示的图像中的人脸,与云端库中的资料进行比对识别,
播报打卡人信息
5.接口设计
face.cpp
`void *tts(void*arg)` 调用云端语音库,打卡成功进行播报
`void *video(void *arg)`创建显示窗口,调用摄像头采集的图片
`void * search(void *arg)` 截取显示窗口中的人脸在云端库中进行比对
`int main(void)` 创建线程,调用各个函数
sql.cpp
void * save_sql(void* arg)
创建数据库,将打卡信息保存到数据库中
time.cpp
void * show_time(void * arg)
调用系统时间,在识别成功时在姓名旁显示时间
6.流程图
7.代码
face.cpp
#include <opencv2/opencv.hpp>
#include <iostream>
#include <vector>
#include "aipcpp/face.h"
#include <unistd.h>
using namespace Json;
using namespace std;
using namespace cv;
using namespace aip;
#include "aipcpp/speech.h"
using namespace std;
using namespace aip;
VideoCapture cam;
Mat image;
Rect facePng;
pthread_mutex_t lock;
string user;
char myDate[80] = {
'\0'};
void *tts(void*arg);
void *tts(void*arg){
string app_id="23327597";
string api_key="bU5QIlRD49lIXDrUxf79dIg2";
string secret_key="daz2QvdUtP9Qb0d3pbYSIBIiXy53rYvC";
Speech client(app_id,api_key,secret_key);
ofstream ofile;
string file_ret;
ofile.open("./test.mp3",std::ios::out|std::ios::binary);
string user_msg;
user_msg.clear();
user_msg.append(user);
user_msg.append("打卡成功");
Value result=client.text2audio(user_msg,aip::null,file_ret);
if(!file_ret.empty()){
ofile<<file_ret;
system("mplayer ./test.mp3");
}else{
cout<<result.toStyledString();
}
}
void *show_time(void *arg);
void *save_sql(void *arg)