libfacecapture.h 7.0 KB

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