Files
webcamservice/VideoProc.h
2024-12-15 16:18:16 +08:00

53 lines
1.3 KiB
C++

#pragma once
#include <opencv2/opencv.hpp>
#include <string>
#include <atomic>
#include <condition_variable>
#include <mutex>
#include "face_sdk.h"
class VideoProc
{
public:
static VideoProc* getInstance();
int openCam(int id);
int close();
int startCheckFace(std::string base64, int time_out);
void stopCheckFace();
void StartAutoTakePhoto(int timeOut);
void StopAutoTakePhoto();
int FaceCompare(std::string img1, std::string img2);
void TakePhoto();
void setFaceThreshold(float threshold);
private:
VideoProc();
~VideoProc();
VideoProc(VideoProc&) = delete;
VideoProc& operator=(const VideoProc&) = delete;
void onTimer();
void videoFrameThread();
void rectangleFace(cv::Mat& img, cv::Rect face_rect, cv::Scalar color);
int personCardCheck(cv::Mat& rgb_img);
std::string getFaceImg(cv::Mat& img, FaceInfo& face_info);
cv::Mat getFaceMat(cv::Mat& img, FaceInfo& face_info);
private:
std::atomic<bool> m_bRun;
std::atomic<bool> m_bTackPtoto;
std::atomic<float> m_threshold; //人脸比对阈值
std::atomic<int> m_compare_timer; //人脸验证计时,超时之后会自动停止继续比对
std::atomic<int> m_take_photo_timer; //拍照倒计时
float m_idc_feature[512];
std::string m_tackPhotoData;
std::string m_tmp_path; //缓存路径
cv::VideoCapture m_capture_rgb;
//cv::VideoCapture m_capture_ir;
std::mutex m_mt;
std::condition_variable m_cv;
};