|
@@ -573,6 +573,38 @@ bool ListFuncActInfo::addFuncActionInfo(AppFunction func)
|
|
|
}
|
|
|
FuncActionInfo* pFuncActionInfo = new FuncActionInfo;
|
|
|
pFuncActionInfo->appFunction = func;
|
|
|
+ if(func == AppFunction::APP_ONWORK)
|
|
|
+ {
|
|
|
+ pFuncActionInfo->strFunctionName = "人员在岗识别";
|
|
|
+ }
|
|
|
+ else if(func == AppFunction::APP_ILLEGAL)
|
|
|
+ {
|
|
|
+ pFuncActionInfo->strFunctionName = "非法入侵检测";
|
|
|
+ }
|
|
|
+ else if(func == AppFunction::APP_REGIONAL)
|
|
|
+ {
|
|
|
+ pFuncActionInfo->strFunctionName = "人员计数";
|
|
|
+ }
|
|
|
+ else if(func == AppFunction::APP_CONTRABAND)
|
|
|
+ {
|
|
|
+ pFuncActionInfo->strFunctionName = "违禁物品";
|
|
|
+ }
|
|
|
+ else if(func == AppFunction::APP_PLAYPHONE)
|
|
|
+ {
|
|
|
+ pFuncActionInfo->strFunctionName = "玩手机";
|
|
|
+ }
|
|
|
+ else if(func == AppFunction::APP_FATIGUE)
|
|
|
+ {
|
|
|
+ pFuncActionInfo->strFunctionName = "疲劳检测";
|
|
|
+ }
|
|
|
+ else if(func == AppFunction::APP_MOUSE)
|
|
|
+ {
|
|
|
+ pFuncActionInfo->strFunctionName = "动物识别";
|
|
|
+ }
|
|
|
+ else if(func == AppFunction::APP_NOMASK)
|
|
|
+ {
|
|
|
+ pFuncActionInfo->strFunctionName = "口罩识别";
|
|
|
+ }
|
|
|
listFuncActionInfo.push_back(pFuncActionInfo);
|
|
|
|
|
|
return true;
|
|
@@ -591,16 +623,124 @@ bool ListFuncActInfo::addActionInfo(const ActionInfo& info)
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
- /* 人脸识别算法 */
|
|
|
+ /* 人脸识别算法(人员在岗识别、非法入侵检测) */
|
|
|
if(info.ActionID == g_actionList.ActFace)
|
|
|
{
|
|
|
-
|
|
|
+ auto pFuncActionInfo = findAppFunction(info.ChannelID, AppFunction::APP_ONWORK);
|
|
|
+ if(pFuncActionInfo != nullptr)
|
|
|
+ {
|
|
|
+ pFuncActionInfo->addActionInfo(info);
|
|
|
+ }
|
|
|
+ pFuncActionInfo = findAppFunction(info.ChannelID, AppFunction::APP_ILLEGAL);
|
|
|
+ }
|
|
|
+ /* 人员计数 */
|
|
|
+ else if (info.ActionID == g_actionList.ActPersonNumber)
|
|
|
+ {
|
|
|
+ auto pFuncActionInfo = findAppFunction(info.ChannelID, AppFunction::APP_REGIONAL);
|
|
|
+ if(pFuncActionInfo != nullptr)
|
|
|
+ {
|
|
|
+ pFuncActionInfo->addActionInfo(info);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /* 违禁物品 */
|
|
|
+ else if (info.ActionID == g_actionList.ActContraband)
|
|
|
+ {
|
|
|
+ auto pFuncActionInfo = findAppFunction(info.ChannelID, AppFunction::APP_CONTRABAND);
|
|
|
+ if(pFuncActionInfo != nullptr)
|
|
|
+ {
|
|
|
+ pFuncActionInfo->addActionInfo(info);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /* 玩手机 */
|
|
|
+ else if (info.ActionID == g_actionList.ActPlayPhone)
|
|
|
+ {
|
|
|
+ auto pFuncActionInfo = findAppFunction(info.ChannelID, AppFunction::APP_PLAYPHONE);
|
|
|
+ if(pFuncActionInfo != nullptr)
|
|
|
+ {
|
|
|
+ pFuncActionInfo->addActionInfo(info);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /* 睡岗识别 */
|
|
|
+ else if (info.ActionID == g_actionList.ActSleep)
|
|
|
+ {
|
|
|
+ auto pFuncActionInfo = findAppFunction(info.ChannelID, AppFunction::APP_FATIGUE);
|
|
|
+ if(pFuncActionInfo != nullptr)
|
|
|
+ {
|
|
|
+ pFuncActionInfo->addActionInfo(info);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /* 疲劳检测 */
|
|
|
+ else if(info.ActionID == g_actionList.ActFatigueDetection)
|
|
|
+ {
|
|
|
+ auto pFuncActionInfo = findAppFunction(info.ChannelID, AppFunction::APP_FATIGUE);
|
|
|
+ if(pFuncActionInfo != nullptr)
|
|
|
+ {
|
|
|
+ pFuncActionInfo->addActionInfo(info);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /* 动物识别 */
|
|
|
+ else if (info.ActionID == g_actionList.ActAnimalDetect)
|
|
|
+ {
|
|
|
+ auto pFuncActionInfo = findAppFunction(info.ChannelID, AppFunction::APP_MOUSE);
|
|
|
+ if(pFuncActionInfo != nullptr)
|
|
|
+ {
|
|
|
+ pFuncActionInfo->addActionInfo(info);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /* 老鼠识别 */
|
|
|
+ else if (info.ActionID == g_actionList.ActMouseDetect)
|
|
|
+ {
|
|
|
+ auto pFuncActionInfo = findAppFunction(info.ChannelID, AppFunction::APP_MOUSE);
|
|
|
+ if(pFuncActionInfo != nullptr)
|
|
|
+ {
|
|
|
+ pFuncActionInfo->addActionInfo(info);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /* 口罩识别 */
|
|
|
+ else if (info.ActionID == g_actionList.ActMask)
|
|
|
+ {
|
|
|
+ auto pFuncActionInfo = findAppFunction(info.ChannelID, AppFunction::APP_NOMASK);
|
|
|
+ if(pFuncActionInfo != nullptr)
|
|
|
+ {
|
|
|
+ pFuncActionInfo->addActionInfo(info);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ SPDLOG_WARN("未知的算法ID: {}", info.ActionID);
|
|
|
+ return false;
|
|
|
}
|
|
|
-
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * @brief 清空无用的功能信息
|
|
|
+ * 摄像机和算法信息为空的,或者运行状态为STOP,都会被清理掉
|
|
|
+ *
|
|
|
+ */
|
|
|
+void ListFuncActInfo::clearNoneFuncActionInfo()
|
|
|
+{
|
|
|
+ for(auto it0 = listFuncActionInfo.begin(); it0 != listFuncActionInfo.end();)
|
|
|
+ {
|
|
|
+ if((*it0)->listRoomCamActInfo.empty() || ((*it0)->RunState == RunTimeState::RUN_STATE_STOP))
|
|
|
+ {
|
|
|
+ delete *it0;
|
|
|
+ it0 = listFuncActionInfo.erase(it0);
|
|
|
+ }else {
|
|
|
+ ++it0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/* 清空算法列表 */
|
|
|
+void ListFuncActInfo::clearActionList()
|
|
|
+{
|
|
|
+ for(auto& it0 : listFuncActionInfo)
|
|
|
+ {
|
|
|
+ it0->listRoomCamActInfo.clear();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
/* 查找应用信息 */
|
|
|
bool ListFuncActInfo::findAppFunction(const AppFunction func)
|
|
|
{
|