Browse Source

Z991239-6004 #comment 脸部跟踪实体日志优化

80274480 7 months ago
parent
commit
67408efe16

+ 4 - 5
Module/mod_facetracking/mod_facetracking.cpp

@@ -327,7 +327,7 @@ public:
 		return bChange;
 	}
 
-	virtual void GetFaceImgName(char* FaceName, size_t uLen)
+	virtual void GetFaceImgName(char* FaceName, uint32_t uLen)
 	{
 		CSimpleStringA strPath;
 		ErrorCodeEnum Error = GetFunction()->GetPath("UploadPhoto", strPath);
@@ -399,7 +399,7 @@ public:
 		return Error == Error_Succeed;
 	}
 
-	virtual void Debug(const char *fmt, ...)
+	virtual void Debug(facecap_loglevel elevel, const char *fmt, ...)
 	{
 		va_list arg;
 		va_start(arg, fmt);
@@ -408,14 +408,13 @@ public:
 		if (n >= MAX_LOG_LEN) {
 			char* buf = (char*)malloc((size_t)(n + 1));
 			vsnprintf(buf, n + 1, fmt, arg);
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("%s", buf);
+			DbgWithLink((LOG_LEVEL_E)elevel, LOG_TYPE_SYSTEM)("%s", buf);
 			free(buf);
 		}
 		else{
 			char strlog[MAX_LOG_LEN] = {0};
 			vsnprintf(strlog, MAX_LOG_LEN, fmt, arg);
-
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("%s", strlog);
+			DbgWithLink((LOG_LEVEL_E)elevel, LOG_TYPE_SYSTEM)("%s", strlog);
 		}
 		va_end(arg);
 	}

File diff suppressed because it is too large
+ 175 - 168
Other/unix/libfacecapture/libfacecapture.cpp


+ 27 - 19
Other/unix/libfacecapture/libfacecapture.h

@@ -97,10 +97,10 @@ struct CCustomerPosition
 //脸部覆盖物
 struct  CCover
 {
-	BOOL	bClearFace;		//脸部是否可见
-	BOOL	bShowEyes;		//眼睛是否可见
-	BOOL	bShowNose;		//鼻子是否可见
-	BOOL	bShowMouth;		//嘴巴是否可见
+	bool	bClearFace;		//脸部是否可见
+	bool	bShowEyes;		//眼睛是否可见
+	bool	bShowNose;		//鼻子是否可见
+	bool	bShowMouth;		//嘴巴是否可见
 };
 
 //人脸亮度
@@ -124,8 +124,8 @@ struct CCustomerStatus
 enum SexEnum
 {
 	UncertainSex = 0,	//不知道
-	Women,				//女
-	Man					// 
+	Women,				//女
+	Man					//男
 };
 
 enum YoungOldEnum
@@ -147,9 +147,9 @@ enum HeightEnunm
 //客户交互属性
 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高
 };
 
 //监控模式
@@ -160,6 +160,14 @@ enum MonitorEnum
 	MotionTarckAndFaceRecog,		//运动跟踪+人脸识别
 };
 
+enum facecap_loglevel {
+	FACECAP_DEBUG = 0,
+	FACECAP_INFO = 1,
+	FACECAP_WARN = 2,
+	FACECAP_ERROR = 3,
+	FACECAP_FATAL = 4
+};
+
 struct __declspec(novtable) CVideoMonitorEvent
 {
 	virtual void GenerateCloseEvent() = 0;					//有人靠近 1.5M
@@ -185,10 +193,10 @@ struct CImageFrame
 struct __declspec(novtable) CHostApi 
 {
 	virtual unsigned __int64 GenerateUUID() = 0;
-	virtual void GetFaceImgName(char* FaceName, size_t uLen) = 0;
+	virtual void GetFaceImgName(char* FaceName, uint32_t uLen) = 0;
 	virtual bool IsCustomerChange() = 0;
 	virtual bool LoadConfig(CFaceCaptureConfig &config) = 0;
-	virtual void Debug(const char *fmt, ...) = 0;
+	virtual void Debug(facecap_loglevel elevel, const char *fmt, ...) = 0;
 };
 
 
@@ -205,31 +213,31 @@ public:
 	//OperateVideoName:操作摄像头共享视频队列的文件名
 	//OperateVideoName默认为Null时设备运行于单摄像头模式
 	//开始视频监控,pHost:事件,nMonitorFreq:监控频率,单位ms,MonitorType:监控类型,有三种模式可供选择
-	Clibfacecapture(bool *pResult, CHostApi *pHostAPI,CVideoMonitorEvent*pHost,LPCSTR EnvironMinVideoName,LPCSTR EnvironMaxVideoName = NULL,LPCSTR OperateVideoName=NULL,MonitorEnum eMonitorType=MotionTarckAndFaceDetect);
+	Clibfacecapture(bool *pResult, CHostApi *pHostAPI, CVideoMonitorEvent*pHost, const char* EnvironMinVideoName, const char* EnvironMaxVideoName = NULL, const char* OperateVideoName = NULL, MonitorEnum eMonitorType = MotionTarckAndFaceDetect);
 	~Clibfacecapture(void);
 
 	bool StartFaceCapture();
 	bool StopFaceCapture();
 
 	//快照
-	BOOL SnapShot(CImageFrame&img);
+	bool SnapShot(CImageFrame&img);
 	//有多少其他用户
-	BOOL GetCustomerNum(UINT&num);
+	bool GetCustomerNum(uint32_t &num);
 	//获取所有用户FACEID
-	BOOL GetTrackFace(__int64 *arrFaceIDs, int *size);
+	bool GetTrackFace(__int64 *arrFaceIDs, int *size);
 	//获取主用户的常规属性
-	BOOL GetMainCustomerStatus(__int64 &FaceID,CCustomerStatus &Property);
+	bool GetMainCustomerStatus(__int64 &FaceID, CCustomerStatus &Property);
 	//获取其他用户的常规属性
-	BOOL GetCustomerStatus(__int64 FaceID,CCustomerStatus &Property);
+	bool GetCustomerStatus(__int64 FaceID, CCustomerStatus &Property);
 	//获取主用户的交互属性
-	BOOL GetCustomerAppearance(__int64 FaceID,CCustomerAppearance &Property);
+	bool GetCustomerAppearance(__int64 FaceID, CCustomerAppearance &Property);
 	void SetLightChange();//灯光变化,此时算法要做处理防止误判
 	void SetCameraState(int nState);
 private:
 	Clibfacecapture_impl*m_pImpl;  
 };
 
