InfineFilter.hpp 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. /*
  2. * @Description:
  3. * @Version: 1.0
  4. * @Autor: lishengyin
  5. * @Date: 2022-03-09 10:55:43
  6. * @LastEditors: lishengyin
  7. * @LastEditTime: 2022-09-08 14:42:57
  8. */
  9. #ifndef __INFINEFILTER_H_
  10. #define __INFINEFILTER_H_
  11. #include <iostream>
  12. #include "Notices.h"
  13. #include "Util/util.h"
  14. #include "Util/logger.h"
  15. #include "Network/Socket.h"
  16. #include "Util/TimeTicker.h"
  17. #include "Util/NoticeCenter.h"
  18. #include "Poller/Timer.h"
  19. #include "CNStreamInferData.h"
  20. #include "config.hpp"
  21. #include <cmath>
  22. #include <queue>
  23. using namespace std;
  24. using namespace toolkit;
  25. namespace gsd
  26. {
  27. // 推理过滤器
  28. class InfineFilter
  29. {
  30. private:
  31. struct HistoryData
  32. {
  33. std::shared_ptr<Ticker> ticker = nullptr;
  34. std::shared_ptr<CNStreamInferData> CnStreamInferData = nullptr;
  35. };
  36. // 相似数据
  37. struct SimilarityData
  38. {
  39. std::shared_ptr<Ticker> ticker = nullptr;
  40. InferInfo info;
  41. };
  42. private:
  43. InfineFilter(){
  44. }
  45. InfineFilter(InfineFilter&) = delete;
  46. InfineFilter& operator=(const InfineFilter&) = delete;
  47. // 灵敏度 0,1,2,3
  48. // 0 - 不过滤
  49. // 1 - 参考上一个坐标、大小、数量, 如果类似则过滤
  50. // 2 - 在1的基础上加入 时间间隔,如每2秒取一次结果
  51. // 3 - 记录每一个结果,并设置超时机制,未超时时:判断当前推理结果与过去的坐标、大小、数量是否类似,类似则过滤
  52. // 超时时:舍弃历史记录
  53. int sensitivity = 2; // 灵敏度
  54. // 0 - 不过滤
  55. // 1 - 参考上一个坐标、大小、数量, 如果类似则过滤
  56. // 2 - 在1的基础上加入 时间间隔,如每2秒取一次结果
  57. // 3 - 记录每一个结果,并设置超时机制,未超时时:判断当前推理结果与过去的坐标、大小、数量是否类似,类似则过滤
  58. // 超时时:舍弃历史记录
  59. int filterLevel = 2; // 过滤器等级
  60. int interval = 2000; // 时间间隔
  61. vector<HistoryData> HistoryDatas;
  62. queue<HistoryData> LatestDatas;
  63. vector<SimilarityData> SimilarityDatas;
  64. int TimeOut = 10 * 60 * 1000;
  65. Timer::Ptr timer = nullptr;
  66. private:
  67. /**
  68. * @description: 跟上一次的判断结果
  69. * @param {*}
  70. * @return {*}
  71. */
  72. int8_t LastOneJudgment(std::shared_ptr<CNStreamInferData>& cnStreamInferData);
  73. /**
  74. * @description:时间间隔
  75. * @param {*}
  76. * @return {*}
  77. */
  78. int8_t IntervalJudgment();
  79. /**
  80. * @description: 历史判定
  81. * @param {*}
  82. * @return {*}
  83. */
  84. int8_t HistoricalJudgment(std::shared_ptr<CNStreamInferData>& cnStreamInferData);
  85. /**
  86. * @description: 历史数据检查
  87. * @param {*}
  88. * @return {*}
  89. */
  90. void HistoricalCheck();
  91. /**
  92. * @description: 相似度对比
  93. * @return {*}
  94. */
  95. int8_t SimilarityJudgment(std::shared_ptr<CNStreamInferData>& cnStreamInferData);
  96. /**
  97. * @description: 时间对比
  98. * @return {*}
  99. */
  100. void SimilarityCheck();
  101. public:
  102. using Ptr = std::shared_ptr<InfineFilter>;
  103. ~InfineFilter(){}
  104. /**
  105. * @description: 小目标过滤器
  106. * @return {*}
  107. */
  108. int8_t MinBBoxFilter(std::shared_ptr<CNStreamInferData>& cnStreamInferData);
  109. /**
  110. * @description: 判定结果
  111. * @param {*}
  112. * @return {*}
  113. */
  114. int8_t judgementResult(std::shared_ptr<CNStreamInferData>& cnStreamInferData);
  115. /**
  116. * @description: 判定是否相识
  117. * @param {InferInfo&} infer1
  118. * @param {InferInfo&} infer2
  119. * @return {*}
  120. */
  121. int8_t CalculateSimilarity(InferInfo& infer1, InferInfo& infer2, std::shared_ptr<CNStreamInferData>& cnStreamInferData);
  122. /**
  123. * @description: 获取ptr
  124. * @param {*}
  125. * @return {*}
  126. */
  127. static std::shared_ptr<InfineFilter> getPtr();
  128. /**
  129. * @description: 设置等级
  130. * @param {int} FilterLevel
  131. * @return {*}
  132. */
  133. int8_t setFilterLevel(int FilterLevel);
  134. /**
  135. * @description: 设置时间间隔
  136. * @param {int} Interval
  137. * @return {*}
  138. */
  139. int8_t setInterval(int Interval);
  140. /**
  141. * @description: 设置超时时间
  142. * @param {int} timeOut
  143. * @return {*}
  144. */
  145. int8_t setTimeOut(int timeOut);
  146. /**
  147. * @description: getIou
  148. * @return {*}
  149. */
  150. float getIou(InferInfo infer1, InferInfo infer2, std::shared_ptr<CNStreamInferData>& cnStreamInferData);
  151. public:
  152. double bboxSize = 0.0;
  153. };
  154. } // namespace gsd
  155. #endif