ConsistencyCompareThread.h 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #ifndef CONSISTENCYCOMPARETHREAD_H_
  2. #define CONSISTENCYCOMPARETHREAD_H_
  3. #include "BaseCalculateThread.h"
  4. #include "RingQueueManualMutex.hpp"
  5. #include "AudioData.h"
  6. #include "ConsistencyResult.h"
  7. #define CONSISTENCY_DEBUG false
  8. class CreateWAVThread;
  9. class CreateRecordFileThread;
  10. /**
  11. @brief 计算一致性的线程类
  12. 1、一致性对比线程是调用动态库对比,没有对比参数,不和对比项有关联
  13. 2、这线程计算速度很快,8秒的对比文件20ms即可计算完成,可以将其合并到其他线程中
  14. */
  15. class ConsistencyCompareThread : public BaseCalculateThread
  16. {
  17. public:
  18. ConsistencyCompareThread(CalculateThreadInfo_t& threadInfo);
  19. ~ConsistencyCompareThread() override;
  20. /* 获取一致性比对的结果 */
  21. bool isConsistency() { return m_isConsistency.load(); }
  22. /* 获取不一致性预警 */
  23. bool isNotConsistencyWarning() { return m_isConsistencyWarning.load(); }
  24. /* 判断录音通道是否相等 */
  25. // bool isRoadEqual(const SoundCardRoadInfo_t& roadInfo1, const SoundCardRoadInfo_t& roadInfo2);
  26. /* 这几个函数给外部线程调用,无需单独开启子线程了 */
  27. /* 初始化 */
  28. bool initConsistencyCompare();
  29. /* 比对函数 */
  30. bool compareConsistencyData();
  31. /* 清理数据 */
  32. void clearConsistencyCompareData();
  33. /* 设置是否在检测时间段 */
  34. void setInDetectPeriod(bool isInDetectPeriod) { m_isInDetectPeriod = isInDetectPeriod; }
  35. /* 设置是否开启不一致检测 */
  36. void enableNotConsistencyDetect(bool isNotConsistencyDetect) { m_isEnableNotConsistencyDetect.store(isNotConsistencyDetect); }
  37. protected:
  38. /* 线程功能函数 */
  39. void task() override;
  40. /* 初始化数据 */
  41. bool initData() override;
  42. /* 清理数据 */
  43. void clearData() override;
  44. private:
  45. /* 比对两个wav文件的一致性 */
  46. bool compareConsistency();
  47. /* 根据动态库返回的结果计算一致性 */
  48. bool computeResult();
  49. /* 保存报警信息 */
  50. void saveAlarmInfo();
  51. /* 结束报警 */
  52. void endAlarm();
  53. private:
  54. std::atomic_bool m_isInDetectPeriod = true; /* 是否在检测时段内 */
  55. std::atomic_bool m_isEnableNotConsistencyDetect = true; /* 是否开启不一致检测 */
  56. /* 两个录音通道的信息 */
  57. CompareItemRoadInfo_t m_itemRoadInfo1; /* 对比项通道1信息,这两个给报警信息使用的 */
  58. CompareItemRoadInfo_t m_itemRoadInfo2; /* 对比项通道2信息 */
  59. /* 两个录音通道的线程指针,直接通过录音类获取最新的数据 */
  60. CreateWAVThread* m_pCreateWAVThread1 = nullptr; /* 通道1的录音线程 */
  61. CreateWAVThread* m_pCreateWAVThread2 = nullptr; /* 通道2的录音线程 */
  62. WavFilePath m_wavFilePath1; /* 通道1的wav文件路径 */
  63. WavFilePath m_wavFilePath2; /* 通道2的wav文件路径 */
  64. WavFilePath m_prevWavFilePath1; /* 通道1的上一个wav文件路径 */
  65. WavFilePath m_prevWavFilePath2; /* 通道2的上一个wav文件路径 */
  66. /* ---------------------------------- 动态库检测参数和结果 ---------------------------------- */
  67. double m_sensitivity = 20.0; /* 比对灵敏度,默认20,范围[0-100] */
  68. double m_similarity = 0.0; /* 比对结果相似度 */
  69. /* ---------------------------------- 一致性计算参数 ---------------------------------- */
  70. /* 这些都是从设置动态库中获取 */
  71. int m_numFileDuration = 8; /* 文件对比的时间长度,单位秒 */
  72. int m_numCompareContinue = 3; /* 持续对比次数 */
  73. double m_fNotConsistencyThreshold = 0.6; /* 不相似度阈值,小于这个就不一致的 */
  74. double m_fConsistencyThreshold = 0.7; /* 相似度阈值,高于这个就是一致的 */
  75. // int m_arryAIChangeRetNum[2] = {0}; /* AI对比更正次数,默认10次 */
  76. /* ---------------------------------- 计算的一致性结果 ---------------------------------- */
  77. /* 动态库只检测出相似度,没有给出是否一致的定论,需要手动判断 */
  78. ConsistencyResult_t m_consistencyResult; /* 存储动态库计算的结果,并计算出一致性结论 */
  79. // StConsistencyParam m_consistencyParam; /* 一致性检测需要的参数 */
  80. std::atomic_bool m_isConsistency = true; /* 是否一致性,默认一致性 */
  81. std::atomic_bool m_isConsistencyLatest = true;/* 上一次检测的一致性结果 */
  82. std::atomic_bool m_isConsistencyWarning = false; /* 是否有不一致性预警 */
  83. /* ---------------------------------- 报警信息 ---------------------------------- */
  84. /* 生成报警音频文件的线程 */
  85. CreateRecordFileThread* m_threadCreateAlarmFile1 = nullptr;
  86. CreateRecordFileThread* m_threadCreateAlarmFile2 = nullptr;
  87. /* 一致性报警信息 */
  88. AlarmInfo_t m_alarmConsistencyMain; /* 一致性报警信息,主通道 */
  89. AlarmInfo_t m_alarmConsistencySub; /* 一致性报警信息,次通道 */
  90. };
  91. #endif // CONSISTENCYCOMPARETHREAD_H_