Pārlūkot izejas kodu

#IQRV #comment mod_facetracking 编译通过

80374374 1 gadu atpakaļ
vecāks
revīzija
afec355989

+ 1 - 1
Module/CMakeLists.txt

@@ -192,7 +192,7 @@ add_subdirectory(mod_ContactlessCard)
 add_subdirectory(mod_gpio)
 add_subdirectory(mod_DeviceControl)
 #zhaohu
-#add_subdirectory(mod_facetracking)
+add_subdirectory(mod_facetracking)
 #zhaohu
 add_subdirectory(mod_initiativetransfer)
 #zhaohu

+ 67 - 27
Module/mod_facetracking/mod_facetracking.cpp

@@ -1,4 +1,4 @@
-
+#include "stdafx.h"
 #include "SpBase.h"
 #include "SpIni.h"
 
@@ -160,9 +160,25 @@ public:
 		Capture(0);
 	}
 
+	int TransCameraStateToInt(char cData)
+	{
+		int iRet = 0;
+		if ('E' == cData){
+			iRet = 1;
+		}
+		else if('O' == cData){
+			iRet = 2;
+		}
+		else if('B' == cData){
+			iRet = 3;
+		}
+
+		return iRet;
+	}
+
 	void OnLog(const CAutoArray<CUUID> &SubIDs, const CUUID nLogID,const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
 		const DWORD dwSysError,const DWORD dwUserCode,const DWORD dwEntityInstanceID, const WORD wEntityDevelID, 
-		const CAutoArray<DWORD> &Param, const char *pszEntityName, const char *pszModuleName,const char *pszMessage, const linkContext& pLinkInfo)
+		const CAutoArray<DWORD> &Param, const char *pszEntityName, const char *pszModuleName,const char *pszMessage, const linkContext &pLinkInfo)
 	{
 		if (dwUserCode == LOG_EVT_HEADLIGHT_GREEN_OFF)
 		{
@@ -173,35 +189,49 @@ public:
 		{
 			CSimpleStringA strValue;
 			GetFunction()->GetSysVar("CameraState", strValue);
-			if (strValue[0]  == 'N')
-			{
-				m_facecapture->SetCameraState(0);
+#if defined(RVC_OS_WIN)
+			int iState = TransCameraStateToInt(strValue[0]);
+			if (3 != iState) {
+				m_facecapture->SetCameraState(iState);
 				m_facecapture->StartFaceCapture();
-				Dbg("Begin start Camera,set Camera State to 0, and start face capture!");
+				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("set camera state to %d, and start face capture!", iState);
+			} else {
+				m_facecapture->SetCameraState(3);
+				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("set camera state to 3, not start face capture!");
 			}
-			else if (strValue[0]  == 'E')
-			{
+#else
+			if (strValue[0] == 'N') {
+				m_facecapture->SetCameraState(0);
+				m_facecapture->StartFaceCapture();
+				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Begin start Camera,set Camera State to 0, and start face capture!");
+			} else if (strValue[0] == 'E') {
 				m_facecapture->SetCameraState(1);
 				m_facecapture->StartFaceCapture();
-				Dbg("Begin start Camera,set Camera State to 1, and start face capture!");
-			}
-			else if (strValue[0]  == 'O')
-			{
+				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Begin start Camera,set Camera State to 1, and start face capture!");
+			} else if (strValue[0] == 'O') {
 				m_facecapture->SetCameraState(2);
 				m_facecapture->StartFaceCapture();
-				Dbg("Begin start Camera,set Camera State to 2, and start face capture!");
-			}
-			else if (strValue[0]  == 'B')
-			{
+				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Begin start Camera,set Camera State to 2, and start face capture!");
+			} else if (strValue[0] == 'B') {
 				m_facecapture->SetCameraState(3);
-				Dbg("Begin start Camera,set Camera State to 3");
-			}	
+				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Begin start Camera,set Camera State to 3");
+			}
+#endif //RVC_OS_WIN
 		}
 		else if (dwUserCode == LOG_EVT_MEDIACONTROLLER_END_FACETRACKING)
 		{
-			Dbg("stop Camera,set camera stat to Error, and stop face capture!");
+			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("stop Camera,set camera stat to Error, and stop face capture!");
+#if defined(RVC_OS_LINUX)
 			m_facecapture->SetCameraState(3);
+#endif //RVC_OS_LINUX
 			m_facecapture->StopFaceCapture();
+#if defined(RVC_OS_WIN)
+			CSimpleStringA strValue;
+			GetFunction()->GetSysVar("CameraState", strValue);
+			int iState = TransCameraStateToInt(strValue[0]);
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("set camera stat to %d, and stop face capture!", iState);
+			m_facecapture->SetCameraState(iState);
+#endif //RVC_OS_WIN
 		}
 	}
 
@@ -317,7 +347,6 @@ public:
 				snprintf(FaceName, uLen, "%s%s%s_%s", (LPCSTR)strPath, SPLIT_SLASH_STR, strSessionID.GetData(), strCustomerID.GetData());
 #endif // RVC_OS_WIN
 			}
-			//Debug("get file name =%s",FaceName);
 			bIsSessionChange = FALSE;
 			bIsCustomerChange = FALSE;
 		} 
