Skip to content

Elgar17/kazlab

Repository files navigation

kazlab logo

kazlab

哈萨克语文本转语音、语音识别、文本翻译

Downloads macOS

中文 | English

kazlab 是一个本地优先的哈萨克语 AI 语言实验室,基于 Tauri + React + shadcn/ui 构建,完全离线运行。

kazlab home

  • 引擎sherpa-onnx (C++),调用其 sherpa-onnx-offline-tts 静态二进制。
  • 模型:不随 GitHub 仓库提交;首次使用时由用户在应用内下载。
  • 可选模型:Piper VITS Kazakh models,例如 kk_KZ-issai-high(22050 Hz,high quality)。
  • 说话人:下载支持多说话人的模型后,可在 UI 中实时切换。
  • 音素化:espeak-ng 数据随模型或应用资源提供,遵循其原始许可。

安装

目录结构

kazlab/
├─ src/                       前端(React + TS + Tailwind + shadcn)
├─ src-tauri/                 后端(Rust + Tauri 2)
│  └─ src/tts.rs              TTS 服务封装 (调用 sherpa-onnx-offline-tts)
└─ binaries/
   ├─ gen-tokens.js           tokens.txt 生成辅助脚本
   ├─ sherpa-onnx/            本地 TTS 运行时目录,不提交到 GitHub
   ├─ espeak-ng-data/         本地音素化数据目录,不提交到 GitHub
   └─ models/                 本地模型缓存目录,不提交到 GitHub

启动方法

环境准备

Tauri 需要本机安装 Rust 工具链。如果启动时报错 failed to run cargo metadataNo such file or directory (os error 2),通常是当前终端找不到 cargo

macOS 可用以下命令安装:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
cargo --version

如果已经安装 Rust,但仍然找不到 cargo,重新打开终端,或执行:

source "$HOME/.cargo/env"

开发启动

npm install
npm run prepare:binaries
npm run tauri -- dev

这是推荐的桌面应用开发启动方式,会同时启动 Vite 前端和 Tauri 桌面窗口。 首次 tauri dev 会编译 Rust 后端(耗时较长,~3-5 分钟)。

首次启动时,如果本机还没有模型,应用会进入模型下载页面。请选择下载源 (Hugging Face 或镜像)和模型,下载完成后即可离线使用。模型文件会保存到 应用数据目录,不应提交到 GitHub。

仅启动前端开发服务器(不会启动 Tauri 后端能力):

npm run dev

构建前端产物:

npm run build

构建桌面应用安装包:

npm run prepare:binaries
npm run build:dmg

构建完成后,macOS 安装包会输出到:

src-tauri/target/release/bundle/dmg/

预览已构建的前端产物:

npm run preview

可用 Voices

ID Display ISSAI key Gender
0 Magzhan ISSAI_KazakhTTS2_M2 Male
1 Iseke ISSAI_KazakhTTS_M1_Iseke Male
2 Aida ISSAI_KazakhTTS2_F3 Female
3 Raya ISSAI_KazakhTTS_F1_Raya Female
4 Aigerim ISSAI_KazakhTTS2_F1 Female
5 Aizhan ISSAI_KazakhTTS2_F2 Female

具体 voice 列表来自已下载模型的 speaker_id_map。如果选择的是单说话人模型,UI 中可用的 voice 数量会不同。

端到端命令行验证(不通过 UI)

如果你已经在本机下载了模型,也可以直接调用 sherpa-onnx-offline-tts 验证。下面命令中的模型路径需要替换为你本机实际下载位置:

./binaries/sherpa-onnx/bin/sherpa-onnx-offline-tts \
  --vits-model="$HOME/Library/Application Support/kazlab/models/vits-piper-kk_KZ-issai-high/kk_KZ-issai-high.onnx" \
  --vits-tokens="$HOME/Library/Application Support/kazlab/models/vits-piper-kk_KZ-issai-high/tokens.txt" \
  --vits-data-dir="/path/to/espeak-ng-data" \
  --sid=3 \
  --output-filename=/tmp/test.wav \
  "Сәлеметсіз бе, бұл қазақ тіліндегі мәтін."

GitHub Actions 打包

仓库包含 .github/workflows/release.yml,支持两种方式生成 macOS .dmg

  • 在 GitHub Actions 页面手动运行 Release workflow,会上传 DMG 作为 workflow artifact。
  • 推送形如 v0.1.0 的 tag,会构建 DMG,并以 draft 形式附加到 GitHub Release。

CI 会执行 npm run prepare:binaries 下载 sherpa-onnx-offline-ttsespeak-ng-data。这些第三方运行时资源不会提交到仓库,发布时请同时确认它们各自的许可证要求。

当前 GitHub Actions 产物面向 macOS Apple Silicon。未配置 Apple Developer 证书时,DMG 为未签名构建,首次打开可能被 Gatekeeper 拦截;用户可右键选择“打开”,正式发布建议配置代码签名和 notarization。

许可

  • 模型、espeak-ng-data 与 sherpa-onnx 遵循各自原始许可(Piper / ISSAI / espeak-ng / sherpa-onnx)。
  • 代码部分 MIT。

About

kazlab is an offline Kazakh text-to-speech desktop app

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors