chore: kws 测试
This commit is contained in:
@@ -26,13 +26,13 @@ if [ $(check_disk_space "$BASE_DIR") -eq 1 ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
WORK_DIR="$BASE_DIR/open-xiaoai"
|
WORK_DIR="$BASE_DIR/open-xiaoai/kws"
|
||||||
|
|
||||||
if [ ! -d "$WORK_DIR" ]; then
|
if [ ! -d "$WORK_DIR" ]; then
|
||||||
mkdir -p "$WORK_DIR"
|
mkdir -p "$WORK_DIR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -f "$WORK_DIR/kws/kws" ]; then
|
if [ ! -f "$WORK_DIR/kws" ]; then
|
||||||
echo "🔥 正在下载模型文件..."
|
echo "🔥 正在下载模型文件..."
|
||||||
curl -L -# -o "$WORK_DIR/kws.tar.gz" https://gitee.com/idootop/artifacts/releases/download/open-xiaoai-kws/kws.tar.gz
|
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"
|
tar -xzvf "$WORK_DIR/kws.tar.gz" -C "$WORK_DIR"
|
||||||
@@ -42,12 +42,14 @@ fi
|
|||||||
|
|
||||||
echo "🔥 正在启动唤醒词识别服务..."
|
echo "🔥 正在启动唤醒词识别服务..."
|
||||||
|
|
||||||
"$WORK_DIR/kws/kws" \
|
chmod +x "$WORK_DIR/kws"
|
||||||
|
|
||||||
|
"$WORK_DIR/kws" \
|
||||||
--model-type=zipformer2 \
|
--model-type=zipformer2 \
|
||||||
--tokens="$WORK_DIR/kws/models/tokens.txt" \
|
--tokens="$WORK_DIR/models/tokens.txt" \
|
||||||
--encoder="$WORK_DIR/kws/models/encoder.onnx" \
|
--encoder="$WORK_DIR/models/encoder.onnx" \
|
||||||
--decoder="$WORK_DIR/kws/models/decoder.onnx" \
|
--decoder="$WORK_DIR/models/decoder.onnx" \
|
||||||
--joiner="$WORK_DIR/kws/models/joiner.onnx" \
|
--joiner="$WORK_DIR/models/joiner.onnx" \
|
||||||
--keywords-file="/data/open-xiaoai/kws/keywords.txt" \
|
--keywords-file="/data/open-xiaoai/kws/keywords.txt" \
|
||||||
--provider=cpu \
|
--provider=cpu \
|
||||||
--num-threads=1 \
|
--num-threads=1 \
|
||||||
|
|||||||
@@ -57,6 +57,9 @@ class OpenXiaoAIEngine extends MiGPTEngine {
|
|||||||
timestamp: Date.now(),
|
timestamp: Date.now(),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
} else if (e.event === "kws") {
|
||||||
|
const keyword = e.data;
|
||||||
|
console.log("🔥 唤醒词识别", keyword);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
use std::future::Future;
|
use std::future::Future;
|
||||||
use std::sync::atomic::{AtomicI32, Ordering};
|
use std::sync::atomic::{AtomicU64, Ordering};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
@@ -18,7 +18,7 @@ pub struct KwsMonitor;
|
|||||||
|
|
||||||
static KWS_FILE_PATH: &str = "/tmp/open-xiaoai/kws.log";
|
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 {
|
impl KwsMonitor {
|
||||||
pub async fn start<F, Fut>(on_update: F)
|
pub async fn start<F, Fut>(on_update: F)
|
||||||
@@ -32,8 +32,8 @@ impl KwsMonitor {
|
|||||||
let on_update = Arc::clone(&on_update);
|
let on_update = Arc::clone(&on_update);
|
||||||
async move {
|
async move {
|
||||||
if let FileMonitorEvent::NewLine(content) = event {
|
if let FileMonitorEvent::NewLine(content) = event {
|
||||||
let data = content.split(' ').collect::<Vec<&str>>();
|
let data = content.split('@').collect::<Vec<&str>>();
|
||||||
let timestamp = data[0].parse::<i32>().unwrap();
|
let timestamp = data[0].parse::<u64>().unwrap();
|
||||||
let keyword = data[1].to_string();
|
let keyword = data[1].to_string();
|
||||||
let last_timestamp = LAST_TIMESTAMP.load(Ordering::Relaxed);
|
let last_timestamp = LAST_TIMESTAMP.load(Ordering::Relaxed);
|
||||||
if timestamp != last_timestamp {
|
if timestamp != last_timestamp {
|
||||||
@@ -53,6 +53,7 @@ impl KwsMonitor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn stop() {
|
pub async fn stop() {
|
||||||
|
LAST_TIMESTAMP.store(0, Ordering::Relaxed);
|
||||||
FileMonitor::instance().stop(KWS_FILE_PATH).await;
|
FileMonitor::instance().stop(KWS_FILE_PATH).await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user