Browse Source

Z991239-6063 #comment 删除人脸检测时卡图功能

80274480 7 tháng trước cách đây
mục cha
commit
1703c56575

+ 1 - 1
Module/mod_facetracking/Event.h

@@ -18,7 +18,7 @@
 #define		EVENT_MOD_CUSTOMER_CHANGE				0x30200005  //客户已经换人
 #define		EVENT_MOD_CUSTOMER_CAPTUREFACE			0x30200011  //捕获脸部事件
 #define		EVENT_MOD_CUSTOMER_LOSEFACE				0x30200012  //失去脸部事件
-	
+#define		EVENT_MOD_NODETECT_BODY					0x30200013  //未检测到人脸
 	
 	
 	

+ 2 - 1
Module/mod_facetracking/mod_facetracking.cpp

@@ -43,7 +43,8 @@ static struct {
 	{5, EVENT_MOD_CUSTOMER_CHANGE, "客户已经换人"},
 	{6, EVENT_MOD_CUSTOMER_CAPTUREFACE, "捕获脸部事件"},
 	{7, EVENT_MOD_CUSTOMER_LOSEFACE, "失去脸部事件"},
-	{8, EVENT_MOD_FACE_BREAKDOWN,"the opencv library breakdown"}
+	{8, EVENT_MOD_FACE_BREAKDOWN,"the opencv library breakdown"},
+	{9, EVENT_MOD_NODETECT_BODY,"未检测到人脸"},
 };
 
 class CFaceTrackingEntity : public CEntityBase, public CHostApi , public CVideoMonitorEvent, public ISysVarListener, public ITimerListener,public ILogListener

+ 4 - 2
Module/mod_interactivecontrol/mod_interactivecontrol.cpp

@@ -209,7 +209,7 @@ ErrorCodeEnum CITCtrlEntity::__OnStart(ErrorCodeEnum preOperationError)
 	}
 
 	int i = 0;
-	m_arrListener.Init(15);
+	m_arrListener.Init(16);
 	pFunc->SubscribeLog(m_arrListener[i++], this, Log_Event, Severity_None, Error_IgnoreAll, LOG_EVT_MOD_ASSISCHAN_STARTED_SUCCESS,NULL,false);
 	pFunc->SubscribeLog(m_arrListener[i++], this, Log_Event, Severity_None, Error_IgnoreAll, LOG_EVT_MOD_LOCALPLAYER_STARTED_SUCCESS, NULL, false);
 	pFunc->SubscribeLog(m_arrListener[i++], this, Log_Event, Severity_None, Error_IgnoreAll, LOG_EVT_MOD_SALESRECORDER_STARTED_SUCCESS, NULL, false);
@@ -225,6 +225,7 @@ ErrorCodeEnum CITCtrlEntity::__OnStart(ErrorCodeEnum preOperationError)
 	pFunc->SubscribeLog(m_arrListener[i++], this, Log_Event, Severity_None, Error_IgnoreAll, EVENT_MOD_CUSTOMER_CAPTUREFACE, NULL, false);
 	pFunc->SubscribeLog(m_arrListener[i++], this, Log_Event, Severity_None, Error_IgnoreAll, EVENT_MOD_CUSTOMER_LOSEFACE, NULL, false);
 	pFunc->SubscribeLog(m_arrListener[i++], this, Log_Event, Severity_None, Error_IgnoreAll, EVENT_MOD_FACE_BREAKDOWN, NULL, false);
+	pFunc->SubscribeLog(m_arrListener[i++], this, Log_Event, Severity_None, Error_IgnoreAll, EVENT_MOD_NODETECT_BODY, NULL, false);
 	
 	return Error_Succeed;
 }
@@ -1106,6 +1107,7 @@ void CITCtrlEntity::OnLog(const CAutoArray<CUUID> &SubIDs, const CUUID nLogID,co
 	case  EVENT_MOD_CUSTOMER_CAPTUREFACE:
 	case  EVENT_MOD_CUSTOMER_LOSEFACE:
 	case  EVENT_MOD_FACE_BREAKDOWN:
+	case  EVENT_MOD_NODETECT_BODY:
 		OnFaceTrackingMsg(pszMessage);
 		break;
 	default:
@@ -1629,7 +1631,7 @@ void CITCtrlEntity::OnFaceTrackingMsg(const char* pszFaceTrackingMsg)
 	struct tm* pst = NULL;
 	time_t t = time(NULL);
 	pst = localtime(&t);
-	snprintf(strTime, MAX_PATH, "(%02d:%02d:%02d)", pst->tm_hour, pst->tm_min, pst->tm_wday, pst->tm_sec);
+	snprintf(strTime, MAX_PATH, "(%02d:%02d:%02d)", pst->tm_hour, pst->tm_min, pst->tm_sec);
 #endif // _WIN32
 	strMsg += pszFaceTrackingMsg;
 	strMsg += strTime;

+ 185 - 673
Other/libfacecapture/libfacecapture.cpp

@@ -103,7 +103,7 @@ struct CCustomerInfo
 	DistanceEnum eDistance;				//0不确定,1操作距离,2近端,3远端
 	PoseEnum ePose;						//0不确定,1-站立,2-坐立
 	CCover  stCustomerCover;			//覆盖属性
-	BrightnessEnum	 eBrightness;		//人脸亮度
+	BrightnessEnum	eBrightness;		//人脸亮度
 	SexEnum eSex;						//0不知道,1女,2男
 	YoungOldEnum eYoungOld;				//0不知道,1小孩,2年轻人,3中年人,4老人
 	HeightEnunm eHeight;				//0不知道,1矮,2中等,3高
@@ -176,8 +176,8 @@ public:
 		m_bLightChange = false;
 		m_nCameraState = 0;
 		m_nLastBuf = 0;
-		m_nCapFaceNum = 0;
-		m_bCapFaceCompleted = false;
+		//m_nCapFaceNum = 0;
+		//m_bCapFaceCompleted = false;
 		m_eMonitorState = NoBody;
 
 		memset(m_envminqueuename, 0, MAX_PATH);
@@ -231,11 +231,11 @@ public:
 
 		//初始化剪辑区域为屏幕中央区域
 		m_stAllFaceInfo.astFaceInfo[0].stRegion.stUpperBodyRect = cvRect(160, 60, 320, 240);
-		for (int j = 0; j < 3; j++) {
-			memset(&m_stCapFace[j], 0, sizeof(CLocalFaceInfo));
-		}
+		//for (int j = 0; j < 3; j++) {
+		//	memset(&m_stCapFace[j], 0, sizeof(CLocalFaceInfo));
+		//}
 
-		memset(m_SaveImgName, 0, MAX_PATH);
+		//memset(m_SaveImgName, 0, MAX_PATH);
 		memset(&m_stObjTrackRslt, 0, sizeof(CMotionTrackRslt));
 		memset(&m_stBrightAdjParam, 0, sizeof(CBrightAdjParam));
 
@@ -398,19 +398,19 @@ private:
 #endif
 	
 	bool m_bStopVieoMonitor;
-	Clibvideoqueue*m_pEnvironMinVideoQueue;		//环境摄像头小分辨率视频队列
-	Clibvideoqueue*m_pEnvironMaxVideoQueue;		//环境摄像头大分辨率视频队列
-	Clibvideoqueue*m_pOperatorVideoQueue;		//操作摄像头视频队列
-
-	CLocalFaceInfo m_stCapFace[3];
-	int m_nCapFaceNum;
-	bool m_bCapFaceCompleted;
-	char m_SaveImgName[MAX_PATH];
+	Clibvideoqueue* m_pEnvironMinVideoQueue;		//环境摄像头小分辨率视频队列
+	Clibvideoqueue* m_pEnvironMaxVideoQueue;		//环境摄像头大分辨率视频队列
+	Clibvideoqueue* m_pOperatorVideoQueue;		//操作摄像头视频队列
+
+	//CLocalFaceInfo m_stCapFace[3];
+	//int m_nCapFaceNum;
+	//bool m_bCapFaceCompleted;
+	//char m_SaveImgName[MAX_PATH];
 	CAllFaceInfo m_stAllFaceInfo;
 	CAllFaceInfo m_stFaceRstStorage;
 	CBrightAdjParam m_stBrightAdjParam;			//亮度调节参数
 	MonitorStateEnum m_eMonitorState;
-	CVideoMonitorEvent*m_pHostEvent;
+	CVideoMonitorEvent* m_pHostEvent;
 	CHostApi* m_pHostApi;
 	CameraEnum m_eCamera;
 
@@ -429,27 +429,27 @@ private:
 			return false;
 		}
 
-		FIGetDir(CASCADE_EYE,base_dir,dir);
+		FIGetDir(CASCADE_EYE, base_dir, dir);
 		m_pEyeCascade=(CvHaarClassifierCascade*)cvLoad(dir,NULL,NULL,NULL);
 		if (!m_pEyeCascade){
 			m_pHostApi->Debug(FACECAP_INFO, "加载眼睛分类器失败!");
 			return false;
 		}
 
-		FIGetDir(CASCADE_MOUTH,base_dir,dir);
+		FIGetDir(CASCADE_MOUTH, base_dir, dir);
 		m_pMouthCascade=(CvHaarClassifierCascade*)cvLoad(dir,NULL,NULL,NULL);
 		if (!m_pMouthCascade){
 			m_pHostApi->Debug(FACECAP_INFO, "加载嘴巴分类器失败!");
 			return false;
 		}
 
-		FIGetDir(CASCADE_NOSE,base_dir,dir);
+		FIGetDir(CASCADE_NOSE, base_dir, dir);
 		m_pNoseCascade=(CvHaarClassifierCascade*)cvLoad(dir,NULL,NULL,NULL);
-		if (!m_pMouthCascade)
-		{
+		if (!m_pMouthCascade){
 			m_pHostApi->Debug(FACECAP_INFO, "加载鼻子分类器失败!");
 			return false;
 		}
+
 		return true;
 	}
 
@@ -483,7 +483,7 @@ private:
 	}
 
 	//计算人脸所处的区域
-	FaceRegionEnum CalcFaceRegion(CvRect FaceRect,int nImgWidth,int nImgHeight)
+	FaceRegionEnum CalcFaceRegion(CvRect FaceRect, int nImgWidth, int nImgHeight)
 	{
 		//计算人脸的中心坐标
 		CvPoint FaceCenter;
@@ -608,7 +608,7 @@ private:
 
 	bool GetImage(CameraEnum eCamera)
 	{
-		m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d Enter GetImage", __FUNCTION__, __LINE__);
+		m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d Enter GetImage eCamera = %d.", __FUNCTION__, __LINE__, eCamera);
 		if (eCamera == EnvironCamera){
 			if (m_pEnvironMinVideoQueue == NULL){
 				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d Exit GetImage", __FUNCTION__, __LINE__);
@@ -1095,12 +1095,19 @@ private:
 		m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d FaceDetect", __FUNCTION__, __LINE__);
 
 		CCustomerInfo UserFaceTemp;
+		m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d FaceDetect", __FUNCTION__, __LINE__);
 		CCustomerInfo astFaceTemp;
+		m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d FaceDetect", __FUNCTION__, __LINE__);
 		memset(&astFaceTemp,0,sizeof(CCustomerInfo));
+		m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d FaceDetect", __FUNCTION__, __LINE__);
 		memset(&UserFaceTemp,0,sizeof(CCustomerInfo));
+		m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d FaceDetect", __FUNCTION__, __LINE__);
 		CvRect* pFaceRect = NULL;		//人脸矩形
+		m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d FaceDetect", __FUNCTION__, __LINE__);
 		cvResetImageROI(m_pProcessImg);
+		m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d FaceDetect", __FUNCTION__, __LINE__);
 		cvSetImageROI(m_pProcessImg,rect);
+		m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d FaceDetect", __FUNCTION__, __LINE__);
 		//内存初始化
 		if (pFaceStorage){
 			m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d FaceDetect", __FUNCTION__, __LINE__);
@@ -1137,7 +1144,7 @@ private:
 		for(int i=0;i<(pfaceSeq?pfaceSeq->total:0)&&(i<MAX_FACE_NUM);i++)
 		{
 			//获取脸部矩形
-			pFaceRect = (CvRect*)cvGetSeqElem(pfaceSeq,i);
+			pFaceRect = (CvRect*)cvGetSeqElem(pfaceSeq, i);
 			//如果是前端检测则需要特征检测,如果是坐席则不需检测
 			if (m_stFaceConfig.nServersType == 0)
 			{
@@ -1259,176 +1266,140 @@ private:
 		return true;
 	}
 
-	//人脸卡图
-	void CaptureOperatorFace(IplImage* img)
-	{
-		m_pHostApi->Debug(FACECAP_DEBUG, "Enter CaptureOperatorFace");
-		//判断客户号,客户ID是否更换
-		if(m_pHostApi->IsCustomerChange())
-		{
-			if (!m_bCapFaceCompleted && (strcmp(m_SaveImgName,"")!=0))
-			{
-				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
-				SaveOperatorFace(m_SaveImgName);
-				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
-			}
-			else if (m_bCapFaceCompleted)
-			{
-				m_bCapFaceCompleted = false;
-				m_nCapFaceNum = 0;
-			}
-			m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
-			m_pHostApi->GetFaceImgName(m_SaveImgName, MAX_PATH);
-			m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
-		}
-
-		if (m_bCapFaceCompleted)
-		{
-			m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d Exit CaptureOperatorFace", __FUNCTION__, __LINE__);
-			return;
-		}
-
-		if (m_stAllFaceInfo.nTatolFaceNum >0)
-		{
-			m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
-			bool bRst = GetImage(m_stAllFaceInfo.astFaceInfo[0].eCamera);
-			m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
-			if (!bRst)
-			{
-				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d Exit CaptureOperatorFace", __FUNCTION__, __LINE__);
-				return;
-			}
-			m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
-			//往3个人脸图像中填数据
-			if (m_nCapFaceNum < 3)
-			{
-				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
-				m_stCapFace[m_nCapFaceNum].stFaceCover.bShowEyes = m_stAllFaceInfo.astFaceInfo[0].stCustomerCover.bShowEyes; 
-				m_stCapFace[m_nCapFaceNum].stFaceCover.bShowMouth = m_stAllFaceInfo.astFaceInfo[0].stCustomerCover.bShowMouth; 
-				m_stCapFace[m_nCapFaceNum].stFaceCover.bShowNose = m_stAllFaceInfo.astFaceInfo[0].stCustomerCover.bShowNose; 
-				m_stCapFace[m_nCapFaceNum].stCustomerRegion.stFaceRect = m_stAllFaceInfo.astFaceInfo[0].stRegion.stFaceRect;
-				m_stCapFace[m_nCapFaceNum].stCustomerRegion.stUpperBodyRect = m_stAllFaceInfo.astFaceInfo[0].stRegion.stUpperBodyRect;
-				
-				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
-				cvResetImageROI(img);
-				
-				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
-				cvSetImageROI(img,m_stCapFace[m_nCapFaceNum].stCustomerRegion.stUpperBodyRect);
-				
-				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
-				m_stCapFace[m_nCapFaceNum].img = cvCreateImage(cvSize(m_stCapFace[m_nCapFaceNum].stCustomerRegion.stUpperBodyRect.width,
-					m_stCapFace[m_nCapFaceNum].stCustomerRegion.stUpperBodyRect.height),IPL_DEPTH_8U,3);
-				
-				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d img = 0x%08x, m_nCapFaceNum = %d, m_stCapFace[m_nCapFaceNum].img =  0x%08x.", __FUNCTION__, __LINE__, img, m_nCapFaceNum, m_stCapFace[m_nCapFaceNum].img);
-				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d img->depth = %d, img->imageSize = %d, m_stCapFace[m_nCapFaceNum].img->depth = %d, m_stCapFace[m_nCapFaceNum].img->imageSize = %d.", __FUNCTION__, __LINE__, img->depth, img->imageSize, m_stCapFace[m_nCapFaceNum].img->depth, m_stCapFace[m_nCapFaceNum].img->imageSize);
-				cvCopy(img, m_stCapFace[m_nCapFaceNum].img, NULL);
-				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
-
-				if(m_stBrightAdjParam.fHigh != 0.0)
-				{
-					m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
-					AdjustImgBrightness(m_stCapFace[m_nCapFaceNum].img->imageData,m_stCapFace[m_nCapFaceNum].stCustomerRegion.stUpperBodyRect.width,
-						m_stCapFace[m_nCapFaceNum].stCustomerRegion.stUpperBodyRect.height,m_stBrightAdjParam);
-				}
-				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
-				cvResetImageROI(img);
-				m_nCapFaceNum++;
-				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
-			} 
-			else    //如果有三张人脸,立即保存
-			{
-				//if (m_stAllFaceInfo.astFaceInfo[0].stCustomerCover.bShowEyes&&m_stAllFaceInfo.astFaceInfo[0].stCustomerCover.bShowMouth&&
-				//	m_stAllFaceInfo.astFaceInfo[0].stCustomerCover.bShowNose)
-				//{
-					//int num = 0;
-					//while (m_stCapFace[num].stFaceCover.bShowEyes&&m_stCapFace[num].stFaceCover.bShowMouth&&
-					//	m_stCapFace[num].stFaceCover.bShowNose&&(num<3))
-					//{
-					//	num++;
-					//}
-					////如果3个人脸特征不完整,则往3个人脸图像中填替换数据
-					//if (num<3)
-					//{
-					//	m_stCapFace[num].stFaceCover.bShowEyes = m_stAllFaceInfo.astFaceInfo[0].stCustomerCover.bShowEyes; 
-					//	m_stCapFace[num].stFaceCover.bShowMouth = m_stAllFaceInfo.astFaceInfo[0].stCustomerCover.bShowMouth; 
-					//	m_stCapFace[num].stFaceCover.bShowNose = m_stAllFaceInfo.astFaceInfo[0].stCustomerCover.bShowNose; 
-					//	m_stCapFace[num].stCustomerRegion.stFaceRect = m_stAllFaceInfo.astFaceInfo[0].stRegion.stFaceRect;
-					//	m_stCapFace[num].stCustomerRegion.stUpperBodyRect = m_stAllFaceInfo.astFaceInfo[0].stRegion.stUpperBodyRect;
-					//	cvResetImageROI(img);
-					//	cvSetImageROI(img,m_stCapFace[num].stCustomerRegion.stUpperBodyRect);
-					//	if (m_stCapFace[num].img)
-					//	{
-					//		cvReleaseImage(&m_stCapFace[num].img);
-					//		m_stCapFace[num].img = NULL;
-					//	}
-					//	m_stCapFace[num].img = cvCreateImage(cvSize(m_stCapFace[num].stCustomerRegion.stUpperBodyRect.width,
-					//		m_stCapFace[num].stCustomerRegion.stUpperBodyRect.height),IPL_DEPTH_8U,3);
-					//	cvCopy(img,m_stCapFace[num].img,NULL);
-					//	if(m_stBrightAdjParam.fHigh != 0.0)
-					//	{
-					//		AdjustImgBrightness(m_stCapFace[num].img->imageData,m_stCapFace[num].stCustomerRegion.stUpperBodyRect.width,
-					//			m_stCapFace[num].stCustomerRegion.stUpperBodyRect.height,m_stBrightAdjParam,NULL);
-					//	}
-					//	cvResetImageROI(img);
-					//}
-					//else//如果3个人脸特征完整,则保存照片
-					//{
-							//写文件
-							if (strcmp(m_SaveImgName,"")==0)
-							{
-								m_pHostApi->GetFaceImgName(m_SaveImgName, MAX_PATH);
-							}
-							else
-							{
-								SaveOperatorFace(m_SaveImgName);
-								m_bCapFaceCompleted = true;
-								m_nCapFaceNum = 0;
-							}
-					//}
-				//}
-			}
-		}
-		else
-		{
-			m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d Exit CaptureOperatorFace", __FUNCTION__, __LINE__);
-			return;
-		}
-		m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d Exit CaptureOperatorFace", __FUNCTION__, __LINE__);
-	}
-
-	//保存人脸图像
-	bool SaveOperatorFace(char*filename)
-	{
-		m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
-		for(int i=0;i<3;i++)
-		{
-			if(m_stCapFace[i].img != NULL)
-			{
-				//设置文件名
-				char strFileName[MAX_PATH] = {0};
-				memset(strFileName, 0, MAX_PATH);
-#ifdef _WIN32
-				_snprintf(strFileName, MAX_PATH, "%s_%d.jpg", filename, i);
-#else
-				snprintf(strFileName, MAX_PATH, "%s_%d.jpg", filename, i);
-#endif // _WIN32
-				cvSaveImage(strFileName,m_stCapFace[i].img);
-			}
-		}
-		m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
-
-		for(int j = 0; j < 3; j++)
-		{
-			if(m_stCapFace[j].img != NULL)
-			{
-				cvReleaseImage(&m_stCapFace[j].img);
-			}
-		}
-		m_nCapFaceNum = 0;
-		m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
-
-		return true;
-	}
+//	//人脸卡图
+//	void CaptureOperatorFace(IplImage* img)
+//	{
+//		m_pHostApi->Debug(FACECAP_DEBUG, "Enter CaptureOperatorFace");
+//		//判断客户号,客户ID是否更换
+//		if(m_pHostApi->IsCustomerChange())
+//		{
+//			if (!m_bCapFaceCompleted && (strcmp(m_SaveImgName,"") != 0))
+//			{
+//				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
+//				SaveOperatorFace(m_SaveImgName);
+//				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
+//			}
+//			else if (m_bCapFaceCompleted)
+//			{
+//				m_bCapFaceCompleted = false;
+//				m_nCapFaceNum = 0;
+//			}
+//			m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
+//			m_pHostApi->GetFaceImgName(m_SaveImgName, MAX_PATH);
+//			m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
+//		}
+//
+//		if (m_bCapFaceCompleted)
+//		{
+//			m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d Exit CaptureOperatorFace", __FUNCTION__, __LINE__);
+//			return;
+//		}
+//
+//		if (m_stAllFaceInfo.nTatolFaceNum > 0)
+//		{
+//			m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
+//			bool bRst = GetImage(m_stAllFaceInfo.astFaceInfo[0].eCamera);
+//			m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
+//			if (!bRst){
+//				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d Exit CaptureOperatorFace", __FUNCTION__, __LINE__);
+//				return;
+//			}
+//			m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
+//			//往3个人脸图像中填数据
+//			if (m_nCapFaceNum < 3)
+//			{
+//				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
+//				m_stCapFace[m_nCapFaceNum].stFaceCover.bShowEyes = m_stAllFaceInfo.astFaceInfo[0].stCustomerCover.bShowEyes; 
+//				m_stCapFace[m_nCapFaceNum].stFaceCover.bShowMouth = m_stAllFaceInfo.astFaceInfo[0].stCustomerCover.bShowMouth; 
+//				m_stCapFace[m_nCapFaceNum].stFaceCover.bShowNose = m_stAllFaceInfo.astFaceInfo[0].stCustomerCover.bShowNose; 
+//				m_stCapFace[m_nCapFaceNum].stCustomerRegion.stFaceRect = m_stAllFaceInfo.astFaceInfo[0].stRegion.stFaceRect;
+//				m_stCapFace[m_nCapFaceNum].stCustomerRegion.stUpperBodyRect = m_stAllFaceInfo.astFaceInfo[0].stRegion.stUpperBodyRect;
+//				
+//				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
+//				cvResetImageROI(img);
+//				
+//				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d img->width = %d, img->height = %d.", __FUNCTION__, __LINE__, img->width, img->height);
+//				CvRect roirect = m_stCapFace[m_nCapFaceNum].stCustomerRegion.stUpperBodyRect;
+//				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d roirect.x = %d, roirect.y = %d, roirect.width = %d, roirect.height = %d.", __FUNCTION__, __LINE__, roirect.x, roirect.y, roirect.width, roirect.height);
+//				cvSetImageROI(img, m_stCapFace[m_nCapFaceNum].stCustomerRegion.stUpperBodyRect);
+//				
+//				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
+//				CvRect roirect1 = m_stCapFace[m_nCapFaceNum].stCustomerRegion.stUpperBodyRect;
+//				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d roirect1.x = %d, roirect1.y = %d, roirect1.width = %d, roirect1.height = %d.", __FUNCTION__, __LINE__, roirect1.x, roirect1.y, roirect1.width, roirect1.height);
+//
+//				m_stCapFace[m_nCapFaceNum].img = cvCreateImage(cvSize(m_stCapFace[m_nCapFaceNum].stCustomerRegion.stUpperBodyRect.width,
+//					m_stCapFace[m_nCapFaceNum].stCustomerRegion.stUpperBodyRect.height),IPL_DEPTH_8U,3);
+//				
+//				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d img = 0x%08x, m_nCapFaceNum = %d, m_stCapFace[m_nCapFaceNum].img =  0x%08x.", __FUNCTION__, __LINE__, img, m_nCapFaceNum, m_stCapFace[m_nCapFaceNum].img);
+//				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d m_stCapFace[m_nCapFaceNum].img->width = %d, m_stCapFace[m_nCapFaceNum].img->height = %d, m_stCapFace[m_nCapFaceNum].img->depth = %d, m_stCapFace[m_nCapFaceNum].img->widthStep = %d.", __FUNCTION__, __LINE__, m_stCapFace[m_nCapFaceNum].img->width, m_stCapFace[m_nCapFaceNum].img->height, m_stCapFace[m_nCapFaceNum].img->depth, m_stCapFace[m_nCapFaceNum].img->widthStep);
+//				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d img->depth = %d, img->imageSize = %d, m_stCapFace[m_nCapFaceNum].img->depth = %d, m_stCapFace[m_nCapFaceNum].img->imageSize = %d.", __FUNCTION__, __LINE__, img->depth, img->imageSize, m_stCapFace[m_nCapFaceNum].img->depth, m_stCapFace[m_nCapFaceNum].img->imageSize);
+//				cvCopy(img, m_stCapFace[m_nCapFaceNum].img, NULL);
+//				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
+//
+//				if(m_stBrightAdjParam.fHigh != 0.0)
+//				{
+//					m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
+//					AdjustImgBrightness(m_stCapFace[m_nCapFaceNum].img->imageData,m_stCapFace[m_nCapFaceNum].stCustomerRegion.stUpperBodyRect.width,
+//						m_stCapFace[m_nCapFaceNum].stCustomerRegion.stUpperBodyRect.height,m_stBrightAdjParam);
+//				}
+//				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
+//				cvResetImageROI(img);
+//				m_nCapFaceNum++;
+//				m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
+//			} 
+//			else    //如果有三张人脸,立即保存
+//			{
+//				//写文件
+//				if (strcmp(m_SaveImgName,"")==0){
+//					m_pHostApi->GetFaceImgName(m_SaveImgName, MAX_PATH);
+//				}
+//				else{
+//					SaveOperatorFace(m_SaveImgName);
+//					m_bCapFaceCompleted = true;
+//					m_nCapFaceNum = 0;
+//				}
+//			}
+//		}
+//		else
+//		{
+//			m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d Exit CaptureOperatorFace", __FUNCTION__, __LINE__);
+//			return;
+//		}
+//		m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d Exit CaptureOperatorFace", __FUNCTION__, __LINE__);
+//	}
+//
+//	//保存人脸图像
+//	bool SaveOperatorFace(char*filename)
+//	{
+//		m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
+//		for(int i=0;i<3;i++)
+//		{
+//			if(m_stCapFace[i].img != NULL)
+//			{
+//				//设置文件名
+//				char strFileName[MAX_PATH] = {0};
+//#ifdef _WIN32
+//				_snprintf(strFileName, MAX_PATH, "%s_%d.jpg", filename, i);
+//#else
+//				snprintf(strFileName, MAX_PATH, "%s_%d.jpg", filename, i);
+//#endif // _WIN32
+//				cvSaveImage(strFileName,m_stCapFace[i].img);
+//			}
+//		}
+//		m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
+//
+//		for(int j = 0; j < 3; j++)
+//		{
+//			if(m_stCapFace[j].img != NULL)
+//			{
+//				cvReleaseImage(&m_stCapFace[j].img);
+//			}
+//		}
+//		m_nCapFaceNum = 0;
+//		m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d", __FUNCTION__, __LINE__);
+//
+//		return true;
+//	}
 
 	//调整图像亮度
 	bool AdjustImgBrightness(char* src,int width,int height,CBrightAdjParam stAdjParam,int ImgColorType = RGB_IMG)
@@ -1669,6 +1640,10 @@ private:
 				nFaceNum++;
 				//获取脸部矩形
 				CvRect* pFaceRect = (CvRect*)cvGetSeqElem(pfaceSeq, i);
+				m_pHostApi->Debug(FACECAP_DEBUG, "第%d个人脸位置为(%d,%d,%d,%d).", i, pFaceRect->x, pFaceRect->y, pFaceRect->width, pFaceRect->height);
+				m_pHostApi->Debug(FACECAP_DEBUG, "m_nImgHeight/m_stFaceConfig.fCloseFaceSize = %d.", (int)(m_nImgHeight / m_stFaceConfig.fCloseFaceSize));
+				m_pHostApi->Debug(FACECAP_DEBUG, "m_nImgHeight/m_stFaceConfig.fFarFaceSize = %d.", (int)(m_nImgHeight / m_stFaceConfig.fFarFaceSize));
+				m_pHostApi->Debug(FACECAP_DEBUG, "m_nImgHeight/m_stFaceConfig.fOperateFaceSize = %d.", (int)(m_nImgHeight / m_stFaceConfig.fOperateFaceSize));
 				//如果发现有人脸到达靠近区域,置有人靠近状态
 				if((pFaceRect->height >= (int)(m_nImgHeight/m_stFaceConfig.fCloseFaceSize))&&(pFaceRect->height <= (int)(m_nImgHeight/m_stFaceConfig.fOperateFaceSize)))
 				{
@@ -1716,6 +1691,7 @@ private:
 		}
 		else {
 			m_pHostApi->Debug(FACECAP_DEBUG, "未检测到人脸");
+			m_pHostEvent->GenerateMonitorEvent(video_monitor_event_type::NoDetectBody);	//未检测到人脸
 		}
 		
 		if (pfaceSeq != NULL)
@@ -1738,7 +1714,7 @@ private:
 	}
 
 	//运动检测
-	bool MotionTrack(CameraEnum eCamera,int diff_threshold = 10)
+	bool MotionTrack(CameraEnum eCamera, int diff_threshold = 10)
 	{
 		if (!GetImage(eCamera))
 		{
@@ -2048,32 +2024,6 @@ private:
 		WriteAllFaceInfo(m_stAllFaceInfo);
 	}
 
-//	void FSleep(int ims)
-//	{
-//#ifdef _WIN32
-//		DWORD dwRet = WaitForSingleObject(m_hStopEventWait, ims);
-//		if (dwRet == WAIT_OBJECT_0)
-//		{
-//			m_pHostApi->Debug(FACECAP_DEBUG, "throw std::exception()");
-//			throw std::exception();
-//		}
-//#else
-//		struct timespec ts;
-//		clock_gettime(CLOCK_REALTIME, &ts);
-//		long unsec = ts.tv_nsec + (1000*1000*ims);
-//		ts.tv_sec += (unsec/1000000000);
-//		ts.tv_nsec = (unsec % 1000000000);
-//		if (-1 == sem_timedwait(&m_semt, &ts)) {
-//			if (ETIMEDOUT == errno) {
-//				
-//			}
-//		}
-//		else {
-//			throw std::exception();
-//		}
-//#endif // _WIN32
-//	}
-
 	bool RvcTimeout(int ims)
 	{
 		bool btimeout = true;
@@ -2156,444 +2106,6 @@ private:
 		return eCamera;
 	}
 
-	//int VideoMonitor()
-	//{
-	//	bool bRst = false;
-	//	uint32_t nSearchFailNum = 0;   //搜索人脸失败次数
-	//	uint32_t nDetectFailNum = 0;   //检测人脸失败的次数
-	//	uint32_t nBreakDownNum = 0;
-	//	uint32_t nMotionTrackNum = 0;
-	//	//select camera
-	//	if (m_pOperatorVideoQueue != NULL)
-	//	{
-	//		m_eCamera = (CameraEnum)m_stFaceConfig.nPrimCamera;
-	//	}
-	//	else
-	//	{
-	//		if ((m_nCameraState == 0) || (m_nCameraState == 2))
-	//		{
-	//			m_eCamera = EnvironCamera;
-	//		}
-	//		else if (m_nCameraState == 1)
-	//		{
-	//			m_eCamera = OperatorCamera;
-	//		}
-	//		else if (m_nCameraState == 3)
-	//		{
-	//			m_eCamera = ErrorCamera;
-	//		}
-	//	}
-
-	//	while (!m_bStopVieoMonitor)
-	//	{
-	//		try
-	//		{
-	//			//如果摄像头没启动或故障,停止扫描,休眠5s
-	//			if (m_nCameraState == 3)
-	//			{
-	//				FSleep(2000);
-	//				m_pHostApi->Debug(FACECAP_INFO, "camera stop or all camera error!");
-	//				continue;
-	//			}
-	//			//灯光变化时,清空历史记录,防止误判
-	//			if (m_bLightChange)
-	//			{
-	//				ReleaseMotionTrackRst();
-	//				nMotionTrackNum = 0;
-	//				m_bLightChange = false;
-	//			}
-	//			//if no people,start motion tracker
-	//			if (NoBody == m_eMonitorState)
-	//			{
-	//				m_pHostApi->Debug(FACECAP_DEBUG, "NoBody");
-	//				////if no people,start motion tracker
-	//				//bRst =  MotionTrack(m_eCamera,m_stFaceConfig.nThresholdNum);	
-	//				//if (!bRst)
-	//				//{
-	//				//	//RecordError("Search motion obj Fail");
-	//				//	nMotionTrackNum++;
-	//				//	FSleep(m_stFaceConfig.nSleepShort);
-	//				//	if (nMotionTrackNum >= 4)
-	//				//	{
-	//				//		(m_eCamera==EnvironCamera)?(m_eCamera=OperatorCamera):(m_eCamera=EnvironCamera);
-	//				//		ReleaseMotionTrackRst();
-	//				//		nMotionTrackNum=0;
-	//				//	}
-	//				//	//SetUpperbodyToCenter(m_eCamera);
-	//				//	continue;
-	//				//}
-	//				//else
-	//				//{
-	//				//	if (!m_bLightChange&&(m_nCameraState != 3))
-	//				//	{
-	//				//		m_pHostEvent->GenerateAppearEvent();	//产生有人出现事件
-	//				//		m_pHostApi->Debug("运动跟踪,有人出现!");
-	//				//		SetUpperbodyToCenter(m_eCamera);
-	//				//		nMotionTrackNum = 0;
-	//				//	}
-	//				//}
-	//				////search face from motion tracker result
-	//				//int size = (int)((m_nImgHeight>m_nImgWidth)?m_nImgHeight:m_nImgWidth)/m_stFaceConfig.fSearchFaceSize;
-	//				//bRst = FaceSearch(m_stObjTrackRslt,size);
-	//				//if(!bRst)
-	//				//{
-	//				//	//RecordError("Search face from motion obj Fail");
-	//				//	(m_eCamera==EnvironCamera)?(m_eCamera=OperatorCamera):(m_eCamera=EnvironCamera);
-	//				//	bRst = GetImage(m_eCamera);
-	//				//	if (bRst)
-	//				//	{
-	//				//		int size = (int)m_nImgHeight/m_stFaceConfig.fSearchFaceSize;
-	//				//		bRst = FaceSearch(size);
-	//				//		if (!bRst)
-	//				//		{
-	//				//			//RecordError("Far distance,  search Face Fail");
-	//				//			SetUpperbodyToCenter();
-	//				//			FSleep(m_stFaceConfig.nSleepMiddle);
-	//				//			continue;
-	//				//		}
-	//				//		else
-	//				//		{
-	//				//			WriteAllFaceInfo(m_stAllFaceInfo);
-	//				//			FSleep(m_stFaceConfig.nSleepShort); 
-	//				//			continue;
-	//				//		}
-	//				//	}
-	//				//} 
-	//				//else
-	//				//{
-	//				//	//RecordError("Search face from motion obj Success");
-	//				//	WriteAllFaceInfo(m_stAllFaceInfo);
-	//				//	continue;
-	//				//}
-	//				bRst = GetImage(m_eCamera);
-	//				if (bRst)
-	//				{
-	//					int size = (int)m_nImgHeight / m_stFaceConfig.fSearchFaceSize;
-	//					bRst = FaceSearch(size);
-	//					if (!bRst)
-	//					{
-	//						SetUpperbodyToCenter();
-	//						FSleep(m_stFaceConfig.nSleepLong);
-	//						continue;
-	//					}
-	//					else
-	//					{
-	//						WriteAllFaceInfo(m_stAllFaceInfo);
-	//						FSleep(m_stFaceConfig.nSleepMiddle);
-	//						continue;
-	//					}
-	//				}
-	//				else
-	//				{
-	//					FSleep(m_stFaceConfig.nSleepMiddle);
-	//				}
-	//			}
-	//			else if (SomebodyFar == m_eMonitorState) //if somebody space 2.5m
-	//			{
-	//				m_pHostApi->Debug(FACECAP_DEBUG, "SomebodyFar");
-	//				//RecordError("Enter far distance search Face ");
-	//				bRst = GetImage(m_eCamera);
-	//				if (bRst)
-	//				{
-	//					int size = (int)m_nImgHeight / m_stFaceConfig.fSearchFaceSize;
-	//					bRst = FaceSearch(size);
-	//					if (!bRst)
-	//					{
-	//						//RecordError("Far distance,  search Face Fail");
-	//						SetUpperbodyToCenter();
-	//						FSleep(m_stFaceConfig.nSleepMiddle);
-	//						continue;
-	//					}
-	//					else
-	//					{
-	//						if (m_eMonitorState <= SomebodyFar)
-	//						{
-	//							//RecordError("Far distance, search Face Success");
-	//							WriteAllFaceInfo(m_stAllFaceInfo);
-	//							FSleep(m_stFaceConfig.nSleepShort);
-	//						}
-	//						continue;
-	//					}
-	//				}
-	//				else
-	//				{
-	//					FSleep(m_stFaceConfig.nSleepMiddle);
-	//				}
-	//			}
-	//			else if (SomebodyClose == m_eMonitorState) //close distance,1.5m
-	//			{
-	//				m_pHostApi->Debug(FACECAP_DEBUG, "SomebodyClose");
-	//				//RecordError("close distance,search Face by operatorCamera");
-	//				bRst = FaceDetect(m_eCamera);
-	//				if (!bRst)
-	//				{
-	//					//RecordError("Close distance,EnvironCamera Search face Fail");
-	//					//dual camera mod
-	//					if (m_pOperatorVideoQueue != NULL)
-	//					{
-	//						//RecordError("Close distance,search Face by operatorCamera");
-	//						(m_eCamera == EnvironCamera) ? (m_eCamera = OperatorCamera) : (m_eCamera = EnvironCamera);
-	//						bRst = FaceDetect(m_eCamera);
-	//						if (!bRst)
-	//						{
-	//							//RecordError("Close distance,operatorCamera Search face Fail");
-	//							nSearchFailNum++;
-	//							if (nSearchFailNum > 2)   //if search face fail,return motiontracker
-	//							{
-	//								SetUpperbodyToCenter();
-	//								m_eMonitorState = NoBody;
-	//								m_pHostEvent->GenerateMonitorEvent(Leave);
-	//								m_pHostApi->Debug(FACECAP_DEBUG, "客户离开!");
-	//								nSearchFailNum = 0;
-	//								FSleep(m_stFaceConfig.nSleepLong);
-	//							}
-	//							else
-	//							{
-	//								FSleep(m_stFaceConfig.nSleepMiddle);
-	//							}
-	//							continue;
-	//						}
-	//						else
-	//						{
-	//							//RecordError("Close distance,operatorCamera Search face Success");
-	//							nSearchFailNum = 0;
-	//							VideoMonitorThreadNextStep();
-	//							WriteAllFaceInfo(m_stAllFaceInfo);
-	//							FSleep(m_stFaceConfig.nSleepShort);
-	//							continue;
-	//						}
-	//					}
-	//					else  //single camera mod
-	//					{
-	//						nSearchFailNum++;
-	//						if (nSearchFailNum > 2)   //if search face fail,return motiontracker
-	//						{
-	//							SetUpperbodyToCenter();
-	//							m_eMonitorState = NoBody;
-	//							m_pHostEvent->GenerateMonitorEvent(Leave);
-	//							m_pHostApi->Debug(FACECAP_DEBUG, "客户离开!");
-	//							nSearchFailNum = 0;
-	//							FSleep(m_stFaceConfig.nSleepLong);
-	//						}
-	//						else
-	//						{
-	//							FSleep(m_stFaceConfig.nSleepMiddle);
-	//						}
-	//						continue;
-	//					}
-	//				}
-	//				else
-	//				{
-	//					//if curcamera search face success,judge which camera result is the best
-	//					//RecordError("Close distance,EnvironCamera Search face Success");
-	//					if ((m_pOperatorVideoQueue != NULL) && (m_pEnvironMinVideoQueue != NULL))
-	//					{
-	//						(m_eCamera == EnvironCamera) ? (m_eCamera = OperatorCamera) : (m_eCamera = EnvironCamera);
-	//						CAllFaceInfo stFaceInfoTmp = m_stAllFaceInfo;
-	//						if (FaceDetect(m_eCamera))
-	//						{
-	//							int CurFaceArea = m_stAllFaceInfo.astFaceInfo[0].stRegion.stFaceRect.width *
-	//								m_stAllFaceInfo.astFaceInfo[0].stRegion.stFaceRect.height;
-	//							int FrontFaceArea = stFaceInfoTmp.astFaceInfo[0].stRegion.stFaceRect.width *
-	//								stFaceInfoTmp.astFaceInfo[0].stRegion.stFaceRect.height;
-	//							//if cur face area less than front face,select front Face
-	//							if (FrontFaceArea > CurFaceArea)
-	//							{
-	//								(m_eCamera == EnvironCamera) ? (m_eCamera = OperatorCamera) : (m_eCamera = EnvironCamera);
-	//								m_stAllFaceInfo = stFaceInfoTmp;
-	//							}
-	//						}
-	//						else
-	//						{
-	//							(m_eCamera == EnvironCamera) ? (m_eCamera = OperatorCamera) : (m_eCamera = EnvironCamera);
-	//							m_stAllFaceInfo = stFaceInfoTmp;
-	//						}
-	//					}
-	//					nSearchFailNum = 0;
-	//					VideoMonitorThreadNextStep();
-	//					WriteAllFaceInfo(m_stAllFaceInfo);
-	//					FSleep(m_stFaceConfig.nSleepShort);
-	//					continue;
-	//				}
-	//			}
-	//			else if (SomebodyOperate == m_eMonitorState)	//当有人进入操作距离时
-	//			{
-	//				m_pHostApi->Debug(FACECAP_DEBUG, "SomebodyOperate");
-	//				//如果是双相机模式
-	//				if (m_pOperatorVideoQueue != NULL)
-	//				{
-	//					m_eCamera = m_stAllFaceInfo.astFaceInfo[0].eCamera;
-	//					//先搜索上次搜索到人脸的区域
-	//					if (m_stAllFaceInfo.nTatolFaceNum > 0)
-	//					{
-	//						//RecordError("Operator distance,CurCamera search last face Region");
-	//						bRst = FaceDetect(m_eCamera, m_stAllFaceInfo.astFaceInfo[0].stRegion.stUpperBodyRect);
-	//					}
-	//					else
-	//					{
-	//						bRst = false;
-	//					}
-	//					if (!bRst)
-	//					{
-	//						//RecordError("Operator distance,search Face by CurCamera ");
-	//						bRst = FaceDetect(m_eCamera);
-	//					}
-	//				}
-	//				else  //如果单相机模式
-	//				{
-	//					//m_eCamera = (CameraEnum)m_stFaceConfig.nPrimCamera;
-	//					//先搜索上次搜索到人脸的区域
-	//					if (m_stAllFaceInfo.nTatolFaceNum > 0)
-	//					{
-	//						//RecordError("Operator distance,EnvironCamera Search Last face Region");
-	//						bRst = FaceDetect(m_eCamera, m_stAllFaceInfo.astFaceInfo[0].stRegion.stUpperBodyRect);
-	//					}
-	//					else
-	//					{
-	//						bRst = false;
-	//					}
-	//					if (!bRst)
-	//					{
-	//						bRst = FaceDetect(m_eCamera);
-	//					}
-	//				}
-
-	//				if (bRst)  //如果在当前相机中找到人脸
-	//				{
-	//					nDetectFailNum = 0;
-
-	//					//如果是双相机模式,
-	//					if (m_pOperatorVideoQueue != NULL)
-	//					{
-	//						//找到人脸后,检测另一个相机中是否有更大的人脸
-	//						(m_eCamera == EnvironCamera) ? (m_eCamera = OperatorCamera) : (m_eCamera = EnvironCamera);
-	//						CAllFaceInfo stFaceInfoTmp = m_stAllFaceInfo;
-	//						if (FaceDetect(m_eCamera))
-	//						{
-	//							int CurFaceArea = m_stAllFaceInfo.astFaceInfo[0].stRegion.stFaceRect.width *
-	//								m_stAllFaceInfo.astFaceInfo[0].stRegion.stFaceRect.height;
-	//							int FrontFaceArea = stFaceInfoTmp.astFaceInfo[0].stRegion.stFaceRect.width *
-	//								stFaceInfoTmp.astFaceInfo[0].stRegion.stFaceRect.height;
-	//							//if cur face area less than front face,select front Face
-	//							if (FrontFaceArea > CurFaceArea)
-	//							{
-	//								(m_eCamera == EnvironCamera) ? (m_eCamera = OperatorCamera) : (m_eCamera = EnvironCamera);
-	//								m_stAllFaceInfo = stFaceInfoTmp;
-	//							}
-	//						}
-	//						else
-	//						{
-	//							(m_eCamera == EnvironCamera) ? (m_eCamera = OperatorCamera) : (m_eCamera = EnvironCamera);
-	//							m_stAllFaceInfo = stFaceInfoTmp;
-	//						}
-
-	//						//判断用户是否进入另外一个相机的视野,如果进入另一个相机的最佳视野
-	//						if ((m_pEnvironMinVideoQueue != NULL) && IsFacePosOverStep(m_eCamera, m_stAllFaceInfo.astFaceInfo[0].stRegion.stFaceRect))
-	//						{
-	//							stFaceInfoTmp = m_stAllFaceInfo;  //暂存当前结果
-	//							memset(&m_stAllFaceInfo, 0, sizeof(CAllFaceInfo));
-	//							(m_eCamera == OperatorCamera) ? (m_eCamera = EnvironCamera) : (m_eCamera = OperatorCamera);
-	//							//在另一个相机中重新搜索
-	//							//RecordError("Operator distance,Change camera to:%d search Face",(int)m_eCamera);
-	//							bRst = FaceDetect(m_eCamera);
-	//							if (!bRst)
-	//							{
-	//								(m_eCamera == EnvironCamera) ? (m_eCamera = OperatorCamera) : (m_eCamera = EnvironCamera);
-	//								m_stAllFaceInfo = stFaceInfoTmp;
-	//							}
-	//						}
-	//					}
-
-	//					VideoMonitorThreadNextStep();
-	//					//人脸卡图
-	//					if (m_stFaceConfig.nServersType == 0)
-	//					{
-	//						CaptureOperatorFace(m_pProcessImg);
-	//					}
-	//					WriteAllFaceInfo(m_stAllFaceInfo);
-	//					FSleep(m_stFaceConfig.nSleepLong);
-	//					continue;
-	//				}
-	//				else  //如果在当前相机中未找到用户
-	//				{
-	//					//如果双相机模式
-	//					if (m_pOperatorVideoQueue != NULL)
-	//					{
-	//						(m_eCamera == OperatorCamera) ? (m_eCamera = EnvironCamera) : (m_eCamera = OperatorCamera);
-	//						//RecordError("Operator distance,Change camera to:%d search Face",(int)m_eCamera);
-	//						bRst = FaceDetect(m_eCamera);
-	//						if (bRst)
-	//						{
-	//							nDetectFailNum = 0;
-	//							VideoMonitorThreadNextStep();
-	//							//人脸卡图
-	//							if (m_stFaceConfig.nServersType == 0)
-	//							{
-	//								CaptureOperatorFace(m_pProcessImg);
-	//							}
-	//							WriteAllFaceInfo(m_stAllFaceInfo);
-	//							//RecordError("Record Face info Success");
-	//							FSleep(m_stFaceConfig.nSleepLong);
-	//							continue;
-	//						}
-	//						else
-	//						{
-	//							nDetectFailNum++;
-	//							if (nDetectFailNum > 2)   //如果连续2次未找到人脸,回到有人靠近状态
-	//							{
-	//								m_eMonitorState = SomebodyClose;
-	//								m_stAllFaceInfo.astFaceInfo[0].eScene = UnLockScene;
-	//								m_pHostEvent->GenerateMonitorEvent(LoseFace);  //发送失去人脸事件
-	//								m_pHostApi->Debug(FACECAP_DEBUG, "人脸失去锁定!");
-	//								nDetectFailNum = 0;
-	//							}
-	//							FSleep(m_stFaceConfig.nSleepShort);
-	//							continue;
-	//						}
-	//					}
-	//					else  //如果单相机模式
-	//					{
-	//						nDetectFailNum++;
-	//						if (nDetectFailNum > 3)   //如果连续3次未找到人脸,回到有人靠近状态
-	//						{
-	//							m_eMonitorState = SomebodyClose;
-	//							m_stAllFaceInfo.astFaceInfo[0].eScene = UnLockScene;
-	//							m_pHostEvent->GenerateMonitorEvent(LoseFace);  //发送失去人脸事件
-	//							m_pHostApi->Debug(FACECAP_DEBUG, "人脸失去锁定!");
-	//							nDetectFailNum = 0;
-	//						}
-	//						FSleep(m_stFaceConfig.nSleepShort);
-	//						continue;
-	//					}
-	//				}
-	//			}
-	//		}
-	//		catch (...)
-	//		{
-	//			//清空存储区
-	//			if (pfaceSeq != NULL)
-	//			{
-	//				cvReleaseMemStorage(&pfaceSeq->storage);
-	//				pfaceSeq = NULL;
-	//			}
-	//			if (NULL != m_pProcessImg) {
-	//				cvResetImageROI(m_pProcessImg);
-	//			}
-
-	//			nBreakDownNum++;
-	//			if (nBreakDownNum == 5)
-	//			{
-	//				m_pHostEvent->GenerateMonitorEvent(FaceCaptureFC);   //发送人脸崩溃事件
-	//				m_pHostApi->Debug(FACECAP_INFO, "opencv library breakdown!");
-	//			}
-	//			Sleep(3 * m_stFaceConfig.nSleepShort);
-	//			m_pHostApi->Debug(FACECAP_DEBUG, "stop Video Monitor");
-	//		}
-	//	}
-	//	return 0;
-	//}
-
-
 	int VideoMonitor()
 	{
 		bool bRst = false;
@@ -2844,13 +2356,13 @@ private:
 						}
 
 						VideoMonitorThreadNextStep();
-						//人脸卡图
-						if (m_stFaceConfig.nServersType == 0)
-						{
-							m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d begin  CaptureOperatorFace", __FUNCTION__, __LINE__);
-							CaptureOperatorFace(m_pProcessImg);
-							m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d exit CaptureOperatorFace", __FUNCTION__, __LINE__);
-						}
+						////人脸卡图
+						//if (m_stFaceConfig.nServersType == 0)
+						//{
+						//	m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d begin  CaptureOperatorFace, m_pProcessImg->depth = %d, m_pProcessImg->width = %d, m_pProcessImg->height = %d, m_pProcessImg->widthStep = %d.", __FUNCTION__, __LINE__, m_pProcessImg->depth, m_pProcessImg->width, m_pProcessImg->height, m_pProcessImg->widthStep);
+						//	CaptureOperatorFace(m_pProcessImg);
+						//	m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d exit CaptureOperatorFace", __FUNCTION__, __LINE__);
+						//}
 						WriteAllFaceInfo(m_stAllFaceInfo);
 						iwaittime = m_stFaceConfig.nSleepLong;
 					}
@@ -2866,13 +2378,13 @@ private:
 							{
 								nDetectFailNum = 0;
 								VideoMonitorThreadNextStep();
-								//人脸卡图
-								if (m_stFaceConfig.nServersType == 0)
-								{
-									m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d begin CaptureOperatorFace", __FUNCTION__, __LINE__);
-									CaptureOperatorFace(m_pProcessImg);
-									m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d exit CaptureOperatorFace", __FUNCTION__, __LINE__);
-								}
+								////人脸卡图
+								//if (m_stFaceConfig.nServersType == 0)
+								//{
+								//	m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d begin CaptureOperatorFace", __FUNCTION__, __LINE__);
+								//	CaptureOperatorFace(m_pProcessImg);
+								//	m_pHostApi->Debug(FACECAP_DEBUG, "%s:%d exit CaptureOperatorFace", __FUNCTION__, __LINE__);
+								//}
 								WriteAllFaceInfo(m_stAllFaceInfo);
 								m_pHostApi->Debug(FACECAP_DEBUG, "Write Face info Success");
 								iwaittime = m_stFaceConfig.nSleepLong;

+ 2 - 3
Other/libfacecapture/libfacecapture.h

@@ -183,7 +183,8 @@ enum video_monitor_event_type {
 	CustomerChange,			//客户已经换人
 	CaptureFace,			//捕获脸部事件
 	LoseFace,				//失去脸部事件
-	FaceCaptureFC			//人脸识别崩溃
+	FaceCaptureFC,			//人脸识别崩溃
+	NoDetectBody			//未检测到人
 };
 
 class CVideoMonitorEvent
@@ -211,8 +212,6 @@ public:
 };
 
 
-#define  debugerror
-
 class Clibfacecapture_impl;    //桥接
 
 // 此类是从 libfacecapture.dll 导出的