Skip to content

A command line speech recognition client for the other project SR-Server

License

Notifications You must be signed in to change notification settings

Xhen-Starry-Night/SR-Client

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

sr-client - 语音识别客户端工具

sr-client 是一个基于 Rust 开发的高性能语音识别客户端工具,用于与 sr-server 后端服务进行交互。支持单个音频文件转文字、批量音频文件转文字、实时流式音频转文字以及 Shell 自动补全脚本生成功能。

特性

  • 高性能: 使用 Rust 编写,内存安全且执行效率高
  • 跨平台支持: 完美支持 Linux、Windows、macOS 等操作系统
  • 异步优化: 采用异步文件操作,避免阻塞运行时,提升处理效率
  • 并发处理: 批量处理支持多文件并发上传,提高处理速度
  • 流式识别: 支持实时音频数据流传输和实时转录
  • 多种模式: 提供单文件、批量处理、流式和自动补全四种工作模式
  • WebSocket 支持: 使用 WebSocket 协议实现实时语音识别
  • Shell 自动补全: 支持生成多种 Shell 环境的命令自动补全脚本
  • 灵活配置: 支持配置文件和命令行参数
  • 用户友好: 集成彩色输出和实时进度条显示,进度条样式美观(未完成时为橙色,完成后为绿色),提升用户体验
  • 代码规范: 代码风格符合 Rust 行业标准,使用 cargo fmt 和 clippy 优化
  • 模块化架构: 代码已重构为多个模块,提高可维护性和可读性
  • 完善的错误处理: 使用 thiserror 实现自定义错误类型

安装要求

  • Rust 1.70+ 环境
  • 与 sr-server 后端服务正常通信的网络环境

安装

# 克隆项目
git clone <repository-url>

# 进入项目目录
cd sr-client

# 构建项目
cargo build --release

# 或直接运行
cargo run -- [参数]

快速开始

生成 Shell 自动补全脚本

# 生成 bash 自动补全脚本
cargo run -- generate-completions --shell bash

# 生成 zsh 自动补全脚本
cargo run -- generate-completions --shell zsh

流式音频识别(实时转录)

# 实时转录音频文件
cargo run -- --server-url http://localhost:8000 stream ./assets/asr_example_en.wav

单文件转录

# 转录单个音频文件
cargo run -- --server-url http://localhost:8000 single input.wav output.txt

批量处理

# 批量处理多个音频文件
cargo run -- --server-url http://localhost:8000 batch --inputs input1.wav input2.wav --outputs output1.txt output2.txt

详细用法

命令行选项

sr-client [OPTIONS] [COMMAND]