-BOOL LIBFACECAPTURE_API  SnapShot(CImageFrame*img);
+bool LIBFACECAPTURE_API  SnapShot(CImageFrame*img);
 
 #endif	
 

+ 0 - 252
Other/unix/libfacecapture/logfile.cpp

@@ -1,252 +0,0 @@
-#include "stdafx.h"
-#include <strstream>
-#include "logfile.h"
-
-CLogFile::CLogFile()
-{
-/*
-** Open File
-*/
-	m_cOutFile = new ofstream("D:\\avirecordfile\\log.log", ios_base::out);	
-    if (!m_cOutFile->is_open())
-    {
-		MessageBox(NULL,"Unable to create log file","´íÎó", MB_OK|MB_ICONSTOP);        
-        delete m_cOutFile;
-        m_cOutFile = NULL;
-    }
-}
-
-CLogFile::CLogFile(char* tszFileName)
-{
-	m_cOutFile = new ofstream(tszFileName, ios_base::out);	
-    if (!m_cOutFile->is_open())
-    { 
-		MessageBox(NULL,"Unable to create log file","´íÎó", MB_OK|MB_ICONSTOP); 
-        delete m_cOutFile;
-        m_cOutFile = NULL;
-    }
-}
-
-CLogFile::~CLogFile()
-{
-/*
-** Close the file and do clean up
-*/
-    m_cOutFile->close();
-    delete m_cOutFile;
-    m_cOutFile = NULL;
-}
-
-void CLogFile::Output(const TCHAR *data)
-{
-	m_cOutFile->write(data,strlen(data));
-}
-
-void CLogFile::PrintCurTime()
-{
-    TCHAR dateString[52];
-    SYSTEMTIME cur;
-    GetSystemTime(&cur);
-
-    sprintf(dateString,"[%d-%d-%d,%d:%d:%d]  ", cur.wYear, cur.wMonth, 
-            cur.wDay, cur.wHour, cur.wMinute, cur.wSecond);
-
-    Output(dateString);
-}
-
-CLogFile& CLogFile::operator <<(unsigned int unVal)
-{
-    strstream tmp;
-    tmp << unVal;
-    tmp << '\0';
-
-    TCHAR* output = tmp.str();
-
-    Output(output);
-
-    tmp.freeze(false);
-	return *this;
-}
-
-CLogFile& CLogFile::operator <<(long lVal)
-{
-    strstream tmp;
-    tmp << lVal;
-    tmp << '\0';
-
-    TCHAR* output = tmp.str();
-
-    Output(output);
-
-    tmp.freeze(false);
-
-	return *this;
-}
-
-CLogFile& CLogFile::operator <<(const TCHAR* str)
-{
-    Output(str);
-	return *this;
-}
-
-CLogFile& CLogFile::operator <<(TCHAR	tch)
-{
-    TCHAR szCh[2];
-    szCh[0] = tch;
-    szCh[1] = '\0';
-    Output(szCh);
-    return *this;
-}
-
-CLogFile& CLogFile::operator <<(int nVal)
-{
-    strstream tmp;
-    tmp << nVal;
-    tmp << '\0';
-
-    TCHAR* output = tmp.str();
-
-    Output(output);
-
-    tmp.freeze(false);
-    return *this;
-}
-
-CLogFile& CLogFile::operator <<(unsigned long ulVal)
-{
-    strstream tmp;
-    tmp << ulVal;
-    tmp << '\0';
-
-    TCHAR* output = tmp.str();
-    Output(output);
-    tmp.freeze(false);
-	return *this;
-}
-
-CLogFile& CLogFile::operator <<(double dVal)
-{
-    strstream tmp;
-    tmp << dVal;
-    tmp << '\0';
-
-    TCHAR* output = tmp.str();
-    Output(output);
-    tmp.freeze(false);
-	return *this;
-}
-
-CLogFile& CLogFile::operator <<(unsigned __int64	unllVal)
-{
-	strstream tmp;
-	tmp << unllVal;
-	tmp << '\0';
-
-	TCHAR* output = tmp.str();
-	Output(output);
-	tmp.freeze(false);
-	return *this;
-}
-
-void CLogFile::LOGERROR(TCHAR* formatString, ...)
-{
-
-	/*
-	** Insert the current time..
-	*/
-	PrintCurTime();
-	/*
-	** Parse the format string and write to the file
-	*/
-	if ( formatString == NULL)
-	{
-        /*
-		** No point in continuiing
-		*/
-		return;
-	}
-		
-	va_list argList;
-	/*
-	** Set va_list to the beginning of optional arguments
-	*/
-	va_start(argList, formatString);
-	TCHAR* ptr = formatString;
-
-	while(*ptr != '\0')
-	{
-		TCHAR* str			= NULL;
-		int nInteger		= 0;
-		unsigned int unInt	= 0;
-		long lLong			= 0;
-		unsigned long ulLong= 0;
-		double	dDoub		= 0;
-		unsigned __int64 ullLong = 0;
-		if(*ptr == '%')
-		{
-			switch(*(ptr+1))
-			{
-			case 's':
-				str = va_arg(argList, TCHAR*);
-
-				if( NULL == str)
-					break;
-				*this << str;
-				ptr++;
-				break;
-
-			case 'd':
-				nInteger = va_arg(argList, int);
-				*this << nInteger;
-				ptr++;
-				break;
-
-			case 'u':
-				unInt = va_arg(argList, unsigned int);
-				*this << unInt;
-				ptr++;
-				break;
-				
-			case 'l':
-				ptr++;
-				if(*(ptr+1) == 'd')
-				{
-					lLong = va_arg(argList, long);
-					*this << lLong;
-					ptr++;
-				}
-				else if(*(ptr+1) == 'u')
-				{
-					ulLong = va_arg(argList, unsigned long);
-					*this << ulLong;
-					ptr++;
-				}
-				else if(*(ptr+1) == 'q')
-				{
-					ullLong = va_arg(argList, unsigned __int64);
-					*this << ullLong;
-					ptr++;
-				}
-				break;
-			case 'f':
-				dDoub = va_arg(argList, double);
-				*this << dDoub;
-				ptr++;
-				break;
-			default:
-				*this << *ptr;
-			}
-		} //  if(*ptr == '%')
-		else
-		{
-			*this << *ptr;
-		}
-		/*
-		** Increment pointer..
-		*/
-		ptr++;
-	}
-
-	*this << '\n';
-
-}

