ConsistencyCompareThread.h 5.1 KB

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