9 个稳定版本

2.2.1 2022年11月12日
2.1.0 2022年10月25日
1.6.1 2022年10月10日

#1581命令行工具

每月下载 27 次

MIT/Apache

52KB
1K SLoC

WACR

WACR 是 WebRTC -> VK ASR(语音识别技术)交互的后端。

工作原理

客户端通过 WebRTC 技术调用 WACR 后端。之后,WACR 将 WebRTC 的音频流保存到文件系统中。保存的音频流将通过 API 发送到 VK ACR 后端。然后,WACR 将内存中的识别文本保存并发送给客户端。

用法

从 Cargo 安装并运行二进制文件

cargo install wacr
RUST_LOG=debug;VK_API_SERVICE_TOKEN=XXX;VK_API_SERVICE_KEY=YYY wacr

使用 Cargo 编译和运行

RUST_LOG=debug;VK_API_SERVICE_TOKEN=XXX;VK_API_SERVICE_KEY=YYY cargo run --package wacr --bin wacr

使用 Cargo 编译并运行二进制文件

cargo build --package wacr --bin wacr --release
RUST_LOG=debug;VK_API_SERVICE_TOKEN=XXX;VK_API_SERVICE_KEY=YYY ./target/release/wacr

API

获取 JWT 令牌。

查询必须从 小程序启动参数 中提取

请求

POST http://127.0.0.1:8080/token/generate
Content-Type: application/json

{
  "query": "XXX"
}

响应

{
  "token": "xxx",
  "expiration": 1664718489
}

创建会话

通过 WebRTC 创建连接。必须从获取 JWT 令牌 API 获取 access_token。Offer 是客户端 本地 WebRTC Offer

请求

POST http://127.0.0.1:8080/session/create?access_token=XXX
Content-Type: application/json

{
  "offer": {}
}

响应

{
  "session_id": "a3b26e68-7fda-4534-bbdd-92a98230a824",
  "offer": {}
}

识别语音

从创建会话开始识别接收到的语音。必须从获取 JWT 令牌 API 获取 access_token。

请求

POST http://127.0.0.1:8080/session/asr?access_token=XXX
Content-Type: application/json

{
  "session_id": "a3b26e68-7fda-4534-bbdd-92a98230a824"
}

响应

{
  "text": "Hello world!"
}

监听录制的音频

GET http://127.0.0.1:8080/session/listen/{session_id}?access_token=XXX

可能的错误

基本错误响应

{
  "error": "error occurred"
}

启动环境

必需

VK_API_SERVICE_TOKEN=XXX # Service token for requesting VK API endpoints
VK_API_SERVICE_KEY=YYY # Service key for validating query on token generation

可选

LISTEN_ADDRESS=127.0.0.1:8080 # Listening address
JWT_EXPIRATION=3600 # How many seconds access token will valid
GARBAGE_COLLECTOR_TTL=3600 # How many seconds audio files and text results will alive
SESSION_KEEP_ALIVE_TIMEOUT=10 # How many seconds webrtc session will alive without incoming packets
SESSION_TOTAL_TIMEOUT=100 # Max number of seconds webrtc session will alive
AUDIO_DIR=/tmp # The directory where audio files saving
WEBRTC_PORT_MIN=0 # Minimal available port for webrtc peer connections
WEBRTC_PORT_MAX=0 # Maximal available port for webrtc peer connections
WEBRTC_INTERFACES_ALLOWED= # All interfaces allowed by default. List of allowed network interfaces split by ,
STATIC_DIR= # If set, service will distribute all static from this directory by path /static. Example: /static/index.html

依赖关系

~44–60MB
~1M SLoC