+ 0 - 43
Other/unix/libfacecapture/logfile.h

@@ -1,43 +0,0 @@
-
-#ifndef __LOGFILE__H__
-#define __LOGFILE__H__
-
-
-/*
-** Include fstream header
-*/
-#ifndef _FSTREAM_
-
-#include <fstream>
-using namespace std;
-
-#endif
-
-
-
-class CLogFile  
-{
-public:
-	void PrintCurTime();
-	CLogFile();
-	CLogFile(char* tszFileName);
-	~CLogFile();
-	CLogFile& operator <<(long				lVal);
-	CLogFile& operator <<(const		TCHAR*	str);
-	CLogFile& operator <<(TCHAR				tch);
-	CLogFile& operator <<(int				nVal);
-	CLogFile& operator <<(unsigned	long	ulVal);
-	CLogFile& operator <<(double			dVal);
-	CLogFile& operator <<(unsigned	int		unVal);
-	CLogFile& operator <<(unsigned	__int64	unllVal);
-	void	  LOGERROR(TCHAR* formatString, ...);
-
-
-private:
-	ofstream	*m_cOutFile;
-	void		Output( const TCHAR* data);
-
-
-};
-
-#endif	// __LOGFILE__H__

+ 65 - 66
Other/win/libfacecapture/libfacecapture.cpp