@@ -397,16 +426,28 @@ public:
 		va_list arg;
 		va_start(arg, fmt);
 
+#if defined(RVC_OS_WIN)
+		int n = _vscprintf(fmt, arg);
+#else
 		int n = vsnprintf(NULL, 0, fmt, arg);
+#endif //RVC_OS_WIN
 		if (n >= MAX_LOG_LEN) {
 			char* buf = (char*)malloc((size_t)(n + 1));
+#if defined(RVC_OS_WIN)
+			_vsnprintf(buf, n + 1, fmt, arg);
+#else
 			vsnprintf(buf, n + 1, fmt, arg);
+#endif //RVC_OS_WIN
 			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("%s", buf);
 			free(buf);
 		}
 		else{
 			char strlog[MAX_LOG_LEN] = {0};
+#if defined(RVC_OS_WIN)
+			_vsnprintf(strlog, MAX_LOG_LEN, fmt, arg);
+#else
 			vsnprintf(strlog, MAX_LOG_LEN, fmt, arg);
+#endif //RVC_OS_WIN
 			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("%s", strlog);
 		}
 		va_end(arg);
@@ -421,23 +462,23 @@ public:
 	}
 	virtual void GenerateLeaveEvent()
 	{
-		LogEvent(Severity_Middle, 0x30200002, "客户消失或退出到接近è·�ç??1.5M之å??");
+		LogEvent(Severity_Middle, 0x30200002, "客户消失或退出到接近�离1.5M之外");
 	}
 	virtual void GenerateEnterOperateEvent()
 	{
-		LogEvent(Severity_Middle, 0x30200003, "客户进入æ“�作è·�ç??0.5m"); 
+		LogEvent(Severity_Middle, 0x30200003, "客户进入�作�离0.5m"); 
 	}
 	virtual void GenerateBackToCloseEvent()
 	{
-		LogEvent(Severity_Middle, 0x30200004, "客户退回到接近è·�ç??"); 
+		LogEvent(Severity_Middle, 0x30200004, "客户退回到接近�离"); 
 	}
