libfacecapture.h 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. // 下列 ifdef 块是创建使从 DLL 导出更简单的
  2. // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 LIBFACECAPTURE_EXPORTS
  3. // 符号编译的。在使用此 DLL 的
  4. // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
  5. // LIBFACECAPTURE_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
  6. // 符号视为是被导出的。
  7. #ifndef LIBFACECAPTURE
  8. #define LIBFACECAPTURE
  9. #include <stdint.h>
  10. #include <stdio.h>
  11. #ifdef _WIN32
  12. #ifdef LIBFACECAPTURE_EXPORTS
  13. #define LIBFACECAPTURE_API __declspec(dllexport)
  14. #else
  15. #define LIBFACECAPTURE_API __declspec(dllimport)
  16. #endif
  17. # elif ( defined(__GNUC__) && __GNUC__ >= 4 )
  18. #define LIBFACECAPTURE_API __attribute__((visibility("default")))
  19. #else // _WIN32
  20. #define LIBFACECAPTURE_API
  21. #endif // _WIN32
  22. #ifndef MAX_PATH
  23. #define MAX_PATH 260
  24. #endif
  25. #ifndef INFINITE
  26. #define INFINITE 0xFFFFFFFF // Infinite timeout
  27. #endif // !INFINITE
  28. //配置参数
  29. struct CFaceCaptureConfig
  30. {
  31. int nPrimCamera; //双摄像头模式下,0:以环境相机为首选相机(单相机默认为0),1:以操作相机为首选相机
  32. int nServersType; //0:前端,1:后台
  33. int nContourMinAera; //运动跟踪最小面积
  34. int nUpCameraEdgeLimit; //
  35. int nDownCameraEdgeLimit; //
  36. char strFaceDataDirPath[MAX_PATH]; // 配置文件路径
  37. float fOperateFaceSize; //可操作距离时人脸系数,0.5M
  38. float fCloseFaceSize; //靠近距离时人脸系数,1.5M
  39. float fFarFaceSize; //远距离时人脸系数,2.5M
  40. float fSearchFaceSize; //远距离时搜索人脸的系数
  41. float fDetectFaceSize; //人脸检测时搜索人脸的系数
  42. int nFaceSizeOffset; //不同人脸的偏移标准
  43. int nSleepLong; //检测时间间隔长
  44. int nSleepMiddle; //检测时间间隔中
  45. int nSleepShort; //检测时间间隔短
  46. int nThresholdNum; //二值化参数
  47. };
  48. struct CCustomerRange
  49. {
  50. short sX; //人脸中心点X坐标
  51. short sY; //人脸中心点Y坐标
  52. short sH; //人脸中心点到剪辑矩形上边沿的高度,即矩形高度=sH*2,矩形按4:3的比例,宽度=SH*2*4/3
  53. };
  54. enum SceneEnum
  55. {
  56. UncertainScene = 0,
  57. LockScene, //锁定
  58. UnLockScene, //失去锁定
  59. RockScene, //晃动
  60. ForwardScened, //向前
  61. BackwardScened //向后
  62. };
  63. enum DistanceEnum
  64. {
  65. UncertainDistance = 0,
  66. OperateDistance, //操作距离
  67. CloseDistance, //近端
  68. FarDistance //远端
  69. };
  70. enum PoseEnum
  71. {
  72. UncertainPose = 0,
  73. StandPose, //站立
  74. SitPose //坐立
  75. };
  76. enum CameraEnum
  77. {
  78. EnvironCamera = 0, //环境相机
  79. OperatorCamera, //操作相机
  80. ErrorCamera
  81. };
  82. struct CCustomerPosition
  83. {
  84. CameraEnum eCamera; //1、2号摄像头
  85. SceneEnum eScene; //0不确定,1开始锁定、2失去锁定、3晃动、4向前、5向后
  86. DistanceEnum eDistance; //0不确定,1操作距离,2近端,3远端
  87. PoseEnum ePose; //0不确定,1-站立,2-坐立
  88. CCustomerRange stRange;
  89. };
  90. //脸部覆盖物
  91. struct CCover
  92. {
  93. bool bIsClearFace; //脸部是否可见
  94. bool bShowEyes; //眼睛是否可见
  95. bool bShowNose; //鼻子是否可见
  96. bool bShowMouth; //嘴巴是否可见
  97. };
  98. //人脸亮度
  99. enum BrightnessEnum
  100. {
  101. VeryLow = 0, //极低 < 40
  102. Lower, //比较低 >40 <80
  103. NorMal, //正常 >80 <160
  104. Higher, //比较高 >160 <200
  105. VeryHigh //极高 >200
  106. };
  107. //客户常规属性
  108. struct CCustomerStatus
  109. {
  110. CCustomerPosition stCustomerPos; //客户位置属性
  111. CCover stCustomerCover; //覆盖属性
  112. BrightnessEnum eBrightness; //人脸亮度
  113. };
  114. enum SexEnum
  115. {
  116. UncertainSex = 0, //不知道
  117. Women, //女
  118. Man //男
  119. };
  120. enum YoungOldEnum
  121. {
  122. UncertainAge = 0, //不知道
  123. Child, //小孩
  124. Young, //年轻人
  125. MiddleAged, //中年人
  126. Old //老年人
  127. };
  128. enum HeightEnunm
  129. {
  130. UncertainHeight = 0, //不知道
  131. Low, //矮
  132. Middle, //中等
  133. High //高
  134. };
  135. //客户交互属性
  136. struct CCustomerAppearance
  137. {
  138. SexEnum eSex; // 0不知道,1女,2男
  139. YoungOldEnum eYoungOld; // 0不知道,1小孩,2年轻人,3中年人,4老人
  140. HeightEnunm eHeight; // 0不知道,1矮,2中等,3高
  141. };
  142. //监控模式
  143. enum MonitorEnum
  144. {
  145. FaceDetect =0, //人脸检测
  146. MotionTarckAndFaceDetect, //运动跟踪+人脸检测
  147. MotionTarckAndFaceRecog, //运动跟踪+人脸识别
  148. };
  149. enum facecap_loglevel {
  150. FACECAP_DEBUG = 0,
  151. FACECAP_INFO = 1,
  152. FACECAP_WARN = 2,
  153. FACECAP_ERROR = 3,
  154. FACECAP_FATAL = 4
  155. };
  156. enum video_monitor_event_type {
  157. Close, //有人靠近 1.5M
  158. Leave, //客户离开,客户消失或退出到接近距离外1.5M
  159. EnterOperate, //客户进入操作距离 0.5M
  160. BackToClose, //客户退回到接近距离
  161. Appear, //有人出现在视野中
  162. CustomerChange, //客户已经换人
  163. CaptureFace, //捕获脸部事件
  164. LoseFace, //失去脸部事件
  165. FaceCaptureFC, //人脸识别崩溃
  166. NoDetectBody //未检测到人
  167. };
  168. class CVideoMonitorEvent
  169. {
  170. public:
  171. virtual void GenerateMonitorEvent(video_monitor_event_type eType, char* strMsg = NULL) = 0;
  172. };
  173. struct CImageFrame
  174. {
  175. unsigned char *data;
  176. int width;
  177. int height;
  178. int framesize;
  179. };
  180. class CHostApi
  181. {
  182. public:
  183. virtual uint64_t GenerateUUID() = 0;
  184. virtual void GetFaceImgName(char* FaceName, uint32_t uLen) = 0;
  185. virtual bool IsCustomerChange() = 0;
  186. virtual bool LoadConfig(CFaceCaptureConfig &config) = 0;
  187. virtual void Debug(facecap_loglevel elevel, const char *fmt, ...) = 0;
  188. };
  189. class Clibfacecapture_impl; //桥接
  190. // 此类是从 libfacecapture.dll 导出的
  191. class LIBFACECAPTURE_API Clibfacecapture
  192. {
  193. public:
  194. //EnvironMinVideoName:环境摄像头共享视频队列的文件名
  195. //OperateVideoName:操作摄像头共享视频队列的文件名
  196. //OperateVideoName默认为Null时设备运行于单摄像头模式
  197. //开始视频监控,pHost:事件,nMonitorFreq:监控频率,单位ms,MonitorType:监控类型,有三种模式可供选择
  198. Clibfacecapture(bool *pResult, CHostApi *pHostAPI, CVideoMonitorEvent*pHost, const char* EnvironVideoName, const char* OperateVideoName = NULL, MonitorEnum eMonitorType = MotionTarckAndFaceDetect);
  199. ~Clibfacecapture(void);
  200. bool StartFaceCapture();
  201. bool StopFaceCapture();
  202. //有多少其他用户
  203. bool GetCustomerNum(uint32_t &num);
  204. //获取所有用户FACEID
  205. bool GetTrackFace(uint64_t *arrFaceIDs, int *size);
  206. //获取主用户的常规属性
  207. bool GetMainCustomerStatus(uint64_t& FaceID, CCustomerStatus &Property);
  208. //获取其他用户的常规属性
  209. bool GetCustomerStatus(uint64_t FaceID, CCustomerStatus &Property);
  210. //获取主用户的交互属性
  211. bool GetCustomerAppearance(uint64_t FaceID, CCustomerAppearance &Property);
  212. void SetLightChange();//灯光变化,此时算法要做处理防止误判
  213. void SetCameraState(int nState);
  214. private:
  215. Clibfacecapture_impl*m_pImpl;
  216. };
  217. bool LIBFACECAPTURE_API SnapShot(CImageFrame*img);
  218. #endif