介紹說明
這是一個離線執行的本地語音辨識轉文字工具,基於 fast-whipser 開源模型,可將視訊/音訊中的人類聲音辨識並轉為文字,可輸出 json 格式、 srt 字幕帶時間戳格式、純文字格式。可用於替代 openai 的語音辨識介面或百度語音辨識等,準確率基本等同 openai 官方 api 介面。
前置準備
安裝 CUDA
由於要使用 GPU ,所以需要安裝 CUDA ,這裏使用公有雲,可以自動完成安裝
首次登入,發現正在安裝 C UDA :
完成後,使用 nvidia-smi 檢查:
安裝 NVIDIA Container Toolkit
用於在容器中使用 CUDA
參考:
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
配置 docker:
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
完成後,使用以下指令檢查:
docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
安裝執行
為了方便演示,將使用 docker 的方式來安裝執行 stt 。
準備 Dockerfile
FROM nvidia/cuda:12.3.2-cudnn9-runtime-ubuntu22.04
# 安裝 python
RUN apt-get update
RUN apt-getinstall python3 python3-pip -y
# 安裝 git
RUN apt-getinstall git -y
# 下載程式碼
RUN git clone https://github.com/jianchang512/stt.git
WORKDIR /stt
RUN pip install -r requirements.txt
RUN pip uninstall -y torch
RUN pip install torch --index-url https://download.pytorch.org/whl/cu121
# 添加環境變量
ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/python3.10/dist-packages/nvidia/cublas/lib:/usr/local/lib/python3.10/dist-packages/nvidia/cudnn/lib
CMD ["python3", "start.py"]
構建 docker 映像
在計畫根目錄或 Dockerfile 所在目錄執行以下指令:
docker build -t stt:latest -f ./Dockerfile .
dockerimages | grep stt
使用簡介
映像打好後就可以使用 stt 了。
準備啟動配置檔 set.ini
; after update set , please restart the app
; ip:port 監聽地址和埠
web_address=0.0.0.0:9977
;en or zh
lang=
; cpu or cuda,使用 cpu 還是 gpu,這裏使用 gpu
devtype=cuda
; int8 or float32 only gpu
cuda_com_type=int8
;Reducing these two numbers will use less graphics memory
beam_size=1
best_of=1
;vad set to false,use litter GPU memory,true is more
vad=true
;0 is use litter GPU,other is more
temperature=0
;false is litter GPU,ture is more
condition_on_previous_text=false
initial_prompt_zh=以下是普通話內容,請轉錄為中文簡體。
下載模型檔
可以在以下地址下載:
https://github.com/jianchang512/stt/releases/tag/0.0
這裏使用 large-v3 ,使用以下指令下載並解壓:
wget https://huggingface.co/spaces/mortimerme/s4/resolve/main/largeV3Model-extract-models-folder-解压到models目录下.7z
apt-get install p7zip-full
7za x largeV3Model-extract-models-folder-解壓到models目錄下.7z
執行 stt
dockerrm -f stt
dockerrun --name stt -d \
--runtime=nvidia --gpus all \
-p 9977:9977 \
-v ${PWD}/set.ini:/stt/set.ini \
-v ${PWD}/models--Systran--faster-whisper-large-v3:/stt/models/models--Systran--faster-whisper-large-v3 \
stt:latest
dockerps | grep stt
準備測試檔 test.py
import requests
# 請求地址
url = "http://127.0.0.1:9977/api"
# 請求參數 file:音視訊檔,language:語言程式碼,model:模型,response_format:text|json|srt
# 返回 code==0 成功,其他失敗,msg==成功為ok,其他失敗原因,data=辨識後返回文字
files = {"file": open("/root/test.wav", "rb")}
data={"language":"zh","model":"large-v3","response_format":"json"}
response = requests.request("POST", url, timeout=600, data=data,files=files)
print(response.json())
準備測試音訊檔
這裏使用的是 wav 檔, mp3 檔也是支持的。
執行轉換
pip install requests
python3 test.py
GPU 使用情況:
轉換結果 - json:
轉換結果 - text :
對比了下音訊檔,會有點瑕疵,準確率大概 90% 左右。
計畫地址
更多計畫詳細資訊請到計畫主頁獲取
https://github.com/jianchang512/stt
快捷映像
ccr.ccs.tencentyun.com/erik_xu/ stt :latest
更多快捷映像
https://zhuanlan.zhihu.com/p/678429467
寫在最後
以上就是本文希望分享的內容,大家如果有 問題咨詢、 技術支持、開源推薦等,歡迎在公眾號【跬步之巔】留言交流。