|
@@ -176,6 +176,11 @@ class Clibfacecapture_impl
|
|
|
public:
|
|
|
Clibfacecapture_impl(BOOL *pResult,CHostApi *pHostAPI,CVideoMonitorEvent*pHost,LPCSTR EnvironMinVideoName,LPCSTR EnvironMaxVideoName,LPCSTR OperateVideoName=NULL,MonitorEnum eMonitorType=MotionTarckAndFaceDetect)
|
|
|
{
|
|
|
+ m_pResult = pResult;
|
|
|
+ m_pHostApi = pHostAPI;
|
|
|
+ m_pHostEvent = pHost;
|
|
|
+ m_eType = eMonitorType;
|
|
|
+
|
|
|
m_pFaceCascade = NULL; //脸部分类器
|
|
|
m_pEyeCascade = NULL; //眼睛分类器
|
|
|
m_pMouthCascade = NULL; //嘴巴分类器
|
|
@@ -188,7 +193,6 @@ public:
|
|
|
#else
|
|
|
m_videomonitorthreadid = 0;
|
|
|
#endif
|
|
|
-
|
|
|
m_bStopVieoMonitor = FALSE;
|
|
|
m_pEnvironMinVideoQueue = NULL;
|
|
|
m_pEnvironMaxVideoQueue =NULL;
|
|
@@ -199,15 +203,29 @@ public:
|
|
|
m_nImgHeight = 0;
|
|
|
m_pMhImg = NULL;
|
|
|
m_pMhBuf = NULL;
|
|
|
- m_pHostApi = NULL;
|
|
|
m_bLightChange = FALSE;
|
|
|
m_nCameraStae = 0;
|
|
|
m_nLastBuf = 0;
|
|
|
m_nCapFaceNum = 0;
|
|
|
m_bCapFaceCompleted = FALSE;
|
|
|
- m_pHostEvent = NULL;
|
|
|
m_eMonitorState = NoBody;
|
|
|
|
|
|
+ memset(m_envminqueuename, 0, MAX_PATH);
|
|
|
+ memset(m_envmaxqueuename, 0, MAX_PATH);
|
|
|
+ memset(m_optqueuename, 0, MAX_PATH);
|
|
|
+
|
|
|
+ if (NULL != EnvironMinVideoName){
|
|
|
+ strncpy(m_envminqueuename, EnvironMinVideoName, (strlen(EnvironMinVideoName) > MAX_PATH) ? (MAX_PATH - 1) : strlen(EnvironMinVideoName));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (NULL != EnvironMaxVideoName) {
|
|
|
+ strncpy(m_envmaxqueuename, EnvironMaxVideoName, (strlen(EnvironMaxVideoName) > MAX_PATH) ? (MAX_PATH - 1) : strlen(EnvironMaxVideoName));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (NULL != OperateVideoName) {
|
|
|
+ strncpy(m_optqueuename, OperateVideoName, (strlen(OperateVideoName) > MAX_PATH) ? (MAX_PATH - 1) : strlen(OperateVideoName));
|
|
|
+ }
|
|
|
+
|
|
|
#ifdef RVC_OS_WIN
|
|
|
InitializeCriticalSection(&CS);
|
|
|
|
|
@@ -233,68 +251,73 @@ public:
|
|
|
return;
|
|
|
}
|
|
|
*pResult = InitFaceCapture(m_stFaceConfig.strFaceDataDirPath);
|
|
|
- if (!*pResult)
|
|
|
- {
|
|
|
+ if (!*pResult){
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- for (int i = 0;i<MAX_FACE_NUM;i++)
|
|
|
- {
|
|
|
- m_PreFaceRect[i] = cvRect(0,0,0,0);
|
|
|
+ for (int i = 0; i < MAX_FACE_NUM; i++) {
|
|
|
+ m_PreFaceRect[i] = cvRect(0, 0, 0, 0);
|
|
|
}
|
|
|
- memset(&m_stAllFaceInfo,0,sizeof(CAllFaceInfo));
|
|
|
+ memset(&m_stAllFaceInfo, 0, sizeof(CAllFaceInfo));
|
|
|
+
|
|
|
//初始化剪辑区域为屏幕中央区域
|
|
|
- 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));
|
|
|
+ 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));
|
|
|
}
|
|
|
- memset(m_SaveImgName,0,MAX_PATH);
|
|
|
- memset(&m_stObjTrackRslt,0,sizeof(CMotionTrackRslt));
|
|
|
- memset(&m_stBrightAdjParam,0,sizeof(CBrightAdjParam));
|
|
|
- m_pEnvironMinVideoQueue = new Clibvideoqueue((char *)EnvironMinVideoName);
|
|
|
- if (EnvironMaxVideoName)
|
|
|
- {
|
|
|
- m_pEnvironMaxVideoQueue = new Clibvideoqueue((char*)EnvironMaxVideoName);
|
|
|
+
|
|
|
+ memset(m_SaveImgName, 0, MAX_PATH);
|
|
|
+ memset(&m_stObjTrackRslt, 0, sizeof(CMotionTrackRslt));
|
|
|
+ memset(&m_stBrightAdjParam, 0, sizeof(CBrightAdjParam));
|
|
|
+
|
|
|
+ *pResult = WriteAllFaceInfo(m_stAllFaceInfo);
|
|
|
+ if (!*pResult) {
|
|
|
+ return;
|
|
|
}
|
|
|
- if(OperateVideoName)
|
|
|
- {
|
|
|
- m_pOperatorVideoQueue = new Clibvideoqueue((char*)OperateVideoName);
|
|
|
+ }
|
|
|
+
|
|
|
+ bool StartFaceCapture()
|
|
|
+ {
|
|
|
+ m_pEnvironMinVideoQueue = new Clibvideoqueue(m_envminqueuename);
|
|
|
+ if (strlen(m_envmaxqueuename)) {
|
|
|
+ m_pEnvironMaxVideoQueue = new Clibvideoqueue(m_envmaxqueuename);
|
|
|
}
|
|
|
- else
|
|
|
- {
|
|
|
- m_pOperatorVideoQueue = NULL;
|
|
|
+ if (strlen(m_optqueuename)) {
|
|
|
+ m_pOperatorVideoQueue = new Clibvideoqueue(m_optqueuename);
|
|
|
}
|
|
|
- *pResult = WriteAllFaceInfo(m_stAllFaceInfo);
|
|
|
- if(!*pResult)
|
|
|
- {
|
|
|
- return;
|
|
|
+ else {
|
|
|
+ m_pOperatorVideoQueue = NULL;
|
|
|
}
|
|
|
//开始视频监控线程
|
|
|
- StartVideoMonitor(pHostAPI,pHost,eMonitorType);
|
|
|
+ return StartVideoMonitor(m_pHostApi, m_pHostEvent, m_eType);
|
|
|
}
|
|
|
|
|
|
- ~Clibfacecapture_impl()
|
|
|
+ bool StopFaceCapture()
|
|
|
{
|
|
|
-#ifdef RVC_OS_WIN
|
|
|
- DeleteCriticalSection(&CS);
|
|
|
-#else
|
|
|
- pthread_mutex_destroy(&cs_mutex);
|
|
|
-#endif
|
|
|
- if (m_pEnvironMinVideoQueue)
|
|
|
- {
|
|
|
+ StopVideoMonitor();
|
|
|
+
|
|
|
+ if (m_pEnvironMinVideoQueue){
|
|
|
delete m_pEnvironMinVideoQueue;
|
|
|
}
|
|
|
- if (m_pEnvironMaxVideoQueue)
|
|
|
- {
|
|
|
+
|
|
|
+ if (m_pEnvironMaxVideoQueue){
|
|
|
delete m_pEnvironMaxVideoQueue;
|
|
|
}
|
|
|
|
|
|
- if (m_pOperatorVideoQueue)
|
|
|
- {
|
|
|
+ if (m_pOperatorVideoQueue){
|
|
|
delete m_pOperatorVideoQueue;
|
|
|
}
|
|
|
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ ~Clibfacecapture_impl()
|
|
|
+ {
|
|
|
+#ifdef RVC_OS_WIN
|
|
|
+ DeleteCriticalSection(&CS);
|
|
|
+#else
|
|
|
+ pthread_mutex_destroy(&cs_mutex);
|
|
|
+#endif
|
|
|
if (m_pMhImg)
|
|
|
{
|
|
|
cvReleaseImage(&m_pMhImg);
|
|
@@ -357,6 +380,8 @@ private:
|
|
|
sem_t m_semt;
|
|
|
|
|
|
#endif
|
|
|
+ BOOL* m_pResult;
|
|
|
+ MonitorEnum m_eType;
|
|
|
|
|
|
CvHaarClassifierCascade* m_pFaceCascade; //脸部分类器
|
|
|
CvHaarClassifierCascade* m_pEyeCascade; //眼睛分类器
|
|
@@ -402,8 +427,12 @@ private:
|
|
|
MonitorStateEnum m_eMonitorState;
|
|
|
CVideoMonitorEvent*m_pHostEvent;
|
|
|
CHostApi* m_pHostApi;
|
|
|
-
|
|
|
CameraEnum m_eCamera;
|
|
|
+
|
|
|
+ char m_envminqueuename[MAX_PATH];
|
|
|
+ char m_envmaxqueuename[MAX_PATH];
|
|
|
+ char m_optqueuename[MAX_PATH];
|
|
|
+
|
|
|
//初始化
|
|
|
BOOL InitFaceCapture(const char *base_dir)
|
|
|
{
|
|
@@ -2438,8 +2467,6 @@ public:
|
|
|
//开始视频监控,pHost:事件,nMonitorFreq:监控频率,单位ms,MonitorType:监控类型,有三种模式可供选择
|
|
|
BOOL StartVideoMonitor(CHostApi *pHostAPI,CVideoMonitorEvent*pHost,MonitorEnum eMonitorType)
|
|
|
{
|
|
|
- m_pHostEvent = pHost;
|
|
|
- m_pHostApi = pHostAPI;
|
|
|
#ifdef RVC_OS_WIN
|
|
|
if (m_hVieoMonitorThread == NULL)
|
|
|
{
|
|
@@ -2730,7 +2757,6 @@ Clibfacecapture::Clibfacecapture(BOOL *pResult,CHostApi *pHostAPI,CVideoMonitorE
|
|
|
|
|
|
Clibfacecapture::~Clibfacecapture(void)
|
|
|
{
|
|
|
- m_pImpl->StopVideoMonitor();
|
|
|
delete m_pImpl;
|
|
|
}
|
|
|
//快照
|
|
@@ -2776,6 +2802,16 @@ void Clibfacecapture::SetCameraState(int nState)
|
|
|
m_pImpl->m_nCameraStae = nState;
|
|
|
}
|
|
|
|
|
|
+bool Clibfacecapture::StartFaceCapture()
|
|
|
+{
|
|
|
+ return m_pImpl->StartFaceCapture();
|
|
|
+}
|
|
|
+
|
|
|
+bool Clibfacecapture::StopFaceCapture()
|
|
|
+{
|
|
|
+ return m_pImpl->StopFaceCapture();
|
|
|
+}
|
|
|
+
|
|
|
BOOL SnapShot(CImageFrame*img)
|
|
|
{
|
|
|
if(img == NULL)
|