全局选项:

  • --server-url <SERVER_URL>: 设置服务器地址(默认: http://localhost:8000)
  • --create-config: 创建默认配置文件
  • -h, --help: 显示帮助信息
  • -V, --version: 显示版本信息

子命令

generate-completions:

  • 生成 Shell 自动补全脚本
  • 用法: sr-client generate-completions --shell <SHELL_TYPE>
  • 支持的 Shell: bash, zsh, fish, powershell, elvish

single:

  • 处理单个音频文件转录
  • 用法: sr-client single <INPUT_FILE> <OUTPUT_FILE> [OPTIONS]

batch:

  • 批量处理多个音频文件
  • 用法: sr-client batch --inputs <INPUTS>... --outputs <OUTPUTS>... [OPTIONS]

stream:

  • 实时流式音频转录
  • 用法: sr-client stream <SOURCE> [OPTIONS]

单文件处理选项

  • --language <LANGUAGE>: 指定音频语言(例如 zh, en, ja),None 表示自动检测
  • --task <TASK>: 任务类型:转录(transcribe)或翻译(translate),默认为转录
  • --temperature <TEMPERATURE>: 采样温度,控制生成结果的随机性,默认为 0.0

批量处理选项

  • --inputs <INPUTS>...: 输入音频文件列表,至少需要一个文件
  • --outputs <OUTPUTS>...: 对应的输出文本文件列表,数量必须与输入文件数量一致
  • --language <LANGUAGE>: 指定音频语言(例如 zh, en, ja),None 表示自动检测
  • --task <TASK>: 任务类型:转录(transcribe)或翻译(translate),默认为转录
  • --temperature <TEMPERATURE>: 采样温度,控制生成结果的随机性,默认为 0.0

流式处理选项

  • --language <LANGUAGE>: 指定音频语言(例如 zh, en, ja),None 表示自动检测
  • --task <TASK>: 任务类型:转录(transcribe)或翻译(translate),默认为转录

配置文件

使用以下命令创建默认配置文件:

sr-client --create-config

配置文件位于:

  • Linux: ~/.config/sr-client/config.toml
  • macOS: ~/Library/Application Support/sr-client/config.toml
  • Windows: %APPDATA%\sr-client\config.toml

配置文件内容示例:

server_url = "http://localhost:8000"
default_language = null
default_task = "transcribe"
default_temperature = 0.0

支持的音频格式

  • WAV
  • MP3
  • FLAC
  • M4A
  • AAC
  • OPUS

功能对比

功能 传输方式 结果获取 适用场景 用户体验
single 一次性上传完整音频文件 通过任务ID查询进度并获取结果 单个完整音频文件处理 彩色输出,实时进度条显示(橙色/绿色)
batch 批量上传多个文件 通过任务ID查询进度并获取结果 批量处理多个音频文件 彩色输出,进度条显示处理进度和ETA
stream 流式分块上传音频数据 实时获取部分转录结果 实时语音识别、长音频流处理 彩色输出,实时显示转录结果
generate-completions 本地生成脚本 直接输出到标准输出 命令行工具使用 彩色输出,生成各种Shell的补全脚本

用户界面优化

项目经过以下用户界面优化:

  1. 彩色输出:

    • 使用 colored crate 实现彩色终端输出
    • 错误信息用红色显示
    • 成功信息用绿色显示
    • 进度信息用黄色/蓝色显示
  2. 进度指示:

    • 单文件处理:显示实时进度条(橙色未完成,绿色完成)
    • 批量处理:显示带进度条的处理状态,包括已完成/总数和预计完成时间
    • 流式处理:显示音频数据传输进度
    • 进度条样式更优美,纤细连续
  3. 优化的信息显示:

    • 移除表情符号,使用纯文本提供清晰的状态信息
    • 过程中的状态更新
    • 集成服务器端进度查询API,显示真实的转录进度
  4. 错误处理:

    • 清晰的错误信息显示
    • 过程中的状态更新

依赖项

[dependencies]
clap = { version = "4.0", features = ["derive"] }  # 命令行参数解析
clap_complete = "4.0"  # Shell自动补全脚本生成
reqwest = { version = "0.11", features = ["json", "multipart"] }  # HTTP客户端
tokio = { version = "1.0", features = ["full"] }  # 异步运行时
serde = { version = "1.0", features = ["derive"] }  # 序列化/反序列化
serde_json = "1.0"  # JSON处理
thiserror = "1.0"  # 自定义错误类型
toml = "0.8"  # TOML配置文件处理
tokio-tungstenite = "0.20" # WebSocket支持
futures-util = { version = "0.3", default-features = false, features = ["std"] } # 异步流处理
dirs = "5.0" # 获取标准目录路径
colored = "2.0" # 美化输出颜色
indicatif = "0.17" # 进度条显示

开发

项目架构:

  • src/main.rs: 程序入口点
  • src/lib.rs: 模块声明
  • src/api/mod.rs: API请求和响应处理
  • src/cli/mod.rs: 命令行界面逻辑
  • src/config/mod.rs: 配置管理
  • src/errors/mod.rs: 自定义错误类型
  • src/utils/mod.rs: 工具函数(如流式处理)

主要特性:

  • 跨平台兼容性: 使用 dirs crate 处理配置文件路径,确保在不同操作系统上行为一致
  • 异步设计: 使用 tokio 运行时处理所有网络请求和文件操作
  • 错误处理: 使用 thiserror 实现全面的错误处理机制
  • 模块化设计: 代码按功能分解为多个模块,提高可维护性

测试

运行测试:

cargo test

构建项目:

cargo build

许可证

MIT License

About

A command line speech recognition client for the other project SR-Server

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages