libfacecapture.h 6.9 KB

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