本目錄包含 Unsaycret 的後端 API 服務,基於 FastAPI 開發。
版本: v0.4.2
最後更新: 2025-11-28
Unsaycret-API 是一套模組化的語音處理系統,整合語音分離、說者辨識、語音辨識、API 服務,並支援 Weaviate 向量資料庫串接。 專案執行後會啟動 API 伺服器,以呼叫 API 的方式使用所有功能。
- 🎙 語者分離:採用 SpeechBrain Sepformer (2人) / ConvTasNet (3人),支援多人語音分離
- 🧠 語音辨識(ASR):Faster-Whisper,支援 GPU/CPU 動態切換,逐詞時間戳與信心值
- 🗣 語者識別:Wespeaker wespeaker-voxceleb-resnet293-LM 模型
- 向量維度 192,支援高精度聲紋比對
- 自動聲紋更新與加權移動平均
- 支援多聲紋映射(一人多種聲音環境)
- 🛜 API 服務:FastAPI 提供完整的 RESTful 與 WebSocket 介面
- 🧠 Weaviate V2 整合:語音向量與辨識結果存入 Weaviate V2,支援高效語者搜尋與比對
- ⚙️ 分層配置:環境變數(.env) 與應用常數(constants.py) 分離管理
├── .env # 環境相關配置 (不納入版控)
├── .env.example # 配置範例檔案
├── CONFIG_README.md # 配置說明文檔
├── utils/
│ ├── env_config.py # 環境變數載入
│ └── constants.py # 演算法常數定義
Unsaycret-API/
├── api/ # FastAPI 應用程式層
│ ├── api.py # HTTP API 入口與路由定義
│ └── README.md
├── services/ # 資料存取門面
│ └── data_facade.py # DataFacade: 統一對外資料操作介面
├── modules/ # 核心業務模組
│ ├── asr/ # 語音辨識 (Faster-Whisper)
│ ├── database/ # Weaviate V2 資料庫操作
│ │ ├── database.py
│ │ └── init_v2_collections.py
│ ├── identification/ # 語者識別 (Wespeaker wespeaker-voxceleb-resnet293-LM)
│ ├── management/ # 語者管理
│ └── separation/ # 語者分離 (Sepformer/ConvTasNet)
├── pipelines/ # 處理流程編排
│ └── orchestrator.py # 分離+辨識+ASR 整合流程
├── utils/ # 系統工具
│ ├── env_config.py
│ ├── constants.py
│ └── logger.py # 統一日誌管理
└── weaviate_study/ # Weaviate V2 開發工具
├── npy_to_weaviate.py # 匯入現有測試聲紋向量資料
└── README.md
說明:
services/data_facade.py為資料存取門面,API 層所有資料查詢、異動、驗證等操作皆透過 DataFacade 對外暴露,實現業務邏輯與資料層分離。modules/內為各功能子模組,專注於演算法與資料處理。
複製並配置環境變數:
cp .env.example .env
# 自行編輯 .env 檔案,針對本地調整以下設定:
# - WEAVIATE_HOST=localhost
# - WEAVIATE_PORT=8080
# - API_HOST=0.0.0.0
# - API_PORT=8000
# - HF_ACCESS_TOKEN=hf_xxx... (PyAnnote 模型需要)
# 其他設定可自行判斷安裝相依套件:
# 基本安裝
pip install -r requirements-base.txt
# GPU 支援 (可選)
pip install -r requirements-gpu.txt
# CPU 專用 (較輕量)
pip install -r requirements-cpu.txt啟動 Weaviate V2 資料庫:
docker-compose up -d等待資料庫就緒後,直接啟動 API:
python main.py系統會自動:
- 檢查並初始化 V2 資料庫集合
- 載入必要的 AI 模型
- 啟動 FastAPI 服務於 http://localhost:8000
存取以下網址:
- API 文檔: http://localhost:8000/docs
- ReDoc 文檔: http://localhost:8000/redoc
- Weaviate 控制台: http://localhost:8080
- 語音轉錄:
POST /transcribe- 單檔語音轉錄(分離+辨識+ASR) - 批次轉錄:
POST /transcribe_dir- 批次轉錄(目錄/ZIP檔) - 即時處理:
WS /ws/stream?session={uuid}- 即時語音處理串流
- 語者管理: 完整的CRUD操作(查詢、更新、刪除)
- 會議管理: 建立、查詢會議記錄(支援級聯刪除)
- 語音記錄: 管理語音片段和轉錄內容
- 關聯查詢: 語者-會議-語音記錄關聯查詢
- 語音驗證: 識別語者身份
- 聲紋轉移: 合併語者聲紋資料
詳細的API端點說明、請求格式、回應範例請參考:
- API文檔: API_DOCUMENTATION.md
- 互動式文檔: http://localhost:8000/docs
- ReDoc文檔: http://localhost:8000/redoc
# 基礎功能測試
python examples/test_all_apis.py
# 綜合測試(推薦)
python examples/test_comprehensive_apis.py測試指南請參考:examples/API_TEST_GUIDE.md
本系統使用 4 個主要集合,支援完整的資料關聯與級聯操作:
語者基本資訊,包含姓名、性別、活動記錄等
語者聲紋向量資料,支援向量相似度搜尋
會議/對話場次資料,記錄時間、參與者等資訊
- 🔗 級聯刪除: 刪除會議時自動清理所有關聯的語音記錄
語音片段記錄,包含文字內容、時間戳與語者關聯
資料完整性: 系統實現了完整的級聯刪除機制,確保不會產生孤立記錄
適用於不同環境間變動的設定:
# API 服務配置
API_HOST=0.0.0.0
API_PORT=8000
# Weaviate 資料庫配置
WEAVIATE_HOST=localhost
WEAVIATE_PORT=8080
# 檔案路徑配置
MODELS_BASE_DIR=./models演算法固定核心參數,經過實驗調校:
# 語者識別閾值(Wespeaker 優化版)
THRESHOLD_LOW = 0.11 # 過於相似,不更新向量
THRESHOLD_UPDATE = 0.22 # 相似度足夠,更新向量
THRESHOLD_NEW = 0.39 # 超過此值視為新語者
# 模型配置
DEFAULT_WHISPER_MODEL = "medium"
WESPEAKER_SPEAKER_MODEL = "wespeaker/wespeaker-voxceleb-resnet293-LM"
SPEAKER_MODEL_TYPE = "wespeaker" # 可選: "wespeaker" / "speechbrain" / "pyannote"-
環境變數 (.env): 服務連接、路徑、硬體設定
-
應用常數 (constants.py): 演算法參數、模型名稱、技術規格
-
utils/
其他輔助腳本(如日誌、同步工具)。
- 可使用
weaviate_study/npy_to_weaviate.py匯入現有 5 筆聲紋資料
# 匯入預設測試聲紋資料到資料庫
python -m weaviate_study/npy_to_weaviate.py# 匯入現有聲紋資料到 V2 資料庫
python weaviate_study/npy_to_weaviate.py
# 重置並重新建立 V2 集合
python weaviate_study/create_reset_collections.py
# 查看資料庫目前資料
python weaviate_study/tool_search.py
# 也可使用 localhost:8081 進入 Weaviate UI 控制台- Python 版本:Python 3.10+ (建議使用 Python 3.12)
- 作業系統:Windows 10/11, Linux, macOS
- 硬體需求:
- 最低:8GB RAM,4核心 CPU
- 建議:16GB+ RAM,GPU 加速(CUDA 支援)以提高處理速度
- Docker:用於 Weaviate 資料庫部署
- 找不到 .env 檔案:複製
.env.example為.env並調整設定 - Weaviate 連接失敗:確認 Docker 服務運行且端口未被占用
- 模型下載失敗:檢查網路連接,系統會自動重試下載
- GPU 記憶體不足:設定
FORCE_CPU=true強制使用 CPU - PyAnnote 模型載入失敗:確認
.env中設定了有效的HF_ACCESS_TOKEN
# 強制使用 CPU(忽略 GPU)
FORCE_CPU=true
# 指定 CUDA 設備索引(多GPU環境,預設為 0)
CUDA_DEVICE_INDEX=0注意:
FORCE_CPU=true會強制所有模組使用 CPU,適用於GPU記憶體不足的情況CUDA_DEVICE_INDEX用於多GPU系統中指定要使用的GPU(從0開始編號)- 系統會自動檢查指定的GPU是否存在,不存在時會回退到 GPU 0
- API_DOCUMENTATION.md - 完整 API 文檔與使用說明
- examples/API_TEST_GUIDE.md - API 測試指南
- CONFIG_README.md - 配置系統詳細說明
- 各模組 README - 詳見對應模組目錄
此專案採用 MIT 授權條款 - 詳見 LICENSE 檔案
- 語者分離: EvanLo62
- 語者識別: CYouuu
- 語音轉文字: gino287
- API & 整合: 專案團隊
- 資料庫設計: CYouuu
📞 技術支援: 如遇到問題,請建立 GitHub Issue 或參考文檔說明。