From 8226125840a2676373ea003c8f6552a591ab9163 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Sat, 4 Mar 2023 19:15:53 +0800 Subject: [PATCH] add wakeup_processer --- CMakeLists.txt | 9 +++- src/service/voiceprocess/asr_service.cpp | 0 src/service/voiceprocess/asr_service.hpp | 0 .../voiceprocess/beforeasr_voiceprocesser.cpp | 0 .../voiceprocess/beforeasr_voiceprocesser.hpp | 0 .../voiceprocess/beforewakeup_voiceprocesser.cpp | 0 .../voiceprocess/beforewakeup_voiceprocesser.hpp | 0 src/service/voiceprocess/voiceprocess_service.cpp | 0 src/service/voiceprocess/voiceprocess_service.hpp | 0 src/service/voiceprocess/wakeup_processer.cpp | 53 ++++++++++++++++++++ src/service/voiceprocess/wakeup_processer.hpp | 57 ++++++++++++++++++++++ 11 files changed, 117 insertions(+), 2 deletions(-) create mode 100644 src/service/voiceprocess/asr_service.cpp create mode 100644 src/service/voiceprocess/asr_service.hpp create mode 100644 src/service/voiceprocess/beforeasr_voiceprocesser.cpp create mode 100644 src/service/voiceprocess/beforeasr_voiceprocesser.hpp create mode 100644 src/service/voiceprocess/beforewakeup_voiceprocesser.cpp create mode 100644 src/service/voiceprocess/beforewakeup_voiceprocesser.hpp create mode 100644 src/service/voiceprocess/voiceprocess_service.cpp create mode 100644 src/service/voiceprocess/voiceprocess_service.hpp create mode 100644 src/service/voiceprocess/wakeup_processer.cpp create mode 100644 src/service/voiceprocess/wakeup_processer.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 56c98db..8130841 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -78,9 +78,14 @@ zadd_executable_simple( src/service/device_io_service_mock.cpp src/service/main_control_service.cpp src/service/light_control_service.cpp - src/service/report_service.cpp) + src/service/report_service.cpp + src/service/voiceprocess/asr_service.cpp + src/service/voiceprocess/beforeasr_voiceprocesser.cpp + src/service/voiceprocess/beforewakeup_voiceprocesser.cpp + src/service/voiceprocess/voiceprocess_service.cpp + src/service/voiceprocess/wakeup_processer.cpp) zadd_executable_simple(TARGET alsaplayer_main.out SRC dep/zlinuxcomponents/alsaplayer/alsaplayer_main.cpp) zadd_executable_simple(TARGET audio_recorder_main.out SRC - dep/zlinuxcomponents/audio/audio_recorder_main.cpp) \ No newline at end of file + dep/zlinuxcomponents/audio/audio_recorder_main.cpp) diff --git a/src/service/voiceprocess/asr_service.cpp b/src/service/voiceprocess/asr_service.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/service/voiceprocess/asr_service.hpp b/src/service/voiceprocess/asr_service.hpp new file mode 100644 index 0000000..e69de29 diff --git a/src/service/voiceprocess/beforeasr_voiceprocesser.cpp b/src/service/voiceprocess/beforeasr_voiceprocesser.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/service/voiceprocess/beforeasr_voiceprocesser.hpp b/src/service/voiceprocess/beforeasr_voiceprocesser.hpp new file mode 100644 index 0000000..e69de29 diff --git a/src/service/voiceprocess/beforewakeup_voiceprocesser.cpp b/src/service/voiceprocess/beforewakeup_voiceprocesser.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/service/voiceprocess/beforewakeup_voiceprocesser.hpp b/src/service/voiceprocess/beforewakeup_voiceprocesser.hpp new file mode 100644 index 0000000..e69de29 diff --git a/src/service/voiceprocess/voiceprocess_service.cpp b/src/service/voiceprocess/voiceprocess_service.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/service/voiceprocess/voiceprocess_service.hpp b/src/service/voiceprocess/voiceprocess_service.hpp new file mode 100644 index 0000000..e69de29 diff --git a/src/service/voiceprocess/wakeup_processer.cpp b/src/service/voiceprocess/wakeup_processer.cpp new file mode 100644 index 0000000..aca6376 --- /dev/null +++ b/src/service/voiceprocess/wakeup_processer.cpp @@ -0,0 +1,53 @@ +#include "wakeup_processer.hpp" +using namespace std; +using namespace iflytop; +using namespace core; + +#define ORDER_PATH "precise-engine/precise-engine" +#define WAKEUP_MODULE_PATH "module/wakeup.pb" +#define CHUNK_SIZE "2048" + +void WakeupProcesser::initialize() { + wakeupProcesser.reset(new MycroftPreciseWapper()); + wakeupProcesser->initialize(ORDER_PATH, WAKEUP_MODULE_PATH, CHUNK_SIZE); +} +void WakeupProcesser::dumpwakeup_info(float source) { + if (source > 0.9) { + logger->info("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++{}", source); + } else if (source > 0.8) { + logger->info("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ {}", source); + } else if (source > 0.7) { + logger->info("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ {}", source); + } else if (source > 0.6) { + logger->info("++++++++++++++++++++++++++++++++++++++++++++++++++ {}", source); + } else if (source > 0.4) { + logger->info("++++++++++++++++++++++++++++++++++++++++ {}", source); + } else if (source > 0.3) { + logger->info("++++++++++++++++++++++++++++++ {}", source); + } else if (source > 0.2) { + logger->info("++++++++++++++++++++ {}", source); + } else if (source > 0.1) { + logger->info("++++++++++ {}", source); + } +} + +void WakeupProcesser::processVoice(uint8_t* voice, size_t voiceLen) { + wakeupProcesser->processVoice(voice, voiceLen); + wakeupProcesser->regWakeupCB([&](float wakeupscore) { + if (!wakeupflag) { + if (wakeupscore > 0.1) { + dumpwakeup_info(wakeupscore); + } + if (!wakeupflag && wakeupscore > 0.60) { + wakeupflag = true; + logger->info("detect wakeup signal {}", wakeupscore); + last_wakeup_timepoint = tu_steady().now(); + onWakeupSignal(wakeupscore); + } + } else { + if (wakeupscore < 0.5 && tu_steady().elapsedTimeMs(last_wakeup_timepoint) >= 1500) { + wakeupflag = false; + } + } + }); +} diff --git a/src/service/voiceprocess/wakeup_processer.hpp b/src/service/voiceprocess/wakeup_processer.hpp new file mode 100644 index 0000000..e0f83b6 --- /dev/null +++ b/src/service/voiceprocess/wakeup_processer.hpp @@ -0,0 +1,57 @@ +// +// Created by zwsd +// + +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "iflytopcpp/core/basic/nod/nod.hpp" +#include "iflytopcpp/core/components/time_util.hpp" +#include "iflytopcpp/core/spdlogfactory/logger.hpp" +#include "iflytopcpp/core/thread/thread.hpp" +#include "zlinuxcomponents/mycroft_precise/mycroft_precise_wapper.hpp" + +/** + * @brief + * + * service: WakeupProcesser + * + * 监听事件: + * 依赖状态: + * 依赖服务: + * 作用: + * + */ + +namespace iflytop { +using namespace std; +using namespace core; +class WakeupProcesser : public enable_shared_from_this { + ENABLE_LOGGER(WakeupProcesser); + shared_ptr wakeupProcesser; + bool wakeupflag = false; + tp_steady last_wakeup_timepoint; + function m_cbfunc; + + public: + nod::signal onWakeupSignal; + + public: + WakeupProcesser(){}; + + void initialize(); + + void processVoice(uint8_t* voice, size_t voiceLen); + + private: + void dumpwakeup_info(float source); +}; +} // namespace iflytop \ No newline at end of file