|
@@ -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;
|