123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- // 下列 ifdef 块是创建使从 DLL 导出更简单的
- // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 LIBFACECAPTURE_EXPORTS
- // 符号编译的。在使用此 DLL 的
- // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
- // LIBFACECAPTURE_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
- // 符号视为是被导出的。
- #ifndef LIBFACECAPTURE
- #define LIBFACECAPTURE
- #include <stdint.h>
- #include <stdio.h>
- #ifdef _WIN32
- #ifdef LIBFACECAPTURE_EXPORTS
- #define LIBFACECAPTURE_API __declspec(dllexport)
- #else
- #define LIBFACECAPTURE_API __declspec(dllimport)
- #endif
- # elif ( defined(__GNUC__) && __GNUC__ >= 4 )
- #define LIBFACECAPTURE_API __attribute__((visibility("default")))
- #else // _WIN32
- #define LIBFACECAPTURE_API
- #endif // _WIN32
- #ifndef MAX_PATH
- #define MAX_PATH 260
- #endif
- #ifndef INFINITE
- #define INFINITE 0xFFFFFFFF // Infinite timeout
- #endif // !INFINITE
- //配置参数
- struct CFaceCaptureConfig
- {
- int nPrimCamera; //双摄像头模式下,0:以环境相机为首选相机(单相机默认为0),1:以操作相机为首选相机
- int nServersType; //0:前端,1:后台
- int nContourMinAera; //运动跟踪最小面积
- int nUpCameraEdgeLimit; //
- int nDownCameraEdgeLimit; //
- char strFaceDataDirPath[MAX_PATH]; // 配置文件路径
- float fOperateFaceSize; //可操作距离时人脸系数,0.5M
- float fCloseFaceSize; //靠近距离时人脸系数,1.5M
- float fFarFaceSize; //远距离时人脸系数,2.5M
- float fSearchFaceSize; //远距离时搜索人脸的系数
- float fDetectFaceSize; //人脸检测时搜索人脸的系数
- int nFaceSizeOffset; //不同人脸的偏移标准
- int nSleepLong; //检测时间间隔长
- int nSleepMiddle; //检测时间间隔中
- int nSleepShort; //检测时间间隔短
- int nThresholdNum; //二值化参数
- };
- struct CCustomerRange
- {
- short sX; //人脸中心点X坐标
- short sY; //人脸中心点Y坐标
- short sH; //人脸中心点到剪辑矩形上边沿的高度,即矩形高度=sH*2,矩形按4:3的比例,宽度=SH*2*4/3
- };
- enum SceneEnum
- {
- UncertainScene = 0,
- LockScene, //锁定
- UnLockScene, //失去锁定
- RockScene, //晃动
- ForwardScened, //向前
- BackwardScened //向后
- };
- enum DistanceEnum
- {
- UncertainDistance = 0,
- OperateDistance, //操作距离
- CloseDistance, //近端
- FarDistance //远端
- };
- enum PoseEnum
- {
- UncertainPose = 0,
- StandPose, //站立
- SitPose //坐立
- };
- enum CameraEnum
- {
- EnvironCamera = 0, //环境相机
- OperatorCamera, //操作相机
- ErrorCamera
- };
- struct CCustomerPosition
- {
- CameraEnum eCamera; //1、2号摄像头
- SceneEnum eScene; //0不确定,1开始锁定、2失去锁定、3晃动、4向前、5向后
- DistanceEnum eDistance; //0不确定,1操作距离,2近端,3远端
- PoseEnum ePose; //0不确定,1-站立,2-坐立
- CCustomerRange stRange;
- };
- //脸部覆盖物
- struct CCover
- {
- bool bIsClearFace; //脸部是否可见
- bool bShowEyes; //眼睛是否可见
- bool bShowNose; //鼻子是否可见
- bool bShowMouth; //嘴巴是否可见
- };
- //人脸亮度
- enum BrightnessEnum
- {
- VeryLow = 0, //极低 < 40
- Lower, //比较低 >40 <80
- NorMal, //正常 >80 <160
- Higher, //比较高 >160 <200
- VeryHigh //极高 >200
- };
- //客户常规属性
- struct CCustomerStatus
- {
- CCustomerPosition stCustomerPos; //客户位置属性
- CCover stCustomerCover; //覆盖属性
- BrightnessEnum eBrightness; //人脸亮度
- };
- enum SexEnum
- {
- UncertainSex = 0, //不知道
- Women, //女
- Man //男
- };
- enum YoungOldEnum
- {
- UncertainAge = 0, //不知道
- Child, //小孩
- Young, //年轻人
- MiddleAged, //中年人
- Old //老年人
- };
- enum HeightEnunm
- {
- UncertainHeight = 0, //不知道
- Low, //矮
- Middle, //中等
- High //高
- };
- //客户交互属性
- struct CCustomerAppearance
- {
- SexEnum eSex; // 0不知道,1女,2男
- YoungOldEnum eYoungOld; // 0不知道,1小孩,2年轻人,3中年人,4老人
- HeightEnunm eHeight; // 0不知道,1矮,2中等,3高
- };
- //监控模式
- enum MonitorEnum
- {
- FaceDetect =0, //人脸检测
- MotionTarckAndFaceDetect, //运动跟踪+人脸检测
- MotionTarckAndFaceRecog, //运动跟踪+人脸识别
- };
- enum facecap_loglevel {
- FACECAP_DEBUG = 0,
- FACECAP_INFO = 1,
- FACECAP_WARN = 2,
- FACECAP_ERROR = 3,
- FACECAP_FATAL = 4
- };
- enum video_monitor_event_type {
- Close, //有人靠近 1.5M
- Leave, //客户离开,客户消失或退出到接近距离外1.5M
- EnterOperate, //客户进入操作距离 0.5M
- BackToClose, //客户退回到接近距离
- Appear, //有人出现在视野中
- CustomerChange, //客户已经换人
- CaptureFace, //捕获脸部事件
- LoseFace, //失去脸部事件
- FaceCaptureFC, //人脸识别崩溃
- NoDetectBody //未检测到人
- };
- class CVideoMonitorEvent
- {
- public:
- virtual void GenerateMonitorEvent(video_monitor_event_type eType, char* strMsg = NULL) = 0;
- };
- struct CImageFrame
- {
- unsigned char *data;
- int width;
- int height;
- int framesize;
- };
- class CHostApi
- {
- public:
- virtual uint64_t GenerateUUID() = 0;
- virtual void GetFaceImgName(char* FaceName, uint32_t uLen) = 0;
- virtual bool IsCustomerChange() = 0;
- virtual bool LoadConfig(CFaceCaptureConfig &config) = 0;
- virtual void Debug(facecap_loglevel elevel, const char *fmt, ...) = 0;
- };
- class Clibfacecapture_impl; //桥接
- // 此类是从 libfacecapture.dll 导出的
- class LIBFACECAPTURE_API Clibfacecapture
- {
- public:
- //EnvironMinVideoName:环境摄像头共享视频队列的文件名
- //OperateVideoName:操作摄像头共享视频队列的文件名
- //OperateVideoName默认为Null时设备运行于单摄像头模式
- //开始视频监控,pHost:事件,nMonitorFreq:监控频率,单位ms,MonitorType:监控类型,有三种模式可供选择
- Clibfacecapture(bool *pResult, CHostApi *pHostAPI, CVideoMonitorEvent*pHost, const char* EnvironVideoName, const char* OperateVideoName = NULL, MonitorEnum eMonitorType = MotionTarckAndFaceDetect);
- ~Clibfacecapture(void);
- bool StartFaceCapture();
- bool StopFaceCapture();
- //有多少其他用户
- bool GetCustomerNum(uint32_t &num);
- //获取所有用户FACEID
- bool GetTrackFace(uint64_t *arrFaceIDs, int *size);
- //获取主用户的常规属性
- bool GetMainCustomerStatus(uint64_t& FaceID, CCustomerStatus &Property);
- //获取其他用户的常规属性
- bool GetCustomerStatus(uint64_t FaceID, CCustomerStatus &Property);
- //获取主用户的交互属性
- bool GetCustomerAppearance(uint64_t FaceID, CCustomerAppearance &Property);
- void SetLightChange();//灯光变化,此时算法要做处理防止误判
- void SetCameraState(int nState);
- private:
- Clibfacecapture_impl*m_pImpl;
- };
- bool LIBFACECAPTURE_API SnapShot(CImageFrame*img);
- #endif
|