浏览代码

Z991239-6192 #comment: 优化摄像头打开期间,facetracking实体重启后人脸检测功能

80274480 5 月之前
父节点
当前提交
04224d8d5d
共有 2 个文件被更改,包括 65 次插入17 次删除
  1. 53 17
      Module/mod_facetracking/mod_facetracking.cpp
  2. 12 0
      Module/mod_facetracking/mod_facetracking.h

+ 53 - 17
Module/mod_facetracking/mod_facetracking.cpp

@@ -60,7 +60,7 @@ void CFaceTrackingEntity::OnPreStart(CAutoArray<CSimpleStringA> strArgs,CSmartPo
 
 	CSystemStaticInfo stStaticinfo;
 	spFunction->GetSystemStaticInfo(stStaticinfo);
-	if (stricmp(stStaticinfo.strMachineType, "RVC.Stand1SPlus") == 0) {
+	if (stricmp(stStaticinfo.strMachineType.GetData(), "RVC.Stand1SPlus") == 0) {
 		m_bSingleCamera = true;
 	}
 
@@ -120,6 +120,11 @@ void CFaceTrackingEntity::OnPreStart(CAutoArray<CSimpleStringA> strArgs,CSmartPo
 void CFaceTrackingEntity::OnStarted()
 {
 	LogEvent(Severity_Middle, LOG_EVT_MOD_FACETRACKING_STARTED_SUCCESS, "facetracking entity started successfully.");
+
+	if (GetCameraOnStatus()) {
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("camera is alreay on, start face tracking.");
+		StartFaceDetect();
+	}
 }
 
 void CFaceTrackingEntity::OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer<ITransactionContext> pTransactionContext)
@@ -153,6 +158,25 @@ int CFaceTrackingEntity::TransCameraStateToInt(char cData)
 	return iRet;
 }
 
+
+void CFaceTrackingEntity::StartFaceDetect()
+{
+	CSimpleStringA strValue;
+	GetFunction()->GetSysVar(SYSVAR_CAMERASTATE, strValue);
+	int iState = TransCameraStateToInt(strValue[0]);
+	if (3 != iState) {
+		m_facecapture->SetCameraState(iState);
+		m_facecapture->StartFaceCapture();
+	}
+	else {
+		m_facecapture->SetCameraState(3);
+	}
+
+	if (!m_bSingleCamera) {
+		GetFunction()->SetTimer(1, this, 1000);
+	}
+}
+
 void CFaceTrackingEntity::OnLog(const CAutoArray<CUUID> &SubIDs, const CUUID nLogID,const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
 	const DWORD dwSysError,const DWORD dwUserCode,const DWORD dwEntityInstanceID, const WORD wEntityDevelID, 
 	const CAutoArray<DWORD> &Param, const char *pszEntityName, const char *pszModuleName,const char *pszMessage, const linkContext &pLinkInfo)
@@ -164,22 +188,7 @@ void CFaceTrackingEntity::OnLog(const CAutoArray<CUUID> &SubIDs, const CUUID nLo
 		break;
 
 	case LOG_EVT_MEDIACONTROLLER_CAMERA_STARTED:
-		{
-			CSimpleStringA strValue;
-			GetFunction()->GetSysVar(SYSVAR_CAMERASTATE, strValue);
-			int iState = TransCameraStateToInt(strValue[0]);
-			if (3 != iState) {
-				m_facecapture->SetCameraState(iState);
-				m_facecapture->StartFaceCapture();
-			}
-			else {
-				m_facecapture->SetCameraState(3);
-			}
-
-			if (!m_bSingleCamera) {
-				GetFunction()->SetTimer(1, this, 1000);
-			}
-		}
+		StartFaceDetect();
 		break;
 
 	case LOG_EVT_MEDIACONTROLLER_CAMERA_STOPPED:
@@ -408,6 +417,33 @@ void CFaceTrackingEntity::OnSysVarEvent(const char *pszKey, const char *pszValue
 	}
 }
 
+bool CFaceTrackingEntity::GetCameraOnStatus()
+{
+	bool bRet = false;
+	MediaControlClient* pMediaControlClient = new MediaControlClient(this);
+	ErrorCodeEnum erroCode = pMediaControlClient->Connect();
+	if (Error_Succeed != erroCode) {
+		pMediaControlClient->SafeDelete();
+		pMediaControlClient = NULL;
+	}
+	else {
+		MediaService_IsCameraOnStatus_Req req;
+		MediaService_IsCameraOnStatus_Ans ans;
+		if (Error_Succeed == pMediaControlClient->IsCameraOnStatus(req, ans, 5000)) {
+			bRet = ans.biscameraon;
+		}
+		pMediaControlClient->GetFunction()->CloseSession();
+		pMediaControlClient = NULL;
+	}
+
+	return bRet;
+}
+
+
+MediaControlClient::MediaControlClient(CFaceTrackingEntity* pEntity) : MediaService_ClientBase(pEntity)
+{
+
+}
 
 SP_BEGIN_ENTITY_MAP()
 	SP_ENTITY(CFaceTrackingEntity)

+ 12 - 0
Module/mod_facetracking/mod_facetracking.h

@@ -8,6 +8,9 @@
 #include "libvideoqueue.h"
 #include "libfacecapture.h"
 
+#include "../mod_mediacontroller/MediaController_client_g.h"
+using namespace MediaController;
+
 class CFaceTrackingEntity : public CEntityBase, public CHostApi, public CVideoMonitorEvent, public ISysVarListener, public ITimerListener, public ILogListener
 {
 public:
@@ -37,6 +40,8 @@ public:
 
 private:
 	virtual void OnSysVarEvent(const char* pszKey, const char* pszValue, const char* pszOldValue, const char* pszEntityName);
+	bool GetCameraOnStatus();
+	void StartFaceDetect();
 
 private:
 	CUUID m_UUid1, m_UUid2, m_UUid3, m_UUid4;
@@ -50,4 +55,11 @@ private:
 };
 
 
+class MediaControlClient : public MediaService_ClientBase
+{
+public:
+	MediaControlClient(CFaceTrackingEntity* pEntity);
+};
+
+
 #endif	__MOD_FACETRACKING_H