Browse Source

VERSION 1.0.6 - 灰度版本

Your Name 2 years ago
parent
commit
6985ed8995

+ 3 - 3
framework/request/include/BasicConfig.h

@@ -3,8 +3,8 @@
  * @Version: 1.0
  * @Autor: lishengyin
  * @Date: 2022-03-28 09:03:02
- * @LastEditors: Your Name lishengyin@sz-sunwin.com
- * @LastEditTime: 2022-09-04 21:29:28
+ * @LastEditors: lishengyin
+ * @LastEditTime: 2022-09-19 14:14:54
  */
 #ifndef __BASICECONFIG_H_
 #define __BASICECONFIG_H_
@@ -210,7 +210,7 @@ public:
         if(end != doc.FindMember("InferCheckerPort") && doc["InferCheckerPort"].IsString()){
             InferCheckerPort = std::atoi(doc["InferCheckerPort"].GetString());
         }
-        
+
         return true;
     }
 };

BIN
lib/libgsd_modules.so


BIN
lib/libgsd_plugins.so


+ 5 - 1
modules/Expel/src/DevicePlayerV1.cpp

@@ -30,7 +30,11 @@ namespace gsd
     short DevicePlayerV1::getPressure(){
         return pressure;
     }
-
+    
+    /**
+     * @description: 获取PowerOutState
+     * @return {*}
+     */    
     uint8_t DevicePlayerV1::getPowerOutState(){
         return power_out_state;
     }

+ 2 - 1
modules/HttpClient/src/HttpClient.cpp

@@ -4,7 +4,7 @@
  * @Autor: lishengyin
  * @Date: 2022-02-23 09:32:08
  * @LastEditors: lishengyin
- * @LastEditTime: 2022-09-09 15:49:03
+ * @LastEditTime: 2022-09-21 14:38:17
  */
 #include "HttpClient.hpp"
 
@@ -193,6 +193,7 @@ namespace gsd{
             WarnL << "STATUS:" << res->status << ", " << res->body << endl;
         }else{
             ErrorL << "Service unavailable" << endl;
+            result.second = "Service unavailable";
         }
         return result;
     }

+ 13 - 7
modules/InfineFilter/include/InfineFilter.hpp

@@ -4,7 +4,7 @@
  * @Autor: lishengyin
  * @Date: 2022-03-09 10:55:43
  * @LastEditors: lishengyin
- * @LastEditTime: 2022-09-08 14:42:57
+ * @LastEditTime: 2022-09-19 13:57:01
  */
 #ifndef __INFINEFILTER_H_
 #define __INFINEFILTER_H_
@@ -103,6 +103,12 @@ namespace gsd
         int8_t HistoricalJudgment(std::shared_ptr<CNStreamInferData>& cnStreamInferData);
 
         /**
+         * @description: 相似度对比
+         * @return {*}
+         */        
+        int8_t SimilarityJudgment(std::shared_ptr<CNStreamInferData>& cnStreamInferData);
+
+        /**
          * @description: 历史数据检查
          * @param {*}
          * @return {*}
@@ -110,12 +116,6 @@ namespace gsd
         void HistoricalCheck();
 
         /**
-         * @description: 相似度对比
-         * @return {*}
-         */        
-        int8_t SimilarityJudgment(std::shared_ptr<CNStreamInferData>& cnStreamInferData);
-
-        /**
          * @description: 时间对比
          * @return {*}
          */        
@@ -148,6 +148,12 @@ namespace gsd
         int8_t CalculateSimilarity(InferInfo& infer1, InferInfo& infer2, std::shared_ptr<CNStreamInferData>& cnStreamInferData);
 
         /**
+         * @description: 相似库对比
+         * @return {*}
+         */        
+        int8_t SimilarityResult(std::shared_ptr<CNStreamInferData>& cnStreamInferData);
+
+        /**
          * @description: 获取ptr
          * @param {*}
          * @return {*}

+ 90 - 5
modules/InfineFilter/src/InfineFilter.cpp

@@ -4,7 +4,7 @@
  * @Autor: lishengyin
  * @Date: 2022-03-09 10:58:34
  * @LastEditors: lishengyin
- * @LastEditTime: 2022-09-09 17:07:34
+ * @LastEditTime: 2022-09-21 14:14:27
  */
 #include "InfineFilter.hpp"
 
@@ -32,6 +32,8 @@ namespace gsd
         // 过滤小目标
         MinBBoxFilter(cnStreamInferData);
 
+        int result1;
+        int result2;
         switch (filterLevel)
         {
         case 0:
@@ -41,12 +43,15 @@ namespace gsd
             result = this->LastOneJudgment(cnStreamInferData);
             break;
         case 2:
-            result = (this->IntervalJudgment() == OK && this->LastOneJudgment(cnStreamInferData) == OK ? OK : ERR);
+            result1 = this->IntervalJudgment();
+            result2 = this->LastOneJudgment(cnStreamInferData);
+            result = (result1 == OK && result2 == OK ? OK : ERR);
             break;
         case 3:
             result = this->LastOneJudgment(cnStreamInferData);
             if(result == ERR) break;
             this->SimilarityJudgment(cnStreamInferData);
+            if(cnStreamInferData->Objects.size() == 0) result = ERR;
             break;
         default:
             break;
@@ -135,6 +140,7 @@ namespace gsd
      */
     int8_t InfineFilter::LastOneJudgment(std::shared_ptr<CNStreamInferData>& cnStreamInferData){
         static std::shared_ptr<CNStreamInferData> old = nullptr;
+        if(cnStreamInferData->Objects.size() == 0) return OK;
         if(old == nullptr) {
             old = cnStreamInferData;
             return OK;
@@ -150,11 +156,11 @@ namespace gsd
                     }
                 }
             }
-            if(num == old->Objects.size()) {
+            if(num == old->Objects.size() && num != 0) {
                 return ERR;
             }
         }
-        old = cnStreamInferData;
+        if(cnStreamInferData->Objects.size() != 0) old = cnStreamInferData;
         return OK;
     }
 
@@ -242,7 +248,7 @@ namespace gsd
      * @return {*}
      */        
     int8_t InfineFilter::SimilarityJudgment(std::shared_ptr<CNStreamInferData>& cnStreamInferData){
-        //this->SimilarityCheck();
+        this->SimilarityCheck();
         auto task = [&](){
             HistoryData historyData;
             historyData.CnStreamInferData = std::make_shared<CNStreamInferData>();
@@ -262,6 +268,7 @@ namespace gsd
         auto iter_front = LatestDatas.front();
         vector<vector<InferInfo>::iterator> result;
         bool IsResult = false;
+        
         // 对比前两帧
         for(auto iter = cnStreamInferData->Objects.begin(); iter != cnStreamInferData->Objects.end(); iter++){
             IsResult = false;
@@ -315,6 +322,84 @@ namespace gsd
     }
 
     /**
+     * @description: 相似库对比
+     * @return {*}
+     */    
+    int8_t InfineFilter::SimilarityResult(std::shared_ptr<CNStreamInferData>& cnStreamInferData){
+        static queue<HistoryData> nx_latestDatas;
+        auto task = [&](){
+            HistoryData historyData;
+            historyData.CnStreamInferData = std::make_shared<CNStreamInferData>();
+            historyData.CnStreamInferData->StreamName = cnStreamInferData->StreamName;
+            historyData.CnStreamInferData->FrameCount = cnStreamInferData->FrameCount;
+            historyData.CnStreamInferData->width = cnStreamInferData->width;
+            historyData.CnStreamInferData->height = cnStreamInferData->height;
+            historyData.CnStreamInferData->Objects = cnStreamInferData->Objects;
+            historyData.CnStreamInferData->videoPath = cnStreamInferData->videoPath;
+            nx_latestDatas.push(historyData);
+            if(nx_latestDatas.size() >= 3) nx_latestDatas.pop();
+        };
+        vector<vector<InferInfo>::iterator> result;
+        if(nx_latestDatas.empty()){
+            task();
+            if(this->SimilarityDatas.empty()) return OK;
+        }
+        else{
+            bool IsResult = false;
+            auto iter_front = nx_latestDatas.front();
+            for(auto iter = cnStreamInferData->Objects.begin(); iter != cnStreamInferData->Objects.end(); iter++){
+                IsResult = false;
+                for(auto iter1 : iter_front.CnStreamInferData->Objects){
+                    if(CalculateSimilarity(*iter, iter1, cnStreamInferData) == OK){
+                        SimilarityData data;
+                        data.ticker = std::make_shared<Ticker>();
+                        data.info = *iter;
+                        this->SimilarityDatas.push_back(data);
+                        result.push_back(iter);
+                        IsResult = true;
+                        break;
+                    }
+                }
+                if(IsResult) continue;
+                if(nx_latestDatas.size() <= 1) continue;
+                auto iter_back = nx_latestDatas.back();
+                for(auto iter1 : iter_back.CnStreamInferData->Objects){
+                    if(CalculateSimilarity(*iter, iter1, cnStreamInferData) == OK){
+                        SimilarityData data;
+                        data.ticker = std::make_shared<Ticker>();
+                        data.info = *iter;
+                        this->SimilarityDatas.push_back(data);
+                        result.push_back(iter);
+                        break;
+                    }
+                }
+            }
+            for(auto iter = result.begin(); iter != result.end(); iter++){
+                cnStreamInferData->Objects.erase(*iter);
+            }
+            result.clear();
+            task();
+        }
+        if(this->SimilarityDatas.empty()) return OK;
+        for(auto iter = cnStreamInferData->Objects.begin(); iter != cnStreamInferData->Objects.end(); iter++){
+            for(auto iter1 = this->SimilarityDatas.begin(); iter1 != this->SimilarityDatas.end(); iter1++){
+                if(CalculateSimilarity(*iter, iter1->info, cnStreamInferData) == OK){
+                    iter1->info = *iter;
+                    iter1->ticker->resetTime();
+                    result.push_back(iter);
+                    break;
+                }
+            }
+        }
+        if(result.empty()) return OK;
+        // clear
+        for(auto iter = result.begin(); iter != result.end(); iter++){
+            cnStreamInferData->Objects.erase(*iter);
+        }
+        return OK;
+    }
+
+    /**
      * @description: 时间对比
      * @return {*}
      */        

+ 3 - 3
modules/config/include/config.hpp

@@ -3,8 +3,8 @@
  * @Version: 1.0
  * @Autor: lishengyin
  * @Date: 2022-03-07 11:52:08
- * @LastEditors: Your Name lishengyin@sz-sunwin.com
- * @LastEditTime: 2022-09-04 21:31:21
+ * @LastEditors: lishengyin
+ * @LastEditTime: 2022-09-19 14:15:20
  */
 #ifndef __CONFIG_H_
 #define __CONFIG_H_
@@ -24,7 +24,7 @@ using namespace inifile;
 
 #define GSD_MAJOR_VERSION 1
 #define GSD_MINOR_VERSION 0
-#define GSD_PATCH_VERSION 5
+#define GSD_PATCH_VERSION 6
 
 class config
 {

+ 2 - 2
modules/config/src/config.cpp

@@ -4,7 +4,7 @@
  * @Autor: lishengyin
  * @Date: 2022-03-07 11:52:23
  * @LastEditors: Your Name lishengyin@sz-sunwin.com
- * @LastEditTime: 2022-09-04 21:31:30
+ * @LastEditTime: 2022-09-19 23:06:36
  */
 #include "config.hpp"
 #include "Shell.h"
@@ -188,7 +188,7 @@ bool config::getBasicConfig(){
                     this->InferChecker = basicConfig.InferChecker;
                     this->InferCheckerIP = basicConfig.InferCheckerIP;
                     this->InferCheckerPort = basicConfig.InferCheckerPort;
-
+                    
                     if(basicConfig.com_port != "") this->comPort = basicConfig.com_port;
 
                     if(!save) return false;

+ 12 - 6
plugins/MonitorPlugin/src/MonitorPlugin.cpp

@@ -120,18 +120,24 @@ namespace gsd
                 std::string _ImageBase64 = data.ImageBase64;
                 data.ImageBase64 = "";
                 std::string _json;
+                data.StreamName = config::getPtr()->getSimCode();
                 data.objectToJson(_json);
                 auto checkResultMsg = HttpPlugin::getPtr()->getCheck(_ImageBase64, _json);
                 if(checkResultMsg.first == false && checkResultMsg.second == "") {
                     return false;
                 }
-                CNStreamInferData ChectResult;
-                if(ChectResult.jsonToObject(checkResultMsg.second)){
-                    if(ChectResult.Objects.empty()) {
-                        return false;
+                // 避免gsd—check服务失效
+                if(checkResultMsg.second != "Service unavailable"){
+                    CNStreamInferData ChectResult;
+                    if(ChectResult.jsonToObject(checkResultMsg.second)){
+                        if(ChectResult.Objects.empty()) {
+                            return false;
+                        }
+                        // 以纠察器的结果为准
+                        cnstreamInferData->Objects = ChectResult.Objects;
+                        // 相识库数据对比, 避免定点的误识别 
+                        InfineFilter::getPtr()->SimilarityResult(cnstreamInferData);
                     }
-                    // 以纠察器的结果为准
-                    cnstreamInferData->Objects = ChectResult.Objects;
                 }
             }
             // 解析数据成功

+ 1 - 1
tools/Deploy.sh

@@ -3,7 +3,7 @@
  # @Author: Your Name lishengyin@sz-sunwin.com
  # @Date: 2022-09-09 17:09:07
  # @LastEditors: lishengyin
- # @LastEditTime: 2022-09-15 09:19:27
+ # @LastEditTime: 2022-09-21 14:38:57
  # @FilePath: /gsd/tools/Deploy.sh
  # @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 ###