-	virtual void GenerateAppearEvent()					//有人出现在�野�
+	virtual void GenerateAppearEvent()					//有人出现在视野中
 	{
 		LogEvent(Severity_Middle, 0x30200006, "有人出现"); 
 	}
 	virtual void GenerateCustomerChangeEvent()
 	{
-		LogEvent(Severity_Middle, 0x30200005, "客户已���");
+		LogEvent(Severity_Middle, 0x30200005, "客户已��人");
 	}
 	virtual void GenerateCaptureFaceEvent()
 	{
@@ -450,7 +491,7 @@ public:
 	 
 	virtual void GenerateFaceCaptureFC()
 	{
-		//��最高等级错�事件,由�康模���对应实体
+		//��最高等级错误事件,由�康模���对应实体
 		LogEvent(Severity_High,EVENT_MOD_FACE_BREAKDOWN,"the opencv library breakdown");
 	}
 
@@ -566,4 +607,3 @@ ChannelClient::ChannelClient( CFaceTrackingEntity *pEntity ) : ChannelService_Cl
 SP_BEGIN_ENTITY_MAP()
 	SP_ENTITY(CFaceTrackingEntity)
 SP_END_ENTITY_MAP()
-

+ 98 - 98
Other/win/libfacecapture/libfacecapture.h

@@ -1,9 +1,9 @@
-// 下列 ifdef 块是创建使从 DLL 导出更简单的
-// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 LIBFACECAPTURE_EXPORTS
-// 符号编译的。在使用此 DLL 的
-// 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
-// LIBFACECAPTURE_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
-// 符号视为是被导出的。
+// 涓嬪垪 ifdef 鍧楁槸鍒涘缓浣夸粠 DLL 瀵煎嚭鏇寸畝鍗曠殑
+// 瀹忕殑鏍囧噯鏂规硶銆傛� DLL 涓�殑鎵€鏈夋枃浠堕兘鏄�敤鍛戒护琛屼笂瀹氫箟鐨� LIBFACECAPTURE_EXPORTS
+// 绗﹀彿缂栬瘧鐨勩€傚湪浣跨敤姝� DLL 鐨�
+// 浠讳綍鍏朵粬椤圭洰涓婁笉搴斿畾涔夋�绗﹀彿銆傝繖鏍凤紝婧愭枃浠朵腑鍖呭惈姝ゆ枃浠剁殑浠讳綍鍏朵粬椤圭洰閮戒細灏�
+// LIBFACECAPTURE_API 鍑芥暟瑙嗕负鏄�粠 DLL 瀵煎叆鐨勶紝鑰屾� DLL 鍒欏皢鐢ㄦ�瀹忓畾涔夌殑
+// 绗﹀彿瑙嗕负鏄��瀵煎嚭鐨勩€�
 #ifndef LIBFACECAPTURE
 #define LIBFACECAPTURE
 
@@ -13,153 +13,153 @@
 #define LIBFACECAPTURE_API __declspec(dllimport)
 #endif
 
-//配置参数
+//閰嶇疆鍙傛暟
 struct CFaceCaptureConfig
 {
-	int nPrimCamera;						//双摄像头模式下,0:以环境相机为首选相机(单相机默认为0),1:以操作相机为首选相机
-	int nServersType;						//0:前端,1:后台
-	int nContourMinAera;					//运动跟踪最小面积
+	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;						//二值化参数	
+	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
+	short sX;		//浜鸿劯涓�績鐐筙鍧愭爣
+	short sY;		//浜鸿劯涓�績鐐筜鍧愭爣
+	short sH;		//浜鸿劯涓�績鐐瑰埌鍓�緫鐭╁舰涓婅竟娌跨殑楂樺害锛屽嵆鐭╁舰楂樺害=sH*2锛岀煩褰㈡寜4锛�3鐨勬瘮渚嬶紝瀹藉害=SH*2*4/3
 };
 
 enum SceneEnum
 {
 	UncertainScene = 0,
-	LockScene,				//锁定
-	UnLockScene,			//失去锁定
-	RockScene,				//晃动
-	ForwardScened,			//向前
-	BackwardScened			//向后
+	LockScene,				//閿佸畾
+	UnLockScene,			//澶卞幓閿佸畾
+	RockScene,				//鏅冨姩
+	ForwardScened,			//鍚戝墠
+	BackwardScened			//鍚戝悗
 };
 
 enum DistanceEnum
 {
 	UncertainDistance = 0,
-	OperateDistance,		//操作距离
-	CloseDistance,			//近端
-	FarDistance				//远端
+	OperateDistance,		//鎿嶄綔璺濈�
+	CloseDistance,			//杩戠�
+	FarDistance				//杩滅�
 };
 
 enum PoseEnum
 {
 	UncertainPose = 0,
-	StandPose,				//站立
-	SitPose					//坐立
+	StandPose,				//绔欑珛
+	SitPose					//鍧愮珛
 };
 
 enum CameraEnum
 {
-	EnvironCamera     = 0,			//环境相机
-	OperatorCamera,					//操作相机
+	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-坐立
+	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	bClearFace;		//脸部是否可见
-	BOOL	bShowEyes;		//眼睛是否可见
-	BOOL	bShowNose;		//鼻子是否可见
-	BOOL	bShowMouth;		//嘴巴是否可见
+	BOOL	bClearFace;		//鑴搁儴鏄�惁鍙��
+	BOOL	bShowEyes;		//鐪肩潧鏄�惁鍙��
+	BOOL	bShowNose;		//榧诲瓙鏄�惁鍙��
+	BOOL	bShowMouth;		//鍢村反鏄�惁鍙��
 };
 
-//人脸亮度
+//浜鸿劯浜�害
 enum BrightnessEnum
 {
-	VeryLow		= 0,	//极低 < 40
-	Lower,			    //比较低  >40   <80		
-	NorMal,				//正常  >80   <160
-	Higher,				//比较高 >160  <200
-	VeryHigh			//极高  >200
+	VeryLow		= 0,	//鏋佷綆 < 40
+	Lower,			    //姣旇緝浣�  >40   <80		
+	NorMal,				//姝e父  >80   <160
+	Higher,				//姣旇緝楂� >160  <200
+	VeryHigh			//鏋侀珮  >200
 };
 
-//客户常规属性
+//瀹㈡埛甯歌�灞炴€�
 struct CCustomerStatus
 {
-	CCustomerPosition stCustomerPos;			//客户位置属性
-	CCover  stCustomerCover;					//覆盖属性
-	BrightnessEnum	 eBrightness;				//人脸亮度
+	CCustomerPosition stCustomerPos;			//瀹㈡埛浣嶇疆灞炴€�
+	CCover  stCustomerCover;					//瑕嗙洊灞炴€�
+	BrightnessEnum	 eBrightness;				//浜鸿劯浜�害
 };
 
 enum SexEnum
 {
-	UncertainSex = 0,	//不知道
-	Women,				//女人
-	Man					// 男人
+	UncertainSex = 0,	//涓嶇煡閬�
+	Women,				//濂充汉
+	Man					// 鐢蜂汉
 };
 
 enum YoungOldEnum
 {
-	UncertainAge = 0,   //不知道
-	Child,			//小孩
-	Young,			//年轻人
-	MiddleAged,		//中年人
-	Old				//老年人
+	UncertainAge = 0,   //涓嶇煡閬�
+	Child,			//灏忓�
+	Young,			//骞磋交浜�
+	MiddleAged,		//涓�勾浜�
+	Old				//鑰佸勾浜�
 };
 
 enum HeightEnunm
 {
-	UncertainHeight = 0,		//不知道
-	Low,				//
-	Middle,				//中等
-	High				//
+	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高
+	SexEnum eSex;			// 0涓嶇煡閬擄紝1濂筹紝2鐢�
+	YoungOldEnum eYoungOld;	//0涓嶇煡閬擄紝1灏忓�锛�2骞磋交浜猴紝3涓�勾浜猴紝4鑰佷汉
+	HeightEnunm eHeight;		//0涓嶇煡閬擄紝1鐭�紝2涓�瓑锛�3楂�
 };
 
-//监控模式
+//鐩戞帶妯″紡
 enum MonitorEnum
 {
-	FaceDetect =0,					//人脸检测
-	MotionTarckAndFaceDetect,		//运动跟踪+人脸检测
-	MotionTarckAndFaceRecog,		//运动跟踪+人脸识别
+	FaceDetect =0,					//浜鸿劯妫€娴�
+	MotionTarckAndFaceDetect,		//杩愬姩璺熻釜+浜鸿劯妫€娴�
+	MotionTarckAndFaceRecog,		//杩愬姩璺熻釜+浜鸿劯璇嗗埆
 };
 
 struct __declspec(novtable) CVideoMonitorEvent
 {
-	virtual void GenerateCloseEvent() = 0;					//有人靠近 1.5M
-	virtual void GenerateLeaveEvent() = 0;					//客户离开,客户消失或退出到接近距离外1.5M
-	virtual void GenerateEnterOperateEvent() = 0;			//客户进入操作距离 0.5M
-	virtual void GenerateBackToCloseEvent() = 0;			//客户退回到接近距离
-	virtual void GenerateAppearEvent() = 0;					//有人出现在视野中
-	virtual void GenerateCustomerChangeEvent() = 0;			//客户已经换人
+	virtual void GenerateCloseEvent() = 0;					//鏈変汉闈犺繎 1.5M
+	virtual void GenerateLeaveEvent() = 0;					//瀹㈡埛绂诲紑,瀹㈡埛娑堝け鎴栭€€鍑哄埌鎺ヨ繎璺濈�澶�1.5M
+	virtual void GenerateEnterOperateEvent() = 0;			//瀹㈡埛杩涘叆鎿嶄綔璺濈� 0.5M
+	virtual void GenerateBackToCloseEvent() = 0;			//瀹㈡埛閫€鍥炲埌鎺ヨ繎璺濈�
+	virtual void GenerateAppearEvent() = 0;					//鏈変汉鍑虹幇鍦ㄨ�閲庝腑
+	virtual void GenerateCustomerChangeEvent() = 0;			//瀹㈡埛宸茬粡鎹�汉
 
-	virtual void GenerateCaptureFaceEvent() = 0;			//捕获脸部事件
-	virtual void GenerateLoseFaceEvent() = 0;				//失去脸部事件
-	virtual void GenerateFaceCaptureFC() = 0;               //人脸识别崩溃
+	virtual void GenerateCaptureFaceEvent() = 0;			//鎹曡幏鑴搁儴浜嬩欢
+	virtual void GenerateLoseFaceEvent() = 0;				//澶卞幓鑴搁儴浜嬩欢
+	virtual void GenerateFaceCaptureFC() = 0;               //浜鸿劯璇嗗埆宕╂簝
 };
 
 struct CImageFrame
@@ -182,36 +182,36 @@ struct __declspec(novtable) CHostApi
 
 #define  debugerror
 
-class Clibfacecapture_impl;    //桥接
+class Clibfacecapture_impl;    //妗ユ帴
 
-// 此类是从 libfacecapture.dll 导出的
+// 姝ょ被鏄�粠 libfacecapture.dll 瀵煎嚭鐨�
 class LIBFACECAPTURE_API Clibfacecapture 
 {
 public:
-	//EnvironMinVideoName:环境摄像头小分辨率共享视频队列的文件名
-	//EnvironMaxVideoName:环境摄像头大分辨率共享视频队列的文件名
-	//OperateVideoName:操作摄像头共享视频队列的文件名
-	//OperateVideoName默认为Null时设备运行于单摄像头模式
-	//开始视频监控,pHost:事件,nMonitorFreq:监控频率,单位ms,MonitorType:监控类型,有三种模式可供选择
+	//EnvironMinVideoName锛氱幆澧冩憚鍍忓ご灏忓垎杈ㄧ巼鍏变韩瑙嗛�闃熷垪鐨勬枃浠跺悕
+	//EnvironMaxVideoName锛氱幆澧冩憚鍍忓ご澶у垎杈ㄧ巼鍏变韩瑙嗛�闃熷垪鐨勬枃浠跺悕
+	//OperateVideoName锛氭搷浣滄憚鍍忓ご鍏变韩瑙嗛�闃熷垪鐨勬枃浠跺悕
+	//OperateVideoName榛樿�涓篘ull鏃惰�澶囪繍琛屼簬鍗曟憚鍍忓ご妯″紡
+	//寮€濮嬭�棰戠洃鎺�,pHost:浜嬩欢锛宯MonitorFreq:鐩戞帶棰戠巼锛屽崟浣峬s,MonitorType锛氱洃鎺х被鍨嬶紝鏈変笁绉嶆ā寮忓彲渚涢€夋嫨
 	Clibfacecapture(BOOL *pResult, CHostApi *pHostAPI,CVideoMonitorEvent*pHost,LPCSTR EnvironMinVideoName,LPCSTR EnvironMaxVideoName = NULL,LPCSTR OperateVideoName=NULL,MonitorEnum eMonitorType=MotionTarckAndFaceDetect);
 	~Clibfacecapture(void);
 
 	bool StartFaceCapture();
 	bool StopFaceCapture();
 
-	//快照
+	//蹇�収
 	BOOL SnapShot(CImageFrame&img);
-	//有多少其他用户
+	//鏈夊�灏戝叾浠栫敤鎴�
 	BOOL GetCustomerNum(UINT&num);
-	//获取所有用户FACEID
+	//鑾峰彇鎵€鏈夌敤鎴稦ACEID
 	BOOL GetTrackFace(__int64 *arrFaceIDs, int *size);
-	//获取主用户的常规属性
+	//鑾峰彇涓荤敤鎴风殑甯歌�灞炴€�
 	BOOL GetMainCustomerStatus(__int64 &FaceID,CCustomerStatus &Property);
-	//获取其他用户的常规属性
+	//鑾峰彇鍏朵粬鐢ㄦ埛鐨勫父瑙勫睘鎬�
 	BOOL GetCustomerStatus(__int64 FaceID,CCustomerStatus &Property);
-	//获取主用户的交互属性
+	//鑾峰彇涓荤敤鎴风殑浜や簰灞炴€�
 	BOOL GetCustomerAppearance(__int64 FaceID,CCustomerAppearance &Property);
-	void SetLightChange();//灯光变化,此时算法要做处理防止误判
+	void SetLightChange();//鐏�厜鍙樺寲锛屾�鏃剁畻娉曡�鍋氬�鐞嗛槻姝㈣�鍒�
 	void SetCameraState(int nState);
 private:
 	Clibfacecapture_impl*m_pImpl;  

+ 11 - 11
Other/win/libsharememory/libsharememory.cpp

@@ -1,4 +1,4 @@
-// libsharememory.cpp : 定义 DLL 应用程序的导出函数。
+// libsharememory.cpp : 瀹氫箟 DLL 搴旂敤绋嬪簭鐨勫�鍑哄嚱鏁般€�
 //
 
 #include "stdafx.h"
@@ -32,7 +32,7 @@ public:
 		CloseShareMem();
 	}
 
-	//创建共享内存区
+	//鍒涘缓鍏变韩鍐呭瓨鍖�
 	BOOL CreateShareMem(LPCTSTR szName, DWORD dwBytes)
 	{
 		BOOL T=FALSE;
@@ -72,7 +72,7 @@ public:
 		}
 		return T;
 	}
