diff --git a/examples/kws/init.sh b/examples/kws/init.sh index a77eb56..cf4fd8f 100644 --- a/examples/kws/init.sh +++ b/examples/kws/init.sh @@ -26,13 +26,13 @@ if [ $(check_disk_space "$BASE_DIR") -eq 1 ]; then fi -WORK_DIR="$BASE_DIR/open-xiaoai" +WORK_DIR="$BASE_DIR/open-xiaoai/kws" if [ ! -d "$WORK_DIR" ]; then mkdir -p "$WORK_DIR" fi -if [ ! -f "$WORK_DIR/kws/kws" ]; then +if [ ! -f "$WORK_DIR/kws" ]; then echo "πŸ”₯ ζ­£εœ¨δΈ‹θ½½ζ¨‘εž‹ζ–‡δ»Ά..." curl -L -# -o "$WORK_DIR/kws.tar.gz" https://gitee.com/idootop/artifacts/releases/download/open-xiaoai-kws/kws.tar.gz tar -xzvf "$WORK_DIR/kws.tar.gz" -C "$WORK_DIR" @@ -42,12 +42,14 @@ fi echo "πŸ”₯ ζ­£εœ¨ε―εŠ¨ε”€ι†’θ―θ―†εˆ«ζœεŠ‘..." -"$WORK_DIR/kws/kws" \ +chmod +x "$WORK_DIR/kws" + +"$WORK_DIR/kws" \ --model-type=zipformer2 \ - --tokens="$WORK_DIR/kws/models/tokens.txt" \ - --encoder="$WORK_DIR/kws/models/encoder.onnx" \ - --decoder="$WORK_DIR/kws/models/decoder.onnx" \ - --joiner="$WORK_DIR/kws/models/joiner.onnx" \ + --tokens="$WORK_DIR/models/tokens.txt" \ + --encoder="$WORK_DIR/models/encoder.onnx" \ + --decoder="$WORK_DIR/models/decoder.onnx" \ + --joiner="$WORK_DIR/models/joiner.onnx" \ --keywords-file="/data/open-xiaoai/kws/keywords.txt" \ --provider=cpu \ --num-threads=1 \ diff --git a/examples/migpt/migpt/xiaoai.ts b/examples/migpt/migpt/xiaoai.ts index 66a6a25..b108710 100644 --- a/examples/migpt/migpt/xiaoai.ts +++ b/examples/migpt/migpt/xiaoai.ts @@ -57,6 +57,9 @@ class OpenXiaoAIEngine extends MiGPTEngine { timestamp: Date.now(), }); } + } else if (e.event === "kws") { + const keyword = e.data; + console.log("πŸ”₯ ε”€ι†’θ―θ―†εˆ«", keyword); } }; diff --git a/packages/client-rust/src/services/monitor/kws.rs b/packages/client-rust/src/services/monitor/kws.rs index b81c463..4113df5 100644 --- a/packages/client-rust/src/services/monitor/kws.rs +++ b/packages/client-rust/src/services/monitor/kws.rs @@ -1,5 +1,5 @@ use std::future::Future; -use std::sync::atomic::{AtomicI32, Ordering}; +use std::sync::atomic::{AtomicU64, Ordering}; use std::sync::Arc; use serde::{Deserialize, Serialize}; @@ -18,7 +18,7 @@ pub struct KwsMonitor; static KWS_FILE_PATH: &str = "/tmp/open-xiaoai/kws.log"; -static LAST_TIMESTAMP: AtomicI32 = AtomicI32::new(0); +static LAST_TIMESTAMP: AtomicU64 = AtomicU64::new(0); impl KwsMonitor { pub async fn start(on_update: F) @@ -32,8 +32,8 @@ impl KwsMonitor { let on_update = Arc::clone(&on_update); async move { if let FileMonitorEvent::NewLine(content) = event { - let data = content.split(' ').collect::>(); - let timestamp = data[0].parse::().unwrap(); + let data = content.split('@').collect::>(); + let timestamp = data[0].parse::().unwrap(); let keyword = data[1].to_string(); let last_timestamp = LAST_TIMESTAMP.load(Ordering::Relaxed); if timestamp != last_timestamp { @@ -53,6 +53,7 @@ impl KwsMonitor { } pub async fn stop() { + LAST_TIMESTAMP.store(0, Ordering::Relaxed); FileMonitor::instance().stop(KWS_FILE_PATH).await; } }