@@ -103,7 +103,7 @@ enum MonitorStateEnum
 class Clibfacecapture_impl
 {
 public:
-	Clibfacecapture_impl(bool *pResult,CHostApi *pHostAPI,CVideoMonitorEvent*pHost,LPCSTR EnvironMinVideoName,LPCSTR EnvironMaxVideoName,LPCSTR OperateVideoName=NULL,MonitorEnum eMonitorType=MotionTarckAndFaceDetect)
+	Clibfacecapture_impl(bool *pResult, CHostApi *pHostAPI, CVideoMonitorEvent*pHost, const char* EnvironMinVideoName, const char* EnvironMaxVideoName, const char* OperateVideoName = NULL, MonitorEnum eMonitorType = MotionTarckAndFaceDetect)
 	{
 		m_pResult = pResult;
 		m_pHostApi = pHostAPI;
@@ -156,7 +156,7 @@ public:
 		m_hStopEventWait= ::CreateEventA(NULL, TRUE, 0, 0);
 		if (!m_hStopEventWait) {
 			*pResult = false;
-			pHostAPI->Debug("create hEventWait failed!");
+			pHostAPI->Debug(FACECAP_INFO, "create hEventWait failed!");
 			return;
 		}
 
@@ -166,7 +166,7 @@ public:
 		//读取配置文件
 		*pResult = pHostAPI->LoadConfig(m_stFaceConfig);
 		if (!*pResult){
-			pHostAPI->Debug("Load Configuration failed!");
+			pHostAPI->Debug(FACECAP_INFO, "Load Configuration failed!");
 			return;
 		}
 
@@ -214,8 +214,8 @@ public:
 
 	bool StopFaceCapture()
 	{
-		if (TRUE == StopVideoMonitor()){
-			m_pHostApi->Debug("Stop Video Monitor Thread Success!");
+		if (true == StopVideoMonitor()){
+			m_pHostApi->Debug(FACECAP_DEBUG, "Stop Video Monitor Thread Success!");
 		}
 
 		if (NULL != m_pEnvironMinVideoQueue){
@@ -350,21 +350,21 @@ private:
 		FIGetDir(CASCADE_FACE, base_dir, dir);
 		m_pFaceCascade=(CvHaarClassifierCascade*)cvLoad(dir,NULL,NULL,NULL);
 		if (!m_pFaceCascade){
-			m_pHostApi->Debug("加载脸部分类器失败!");
+			m_pHostApi->Debug(FACECAP_INFO, "加载脸部分类器失败!");
 			return false;
 		}
 
 		FIGetDir(CASCADE_EYE,base_dir,dir);
 		m_pEyeCascade=(CvHaarClassifierCascade*)cvLoad(dir,NULL,NULL,NULL);
 		if (!m_pEyeCascade){
-			m_pHostApi->Debug("加载眼睛分类器失败!");
+			m_pHostApi->Debug(FACECAP_INFO, "加载眼睛分类器失败!");
 			return false;
 		}
 
 		FIGetDir(CASCADE_MOUTH,base_dir,dir);
 		m_pMouthCascade=(CvHaarClassifierCascade*)cvLoad(dir,NULL,NULL,NULL);
 		if (!m_pMouthCascade){
-			m_pHostApi->Debug("加载嘴巴分类器失败!");
+			m_pHostApi->Debug(FACECAP_INFO, "加载嘴巴分类器失败!");
 			return false;
 		}
 
@@ -372,7 +372,7 @@ private:
 		m_pNoseCascade=(CvHaarClassifierCascade*)cvLoad(dir,NULL,NULL,NULL);
 		if (!m_pMouthCascade)
 		{
-			m_pHostApi->Debug("加载鼻子分类器失败!");
+			m_pHostApi->Debug(FACECAP_INFO, "加载鼻子分类器失败!");
 			return false;
 		}
 		return true;
@@ -474,11 +474,11 @@ private:
 		{
 			if (videoqueue == m_pEnvironMinVideoQueue)
 			{
-				m_pHostApi->Debug("获取环境相机图像队列长度错误!");
+				m_pHostApi->Debug(FACECAP_INFO, "获取环境相机图像队列长度错误!");
 			} 
 			else if (videoqueue == m_pOperatorVideoQueue)
 			{
-				//m_pHostApi->Debug("获取操作相机图像队列长度错误!");
+				m_pHostApi->Debug(FACECAP_INFO, "获取操作相机图像队列长度错误!");
 			}
 			return false;
 		}
@@ -486,23 +486,23 @@ private:
 		videoq_frame*videoframe = new videoq_frame;
 		if (m_pProcessImg == NULL)
 		{
-			m_pProcessImg = cvCreateImage(cvSize(m_nImgWidth,m_nImgHeight),8, 3); //创建图像
+			m_pProcessImg = cvCreateImage(cvSize(m_nImgWidth,m_nImgHeight), 8, 3); //创建图像
 		}
 		else
 		{
-			if((m_pProcessImg->height!=m_nImgHeight)||(m_pProcessImg->width!=m_nImgWidth))
+			if((m_pProcessImg->height != m_nImgHeight)||(m_pProcessImg->width != m_nImgWidth))
 			{
 				cvReleaseImage(&m_pProcessImg);
 				m_pProcessImg = NULL;
-				m_pProcessImg = cvCreateImage(cvSize(m_nImgWidth,m_nImgHeight),8, 3); //创建图像
+				m_pProcessImg = cvCreateImage(cvSize(m_nImgWidth,m_nImgHeight), 8, 3); //创建图像
 			} 
 		}
 		videoframe->data = (unsigned char*)m_pProcessImg->imageData;
-		bool bGetvideo = videoqueue->GetVideo(videoframe,0);
+		bool bGetvideo = videoqueue->GetVideo(videoframe, 0);
 		if (!bGetvideo)
 		{
 			delete videoframe;
-			m_pHostApi->Debug("从队列获取图像错误!");
+			m_pHostApi->Debug(FACECAP_INFO, "从队列获取图像错误!");
 			return false;
 		}
 		m_nImgWidth = videoframe->width;
@@ -513,27 +513,22 @@ private:
 
 	bool GetImage(CameraEnum eCamera)
 	{
-		if (eCamera == EnvironCamera)
-		{
-			if (m_pEnvironMinVideoQueue == NULL)
-			{
+		if (eCamera == EnvironCamera){
+			if (m_pEnvironMinVideoQueue == NULL){
 				return false;
 			}
+
 			bool bRslt = GetCurImg(m_pEnvironMinVideoQueue);
-			if (!bRslt)
-			{
+			if (!bRslt){
 				return false;
 			}
 		}
-		else if(eCamera == OperatorCamera)
-		{
-			if (m_pOperatorVideoQueue == NULL)
-			{
+		else if(eCamera == OperatorCamera){
+			if (m_pOperatorVideoQueue == NULL){
 				return false;
 			}
 			bool bRslt = GetCurImg(m_pOperatorVideoQueue);
-			if (!bRslt)
-			{
+			if (!bRslt){
 				return false;
 			}
 		}
@@ -818,7 +813,7 @@ private:
 			ClearInspectResult();
 			return false;
 		}
-		int size = (int)m_nImgHeight/m_stFaceConfig.fDetectFaceSize;
+		int size = (int)(m_nImgHeight/m_stFaceConfig.fDetectFaceSize);
 		pfaceSeq = cvHaarDetectObjects(m_pProcessImg,m_pFaceCascade,m_pFaceStorage,1.1,3,CV_HAAR_DO_CANNY_PRUNING,cvSize(size,size));
 		if (!pfaceSeq || !pfaceSeq->total)
 		{
@@ -1250,7 +1245,7 @@ private:
 		//		cvSaveImage(strFileName,m_stCapFace[i].img);
 		//	}
 		//}
-		for(int j=0;j<3;j++)
+		for(int j = 0; j < 3; j++)
 		{
 			if(m_stCapFace[j].img != NULL)
 			{
@@ -1402,7 +1397,7 @@ private:
 					{
 						if((m_eMonitorState == NoBody) || (m_eMonitorState == SomebodyFar))
 						{
-							m_pHostApi->Debug("有人靠近!");
+							m_pHostApi->Debug(FACECAP_INFO, "有人靠近!");
 							m_eMonitorState = SomebodyClose;		//进入有人靠近状态
 
 							//截取人脸图像,放大截取区域,截取半身头像
@@ -1419,7 +1414,7 @@ private:
 					{
 						if(m_eMonitorState != SomebodyOperate)
 						{
-							m_pHostApi->Debug("有人进入操作距离!");
+							m_pHostApi->Debug(FACECAP_INFO, "有人进入操作距离!");
 							m_eMonitorState = SomebodyOperate;			//进入有人靠近状态
 							//截取人脸图像,放大截取区域,截取半身头像
 							pFaceRect->y		= m_stObjTrackRslt.ObjRect[i].y+pFaceRect->y;
@@ -1437,7 +1432,7 @@ private:
 							 m_stAllFaceInfo.astFaceInfo[0].stRegion.stUpperBodyRect.width = m_nImgWidth/2;
 							 m_stAllFaceInfo.astFaceInfo[0].stRegion.stUpperBodyRect.x = m_nImgWidth/4;
 							 m_stAllFaceInfo.astFaceInfo[0].stRegion.stUpperBodyRect.y = m_nImgHeight/4;
-							 m_pHostApi->Debug("有人出现!");
+							 m_pHostApi->Debug(FACECAP_INFO, "有人出现!");
 							 m_eMonitorState = SomebodyFar;			//进入远距离有人状态
 						 }
 						 m_pHostEvent->GenerateAppearEvent();	//产生有人出现事件
@@ -1487,21 +1482,21 @@ private:
 		{
 			m_pFaceStorage = cvCreateMemStorage(0);
 		}
-		pfaceSeq = cvHaarDetectObjects(m_pProcessImg,m_pFaceCascade,m_pFaceStorage,1.2,3,CV_HAAR_DO_CANNY_PRUNING,cvSize(nFaceLimit,nFaceLimit));
-		if (pfaceSeq &&pfaceSeq->total)
+		pfaceSeq = cvHaarDetectObjects(m_pProcessImg, m_pFaceCascade, m_pFaceStorage, 1.2, 3, CV_HAAR_DO_CANNY_PRUNING, cvSize(nFaceLimit,nFaceLimit));
+		if (pfaceSeq && pfaceSeq->total)
 		{
-			for(int i=0;i<(pfaceSeq?pfaceSeq->total:0);i++)
+			for(int i = 0; i < (pfaceSeq?pfaceSeq->total:0); i++)
 			{
 				nFaceNum++;
 				//获取脸部矩形
-				CvRect*pFaceRect = (CvRect*)cvGetSeqElem(pfaceSeq,i);
+				CvRect* pFaceRect = (CvRect*)cvGetSeqElem(pfaceSeq, i);
 				//如果发现有人脸到达靠近区域,置有人靠近状态
 				if((pFaceRect->height >= (int)(m_nImgHeight/m_stFaceConfig.fCloseFaceSize))&&(pFaceRect->height <= (int)(m_nImgHeight/m_stFaceConfig.fOperateFaceSize)))
 				{
 					if((m_eMonitorState == NoBody) || (m_eMonitorState == SomebodyFar))
 					{
 						nCurafaceSerial = nFaceNum;
-						m_pHostApi->Debug("有人靠近!");
+						m_pHostApi->Debug(FACECAP_INFO, "有人靠近!");
 						m_eMonitorState = SomebodyClose;		//进入有人靠近状态
 					}
 					m_pHostEvent->GenerateCloseEvent();		//产生有人靠近事件
@@ -1511,7 +1506,7 @@ private:
 					if(m_eMonitorState != SomebodyOperate)
 					{
 						nCurafaceSerial = nFaceNum;
-						m_pHostApi->Debug("有人进入操作距离!");
+						m_pHostApi->Debug(FACECAP_INFO, "有人进入操作距离!");
 						m_eMonitorState = SomebodyOperate;			//进入有人靠近状态
 					}
 					m_pHostEvent->GenerateEnterOperateEvent();	//产生有人进入操作距离事件
@@ -1521,22 +1516,26 @@ private:
 					if(m_eMonitorState == NoBody)
 					{
 						nCurafaceSerial = nFaceNum;
-						m_pHostApi->Debug("有人出现!");
+						m_pHostApi->Debug(FACECAP_INFO, "有人出现!");
 						m_eMonitorState = SomebodyFar;			//进入远距离有人状态
 					}
 					else
 					{
-						m_pHostApi->Debug("远距离,有人出现!");
+						m_pHostApi->Debug(FACECAP_INFO, "远距离,有人出现!");
 						m_eMonitorState = SomebodyFar;			//进入远距离有人状态
 					}
 					m_pHostEvent->GenerateAppearEvent();	//产生有人出现事件
 				}
 			}
-			CvRect*pFaceRect = (CvRect*)cvGetSeqElem(pfaceSeq,nCurafaceSerial);
+			CvRect*pFaceRect = (CvRect*)cvGetSeqElem(pfaceSeq, nCurafaceSerial);
 			//截取人脸图像,放大截取区域,截取半身头像
 			CalcUpbodyRegion(pFaceRect);
 			m_stAllFaceInfo.astFaceInfo[0].stRegion.stUpperBodyRect = *pFaceRect;
 		}
+		else {
+			m_pHostApi->Debug(FACECAP_DEBUG, "未检测到人脸");
+		}
+		
 		if (pfaceSeq != NULL)
 		{
 			cvReleaseMemStorage(&pfaceSeq->storage);
@@ -1670,7 +1669,7 @@ private:
 	void RecordError(char*error, ...)
 	{
 		#ifdef debugerror
-				m_pHostApi->Debug(error);
+				m_pHostApi->Debug(FACECAP_INFO, error);
 		#endif
 	}
 
@@ -1684,7 +1683,7 @@ private:
 				m_eMonitorState = SomebodyOperate;
 				m_stAllFaceInfo.astFaceInfo[0].eScene = ForwardScened;
 				m_pHostEvent->GenerateEnterOperateEvent();  //产生有人进入操作距离事件
-				m_pHostApi->Debug("有人进入操作距离!");
+				m_pHostApi->Debug(FACECAP_INFO, "有人进入操作距离!");
 				//获取UUID
 				if (m_stAllFaceInfo.astFaceInfo[0].FaceID == 0)
 				{
@@ -1714,7 +1713,7 @@ private:
 				m_stAllFaceInfo.astFaceInfo[0].stRegion.stUpperBodyRect.x = m_nImgHeight/4;
 				m_stAllFaceInfo.astFaceInfo[0].stRegion.stUpperBodyRect.y = m_nImgWidth/4;
 				m_pHostEvent->GenerateLeaveEvent();		//产生客户离开事件
-				m_pHostApi->Debug("客户离开!");
+				m_pHostApi->Debug(FACECAP_INFO, "客户离开!");
 				//清除UUID
 				m_stAllFaceInfo.astFaceInfo[0].FaceID = 0;
 			}
@@ -1726,13 +1725,13 @@ private:
 				m_stAllFaceInfo.astFaceInfo[0].eScene = BackwardScened;
 				m_eMonitorState = SomebodyClose;
 				m_pHostEvent->GenerateBackToCloseEvent();  //产生客户退回到接近距离事件
-				m_pHostApi->Debug("客户退回到接近距离!");
+				m_pHostApi->Debug(FACECAP_INFO, "客户退回到接近距离!");
 			} 
 			else if(SomebodyFar == m_eMonitorState)
 			{
 				m_stAllFaceInfo.astFaceInfo[0].eScene = ForwardScened;
 				m_eMonitorState = SomebodyClose;
-				m_pHostApi->Debug("有人靠近!");
+				m_pHostApi->Debug(FACECAP_INFO, "有人靠近!");
 				//获取UUID
 				if (m_stAllFaceInfo.astFaceInfo[0].FaceID == 0)
 				{
@@ -1792,7 +1791,7 @@ private:
 			}
 			if (m_pEnvironMinVideoQueue->GetVideoLens()<=0)
 			{
-				m_pHostApi->Debug("获取环境相机图像队列长度错误!");
+				m_pHostApi->Debug(FACECAP_INFO, "获取环境相机图像队列长度错误!");
 				return ;
 			}
 			int size = m_pEnvironMinVideoQueue->GetFrameSize(nImgWidth,nImgHeight);
@@ -1845,7 +1844,7 @@ private:
 			}
 			if (m_pEnvironMinVideoQueue->GetVideoLens()<=0)
 			{
-				m_pHostApi->Debug("获取环境相机图像队列长度错误!");
+				m_pHostApi->Debug(FACECAP_INFO, "获取环境相机图像队列长度错误!");
 				return ;
 			}
 			int size = m_pEnvironMinVideoQueue->GetFrameSize(nImgWidth,nImgHeight);
@@ -1913,7 +1912,7 @@ private:
 		//select camera
 		if (m_pOperatorVideoQueue != NULL)
 		{
-			m_pHostApi->Debug("m_pOperatorVideoQueue != NULL.");
+			m_pHostApi->Debug(FACECAP_DEBUG, "m_pOperatorVideoQueue != NULL.");
 			m_eCamera = (CameraEnum)m_stFaceConfig.nPrimCamera;
 		}
 		else
@@ -1942,7 +1941,7 @@ private:
 				if (m_nCameraState == 3)
 				{
 					FSleep(2000);
-					m_pHostApi->Debug("camera stop or all camera error!");
+					m_pHostApi->Debug(FACECAP_INFO, "camera stop or all camera error!");
 					continue;
 				}
 				//灯光变化时,清空历史记录,防止误判
@@ -1955,7 +1954,7 @@ private:
 				//if no people,start motion tracker
 				if(NoBody == m_eMonitorState)
 				{
-					m_pHostApi->Debug("NoBody");
+					m_pHostApi->Debug(FACECAP_INFO, "NoBody");
 					////if no people,start motion tracker
 					//bRst =  MotionTrack(m_eCamera,m_stFaceConfig.nThresholdNum);	
 					//if (!bRst)
@@ -2040,7 +2039,7 @@ private:
 				}
 				else if (SomebodyFar == m_eMonitorState) //if somebody space 2.5m
 				{
-					m_pHostApi->Debug("SomebodyFar");
+					m_pHostApi->Debug(FACECAP_INFO, "SomebodyFar");
 					//RecordError("Enter far distance search Face ");
 					bRst = GetImage(m_eCamera);
 					if (bRst)
@@ -2072,7 +2071,7 @@ private:
 				}
 				else if (SomebodyClose == m_eMonitorState) //close distance,1.5m
 				{
-					m_pHostApi->Debug("SomebodyClose");
+					m_pHostApi->Debug(FACECAP_INFO, "SomebodyClose");
 					//RecordError("close distance,search Face by operatorCamera");
 					bRst = FaceDetect(m_eCamera);
 					if(!bRst)
@@ -2093,7 +2092,7 @@ private:
 									SetUpperbodyToCenter();								
 									m_eMonitorState = NoBody;
 									m_pHostEvent->GenerateLeaveEvent();
-									m_pHostApi->Debug("客户离开!");
+									m_pHostApi->Debug(FACECAP_INFO, "客户离开!");
 									nSearchFailNum = 0;
 									FSleep(m_stFaceConfig.nSleepLong);
 								}
@@ -2121,7 +2120,7 @@ private:
 								SetUpperbodyToCenter();
 								m_eMonitorState = NoBody;
 								m_pHostEvent->GenerateLeaveEvent();
-								m_pHostApi->Debug("客户离开!");
+								m_pHostApi->Debug(FACECAP_INFO, "客户离开!");
 								nSearchFailNum = 0;
 								FSleep(m_stFaceConfig.nSleepLong);
 							}
@@ -2168,7 +2167,7 @@ private:
 				}
 				else if (SomebodyOperate == m_eMonitorState)	//当有人进入操作距离时
 				{
-					m_pHostApi->Debug("SomebodyOperate");
+					m_pHostApi->Debug(FACECAP_INFO, "SomebodyOperate");
 					//如果是双相机模式
 					if (m_pOperatorVideoQueue != NULL)
 					{
@@ -2181,7 +2180,7 @@ private:
 						}
 						else
 						{
-							bRst = FALSE;
+							bRst = false;
 						}
 						if(!bRst)
 						{
@@ -2200,7 +2199,7 @@ private:
 						}
 						else
 						{
-							bRst = FALSE;
+							bRst = false;
 						}
 						if(!bRst)
 						{
@@ -2294,7 +2293,7 @@ private:
 									m_eMonitorState = SomebodyClose;
 									m_stAllFaceInfo.astFaceInfo[0].eScene = UnLockScene;
 									m_pHostEvent->GenerateLoseFaceEvent();  //发送失去人脸事件
-									m_pHostApi->Debug("人脸失去锁定!");
+									m_pHostApi->Debug(FACECAP_INFO, "人脸失去锁定!");
 									nDetectFailNum = 0;
 								}
 								FSleep(m_stFaceConfig.nSleepShort);
@@ -2309,7 +2308,7 @@ private:
 								m_eMonitorState = SomebodyClose;
 								m_stAllFaceInfo.astFaceInfo[0].eScene = UnLockScene;
 								m_pHostEvent->GenerateLoseFaceEvent();  //发送失去人脸事件
-								m_pHostApi->Debug("人脸失去锁定!");
+								m_pHostApi->Debug(FACECAP_INFO, "人脸失去锁定!");
 								nDetectFailNum = 0;
 							}
 							FSleep(m_stFaceConfig.nSleepShort);
@@ -2334,10 +2333,10 @@ private:
 				if (nBreakDownNum == 5)
 				{
 				   m_pHostEvent->GenerateFaceCaptureFC();   //发送人脸崩溃事件
-				   m_pHostApi->Debug("opencv library breakdown!");
+				   m_pHostApi->Debug(FACECAP_INFO, "opencv library breakdown!");
 				}
 				Sleep(3*m_stFaceConfig.nSleepShort);
-				m_pHostApi->Debug("stop Video Monitor.");
+				m_pHostApi->Debug(FACECAP_DEBUG, "****** stop Video Monitor ********");
 			}
 		} 
 		return 0;
@@ -2354,7 +2353,7 @@ public:
 	bool StartVideoMonitor(CHostApi *pHostAPI, CVideoMonitorEvent*pHost, MonitorEnum eMonitorType)
 	{
 		if (m_hVieoMonitorThread == NULL){
-			m_pHostApi->Debug("create video monitor thread.");
+			m_pHostApi->Debug(FACECAP_DEBUG, "create video monitor thread.");
 			m_hVieoMonitorThread = (HANDLE)_beginthreadex(NULL, 0, VideoMonitorThread, this, 0, (unsigned int*)&m_nVieoMonitorThreadId);
 		}
 		return true;
@@ -2573,9 +2572,9 @@ public:
 
 // 这是已导出类的构造函数。
 // 有关类定义的信息,请参阅 libfacecapture.h
-Clibfacecapture::Clibfacecapture(bool *pResult,CHostApi *pHostAPI,CVideoMonitorEvent*pHost,LPCSTR EnvironMinVideoName,LPCSTR EnvironMaxVideoName,LPCSTR OperateVideoName,MonitorEnum eMonitorType)
+Clibfacecapture::Clibfacecapture(bool *pResult, CHostApi *pHostAPI, CVideoMonitorEvent*pHost, const char* EnvironMinVideoName, const char* EnvironMaxVideoName, const char* OperateVideoName, MonitorEnum eMonitorType)
 {
-	m_pImpl = new Clibfacecapture_impl(pResult,pHostAPI,pHost,EnvironMinVideoName,EnvironMaxVideoName,OperateVideoName,eMonitorType);
+	m_pImpl = new Clibfacecapture_impl(pResult, pHostAPI, pHost, EnvironMinVideoName, EnvironMaxVideoName, OperateVideoName, eMonitorType);
 }
 
 Clibfacecapture::~Clibfacecapture(void)

+ 18 - 6
Other/win/libfacecapture/libfacecapture.h

@@ -13,6 +13,9 @@
 #define LIBFACECAPTURE_API __declspec(dllimport)
 #endif
 
+#ifndef MAX_PATH
+#define MAX_PATH 260
+#endif
 //配置参数
 struct CFaceCaptureConfig
 {
@@ -132,6 +135,7 @@ enum HeightEnunm
 	Middle,				//中等
 	High				//高
 };
+
 //客户交互属性
 struct CCustomerAppearance
 {
@@ -148,6 +152,14 @@ enum MonitorEnum
 	MotionTarckAndFaceRecog,		//运动跟踪+人脸识别
 };
 
+enum facecap_loglevel {
+	FACECAP_DEBUG = 0,
+	FACECAP_INFO = 1,
+	FACECAP_WARN = 2,
+	FACECAP_ERROR = 3,
+	FACECAP_FATAL = 4
+};
+
 struct __declspec(novtable) CVideoMonitorEvent
 {
 	virtual void GenerateCloseEvent() = 0;					//有人靠近 1.5M
@@ -173,10 +185,10 @@ struct CImageFrame
 struct __declspec(novtable) CHostApi 
 {
 	virtual unsigned __int64 GenerateUUID() = 0;
-	virtual void GetFaceImgName(char* FaceName, size_t uLen) = 0;
+	virtual void GetFaceImgName(char* FaceName, uint32_t uLen) = 0;
 	virtual bool IsCustomerChange() = 0;
 	virtual bool LoadConfig(CFaceCaptureConfig &config) = 0;
-	virtual void Debug(const char *fmt, ...) = 0;
+	virtual void Debug(facecap_loglevel elevel, const char *fmt, ...) = 0;
 };
 
 
@@ -193,7 +205,7 @@ public:
 	//OperateVideoName:操作摄像头共享视频队列的文件名
 	//OperateVideoName默认为Null时设备运行于单摄像头模式
 	//开始视频监控,pHost:事件,nMonitorFreq:监控频率,单位ms,MonitorType:监控类型,有三种模式可供选择
-	Clibfacecapture(bool *pResult, CHostApi *pHostAPI,CVideoMonitorEvent*pHost,LPCSTR EnvironMinVideoName,LPCSTR EnvironMaxVideoName = NULL,LPCSTR OperateVideoName=NULL,MonitorEnum eMonitorType=MotionTarckAndFaceDetect);
+	Clibfacecapture(bool *pResult, CHostApi *pHostAPI, CVideoMonitorEvent*pHost, const char* EnvironMinVideoName, const char* EnvironMaxVideoName = NULL, const char* OperateVideoName = NULL, MonitorEnum eMonitorType = MotionTarckAndFaceDetect);
 	~Clibfacecapture(void);
 
 	bool StartFaceCapture();
@@ -206,11 +218,11 @@ public:
 	//获取所有用户FACEID
 	bool GetTrackFace(__int64 *arrFaceIDs, int *size);
 	//获取主用户的常规属性
-	bool GetMainCustomerStatus(__int64 &FaceID,CCustomerStatus &Property);
+	bool GetMainCustomerStatus(__int64 &FaceID, CCustomerStatus &Property);
 	//获取其他用户的常规属性
-	bool GetCustomerStatus(__int64 FaceID,CCustomerStatus &Property);
+	bool GetCustomerStatus(__int64 FaceID, CCustomerStatus &Property);
 	//获取主用户的交互属性
-	bool GetCustomerAppearance(__int64 FaceID,CCustomerAppearance &Property);
+	bool GetCustomerAppearance(__int64 FaceID, CCustomerAppearance &Property);
 	void SetLightChange();//灯光变化,此时算法要做处理防止误判
 	void SetCameraState(int nState);
 private:

Some files were not shown because too many files changed in this diff