-	//打开已有的共享内存区
+	//鎵撳紑宸叉湁鐨勫叡浜�唴瀛樺尯
 	BOOL OpenShareMem(LPCTSTR szName)
 	{
 		BOOL T=FALSE;
@@ -109,7 +109,7 @@ public:
 		return T;
 	}
 
-	//释放共享内存区
+	//閲婃斁鍏变韩鍐呭瓨鍖�
 	VOID CloseShareMem()
 	{
 		if(m_bLocked)
@@ -135,7 +135,7 @@ public:
 		m_dwBytes=0;
 	}
 
-	//获取共享内存区大小
+	//鑾峰彇鍏变韩鍐呭瓨鍖哄ぇ灏�
 	DWORD GetShareMemBytes()
 	{
 		return m_dwBytes;
@@ -152,12 +152,12 @@ public:
 	//{
 		//m_nEntityNum--;
 	//}
-	//是否有可用的内存区
+	//鏄�惁鏈夊彲鐢ㄧ殑鍐呭瓨鍖�
 	BOOL IsShareMemValid()
 	{
 		return (m_hFileMap!=NULL&&m_hMutex!=NULL);
 	}
-	//锁定访问内存区
+	//閿佸畾璁块棶鍐呭瓨鍖�
 	LPVOID LockShareMem(DWORD dwWaitTimeout=INFINITE)
 	{
 		LPVOID pData=NULL;
@@ -174,12 +174,12 @@ public:
 		}
 		return pData;
 	}
-	//内存区是否互斥锁定
+	//鍐呭瓨鍖烘槸鍚︿簰鏂ラ攣瀹�
 	BOOL IsShareMemLocked()
 	{
 		return m_bLocked;
 	}
-	//解锁内存区
+	//瑙i攣鍐呭瓨鍖�
 	VOID UnlockShareMem()
 	{
 		if(m_bLocked)
@@ -191,8 +191,8 @@ public:
 };
 
 
-// 这是已导出类的构造函数。
-// 有关类定义的信息,请参阅 libsharememory.h
+// 杩欐槸宸插�鍑虹被鐨勬瀯閫犲嚱鏁般€�
+// 鏈夊叧绫诲畾涔夌殑淇℃伅锛岃�鍙傞槄 libsharememory.h
 Clibsharememory::Clibsharememory()
 {
 	m_pImpl = new libsharememory_impl;

+ 9 - 9
Other/win/libsharememory/libsharememory.h

@@ -1,9 +1,9 @@
-// 下列 ifdef 块是创建使从 DLL 导出更简单的
-// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 LIBSHAREMEMORY_EXPORTS
-// 符号编译的。在使用此 DLL 的
-// 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
-// LIBSHAREMEMORY_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
-// 符号视为是被导出的。
+// 涓嬪垪 ifdef 鍧楁槸鍒涘缓浣夸粠 DLL 瀵煎嚭鏇寸畝鍗曠殑
+// 瀹忕殑鏍囧噯鏂规硶銆傛� DLL 涓�殑鎵€鏈夋枃浠堕兘鏄�敤鍛戒护琛屼笂瀹氫箟鐨� LIBSHAREMEMORY_EXPORTS
+// 绗﹀彿缂栬瘧鐨勩€傚湪浣跨敤姝� DLL 鐨�
+// 浠讳綍鍏朵粬椤圭洰涓婁笉搴斿畾涔夋�绗﹀彿銆傝繖鏍凤紝婧愭枃浠朵腑鍖呭惈姝ゆ枃浠剁殑浠讳綍鍏朵粬椤圭洰閮戒細灏�
+// LIBSHAREMEMORY_API 鍑芥暟瑙嗕负鏄�粠 DLL 瀵煎叆鐨勶紝鑰屾� DLL 鍒欏皢鐢ㄦ�瀹忓畾涔夌殑
+// 绗﹀彿瑙嗕负鏄��瀵煎嚭鐨勩€�
 #ifndef LIBSHAREMEMRY
 #define LIBSHAREMEMRY
 
@@ -16,15 +16,15 @@
 #include <windows.h>
 using namespace std ;
 
-class libsharememory_impl;  //桥接
+class libsharememory_impl;  //妗ユ帴
 
-// 此类是从 libsharememory.dll 导出的
+// 姝ょ被鏄�粠 libsharememory.dll 瀵煎嚭鐨�
 class LIBSHAREMEMORY_API Clibsharememory 
 {
 public:
 	Clibsharememory(void);
 	~Clibsharememory();
-	// TODO: 在此添加您的方法。
+	// TODO: 鍦ㄦ�娣诲姞鎮ㄧ殑鏂规硶銆�
 	VOID Unlock();
 	BOOL IsLocked();
 	LPVOID Lock(DWORD dwWaitTimeout=INFINITE);

+ 33 - 33
Other/win/libvideoqueue/libvideoqueue.cpp

@@ -1,4 +1,4 @@
-// libvideoqueue.cpp : 定义 DLL 应用程序的导出函数。
+// libvideoqueue.cpp : 瀹氫箟 DLL 搴旂敤绋嬪簭鐨勫�鍑哄嚱鏁般€�
 //
 
 #include "stdafx.h"
@@ -112,7 +112,7 @@ public:
 		ClearVideoQueue();
 	}
 
-	//初始化队列
+	//鍒濆�鍖栭槦鍒�
 	bool InitQueue(LPCTSTR szName,int framesize=MAX_VIDEOQNODE_SIZE)
 	{
 		m_nQueueAddrLens = sizeof(linkqueue);
@@ -161,7 +161,7 @@ public:
 		return true;
 	}
 
-	//返回队列的元素个数,视频队列长度
+	//杩斿洖闃熷垪鐨勫厓绱犱釜鏁帮紝瑙嗛�闃熷垪闀垮害
 	int GetVideoLens()
 	{
 		if(m_ShareMem.IsValid())
@@ -183,7 +183,7 @@ public:
 			return 0;
 		}
 	}
-	//往视频循环队列尾部插节点
+	//寰€瑙嗛�寰�幆闃熷垪灏鹃儴鎻掕妭鐐�
 	bool InsertVideo(videoq_frame* Video, int flags,unsigned int nowtime)
 	{
 		if(m_ShareMem.IsValid())
@@ -192,9 +192,9 @@ public:
 			if(m_lpMem != NULL)
 			{
 				unsigned int nRearNextIndex = 0;
-				//保存当前对位指针的序列号
+				//淇濆瓨褰撳墠瀵逛綅鎸囬拡鐨勫簭鍒楀彿
 				queueptr rearptrfront = (queueptr)aQnodeAddr[m_pQueue->rearindex];
-				//如果队列已满
+				//濡傛灉闃熷垪宸叉弧
 				if(m_pQueue->queuelens == MAX_VIDEOQUEUE_LENS)
 				{
 					m_pQueue->rearindex = (m_pQueue->rearindex+1)%MAX_VIDEOQUEUE_LENS;
@@ -230,10 +230,10 @@ public:
 
 					if (flags) {
 						IppiAxis flip;
-						if (flags == VIDEOQUEUE_FLAG_VERTICAL_FLIP) { // 上下翻转
-							flip = ippAxsHorizontal; // x
-						} else if (flags == VIDEOQUEUE_FLAG_HORIZONTAL_FLIP) { // 左右翻转
-							flip = ippAxsVertical; // y
+						if (flags == VIDEOQUEUE_FLAG_VERTICAL_FLIP) { // 涓婁笅缈昏浆
+							flip = ippAxsHorizontal; // x杞�
+						} else if (flags == VIDEOQUEUE_FLAG_HORIZONTAL_FLIP) { // 宸﹀彸缈昏浆
+							flip = ippAxsVertical; // y杞�
 						} else {
 							flip = ippAxsBoth;
 						}
@@ -263,7 +263,7 @@ public:
 			return false;
 		}
 	}
-	//读视频队列头部节点
+	//璇昏�棰戦槦鍒楀ご閮ㄨ妭鐐�
 	bool GetVideo(videoq_frame* Video, int flags)	
 	{
 		if(m_ShareMem.IsValid())
@@ -286,10 +286,10 @@ public:
 					Video->iframeid = videotemp->iframeid;
 					if (flags) {
 						IppiAxis flip;
-						if (flags == VIDEOQUEUE_FLAG_VERTICAL_FLIP) { // 上下翻转
-							flip = ippAxsHorizontal; // x
-						} else if (flags == VIDEOQUEUE_FLAG_HORIZONTAL_FLIP) { // 左右翻转
-							flip = ippAxsVertical; // y
+						if (flags == VIDEOQUEUE_FLAG_VERTICAL_FLIP) { // 涓婁笅缈昏浆
+							flip = ippAxsHorizontal; // x杞�
+						} else if (flags == VIDEOQUEUE_FLAG_HORIZONTAL_FLIP) { // 宸﹀彸缈昏浆
+							flip = ippAxsVertical; // y杞�
 						} else {
 							flip = ippAxsBoth;
 						}
@@ -361,10 +361,10 @@ public:
 					//Video->width = videotemp->width;
 					if (flags) {
 						IppiAxis flip;
-						if (flags == VIDEOQUEUE_FLAG_VERTICAL_FLIP) { // 上下翻转
-							flip = ippAxsHorizontal; // x
-						} else if (flags == VIDEOQUEUE_FLAG_HORIZONTAL_FLIP) { // 左右翻转
-							flip = ippAxsVertical; // y
+						if (flags == VIDEOQUEUE_FLAG_VERTICAL_FLIP) { // 涓婁笅缈昏浆
+							flip = ippAxsHorizontal; // x杞�
+						} else if (flags == VIDEOQUEUE_FLAG_HORIZONTAL_FLIP) { // 宸﹀彸缈昏浆
+							flip = ippAxsVertical; // y杞�
 						} else {
 							flip = ippAxsBoth;
 						}
@@ -417,12 +417,12 @@ public:
 					{
 						IppiAxis flip;
 						if (flags == VIDEOQUEUE_FLAG_VERTICAL_FLIP) 
-						{ // 上下翻转
-							flip = ippAxsHorizontal; // x
+						{ // 涓婁笅缈昏浆
+							flip = ippAxsHorizontal; // x杞�
 						} 
 						else if (flags == VIDEOQUEUE_FLAG_HORIZONTAL_FLIP) 
-						{ // 左右翻转
-							flip = ippAxsVertical; // y
+						{ // 宸﹀彸缈昏浆
+							flip = ippAxsVertical; // y杞�
 						} 
 						else 
 						{
@@ -472,7 +472,7 @@ public:
 		}		
 	}
 
-	//读视频队列头部节点,并删除头部节点
+	//璇昏�棰戦槦鍒楀ご閮ㄨ妭鐐�,骞跺垹闄ゅご閮ㄨ妭鐐�
 	bool GetVideoAndDel(videoq_frame* Video, int flags)
 	{
 		if(m_ShareMem.IsValid())
@@ -495,10 +495,10 @@ public:
 					Video->iframeid			= videotemp->iframeid;
 					if (flags) {
 						IppiAxis flip;
-						if (flags == VIDEOQUEUE_FLAG_VERTICAL_FLIP) { // 上下翻转
-							flip = ippAxsHorizontal; // x
-						} else if (flags == VIDEOQUEUE_FLAG_HORIZONTAL_FLIP) { // 左右翻转
-							flip = ippAxsVertical; // y
+						if (flags == VIDEOQUEUE_FLAG_VERTICAL_FLIP) { // 涓婁笅缈昏浆
+							flip = ippAxsHorizontal; // x杞�
+						} else if (flags == VIDEOQUEUE_FLAG_HORIZONTAL_FLIP) { // 宸﹀彸缈昏浆
+							flip = ippAxsVertical; // y杞�
 						} else {
 							flip = ippAxsBoth;
 						}
@@ -532,7 +532,7 @@ public:
 		}		
 	}
 
-	//清除队列
+	//娓呴櫎闃熷垪
 	bool ClearVideoQueue()
 	{
 		if(m_ShareMem.IsValid())
@@ -569,7 +569,7 @@ public:
 		}		
 	}
 
-	//删除队头的数据
+	//鍒犻櫎闃熷ご鐨勬暟鎹�
 	bool DeleteHeadVideo()  
 	{
 		if(m_ShareMem.IsValid())
@@ -603,7 +603,7 @@ public:
 		}	
 	}
 
-	//获取图像的大小
+	//鑾峰彇鍥惧儚鐨勫ぇ灏�
 	int GetFrameSize(int&width,int&height)
 	{
 		if(m_ShareMem.IsValid())
@@ -657,8 +657,8 @@ public:
 	}
 };
 
-// 这是已导出类的构造函数。
-// 有关类定义的信息,请参阅 libvideoqueue.h
+// 杩欐槸宸插�鍑虹被鐨勬瀯閫犲嚱鏁般€�
+// 鏈夊叧绫诲畾涔夌殑淇℃伅锛岃�鍙傞槄 libvideoqueue.h
 Clibvideoqueue::Clibvideoqueue(LPCTSTR videoqueuename,int framesize)
 {
 	m_pImpl = new libvideoqueue_impl(videoqueuename,framesize);

+ 22 - 22
Other/win/libvideoqueue/libvideoqueue.h

@@ -1,9 +1,9 @@
-// 下列 ifdef 块是创建使从 DLL 导出更简单的
-// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 LIBVIDEOQUEUE_EXPORTS
-// 符号编译的。在使用此 DLL 的
-// 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
-// LIBVIDEOQUEUE_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
-// 符号视为是被导出的。
+// 涓嬪垪 ifdef 鍧楁槸鍒涘缓浣夸粠 DLL 瀵煎嚭鏇寸畝鍗曠殑
+// 瀹忕殑鏍囧噯鏂规硶銆傛� DLL 涓�殑鎵€鏈夋枃浠堕兘鏄�敤鍛戒护琛屼笂瀹氫箟鐨� LIBVIDEOQUEUE_EXPORTS
+// 绗﹀彿缂栬瘧鐨勩€傚湪浣跨敤姝� DLL 鐨�
+// 浠讳綍鍏朵粬椤圭洰涓婁笉搴斿畾涔夋�绗﹀彿銆傝繖鏍凤紝婧愭枃浠朵腑鍖呭惈姝ゆ枃浠剁殑浠讳綍鍏朵粬椤圭洰閮戒細灏�
+// LIBVIDEOQUEUE_API 鍑芥暟瑙嗕负鏄�粠 DLL 瀵煎叆鐨勶紝鑰屾� DLL 鍒欏皢鐢ㄦ�瀹忓畾涔夌殑
+// 绗﹀彿瑙嗕负鏄��瀵煎嚭鐨勩€�
 #ifndef LIBVIDEOQUEUE
 #define LIBVIDEOQUEUE
 
@@ -19,8 +19,8 @@
 #define VIDEOQ_FORMAT_OPENCV     0x02
 #define VIDEOQ_FORMAT_I420       0x03
 
-#define MAX_VIDEOQUEUE_LENS     1				//视频队列最大节点数量
-#define MAX_VIDEOQNODE_SIZE     640*360*3		//视频队列单个节点默认最大长度
+#define MAX_VIDEOQUEUE_LENS     1				//瑙嗛�闃熷垪鏈€澶ц妭鐐规暟閲�
+#define MAX_VIDEOQNODE_SIZE     640*360*3		//瑙嗛�闃熷垪鍗曚釜鑺傜偣榛樿�鏈€澶ч暱搴�
 
 #define VIDEOQUEUE_FLAG_VERTICAL_FLIP	0x01
 #define VIDEOQUEUE_FLAG_HORIZONTAL_FLIP	0x02
@@ -35,39 +35,39 @@ typedef struct videoq_frame
 	int iframeid;
 }videoq_frame;
 
-class libvideoqueue_impl;  //桥接
+class libvideoqueue_impl;  //妗ユ帴
 struct video_frame;
 
-// 此类是从 libvideoqueue.dll 导出的
+// 姝ょ被鏄�粠 libvideoqueue.dll 瀵煎嚭鐨�
 class LIBVIDEOQUEUE_API Clibvideoqueue 
 {
 public:
-	//videoqueuename:用于访问视频共享内存的共享内存文件名。framesize:默认最大长度,一般使用默认值即可
+	//videoqueuename:鐢ㄤ簬璁块棶瑙嗛�鍏变韩鍐呭瓨鐨勫叡浜�唴瀛樻枃浠跺悕銆俧ramesize锛氶粯璁ゆ渶澶ч暱搴︼紝涓€鑸�娇鐢ㄩ粯璁ゅ€煎嵆鍙�
 	Clibvideoqueue(LPCTSTR videoqueuename,int framesize=MAX_VIDEOQNODE_SIZE);
 	~Clibvideoqueue();
-	// TODO: 在此添加您的方法。
+	// TODO: 鍦ㄦ�娣诲姞鎮ㄧ殑鏂规硶銆�
 private:
 	libvideoqueue_impl*m_pImpl;
 public:
-	//插入图像到队头
+	//鎻掑叆鍥惧儚鍒伴槦澶�
 	bool InsertVideo(videoq_frame* Video, int flags,unsigned int nowtime);
-	//读取队头图像
+	//璇诲彇闃熷ご鍥惧儚
 	bool GetVideo(videoq_frame* Video, int flags);
-	//读取队头图像,使用video_frame结构
+	//璇诲彇闃熷ご鍥惧儚锛屼娇鐢╲ideo_frame缁撴瀯
 	bool GetVideo2(video_frame* Video, int flags);
-	//按行拷贝,用于横向摄像头图像的拼接
+	//鎸夎�鎷疯礉锛岀敤浜庢í鍚戞憚鍍忓ご鍥惧儚鐨勬嫾鎺�
 	bool GetVideo3(videoq_frame* Video, int flags);
-	//读取队头图像并删除
+	//璇诲彇闃熷ご鍥惧儚骞跺垹闄�
 	bool GetVideoAndDel(videoq_frame* Video, int flags);
-	//获取最后的帧时间
+	//鑾峰彇鏈€鍚庣殑甯ф椂闂�
 	unsigned int GetLastFrameTime();
-	//获取视频队列的长度
+	//鑾峰彇瑙嗛�闃熷垪鐨勯暱搴�
 	int GetVideoLens(void);
-	//获取单个视频帧的大小
+	//鑾峰彇鍗曚釜瑙嗛�甯х殑澶у皬
 	int GetFrameSize(int&width,int&height);
-	//清空视频队列
+	//娓呯┖瑙嗛�闃熷垪
 	void ClearVideoQueue();
-	//删除头部节点
+	//鍒犻櫎澶撮儴鑺傜偣
 	void DeleteHeadVideo();
 };