Abstract:此文章介绍了如何在威联通TS-464C2上如何部署OPENAI的whisper模型进行语音识别。实现把“语音文件上传到指定目录下,系统自动识别后输出TXT到另到一个目录里”的功能。(我的其实是TS-464C,但是我的CPU是N5105,且可以加内存,跟464C2一样。我加了8G内存,目前是16G。理论上内存只要够用,不挑机器,其他型号应该也可以实现。内存不够用就用小点的模型~~)由于cpu的孱弱,本文选用了Faster-whisper进行识别。确切来说是whisper-ctranslate2项目,想要了解的自己去github翻哈~~我就不介绍了。
优点:免费、识别率高、什么设备都可以用。
缺点:稍慢。
- 安装linux docker.
打开Container Station, 点容器,点右上角浏览,我因为有其他用途,所以安装的LXD的ubuntu系统。其他应该也可以,理论上不受系统影响,看各位喜好。
先在File station里找个地方新建两个目录,在配置容器的高级设置里挂载这个两个目录,分别用来存放录音文件和识别之后的文本文件。
其他配置无所谓,如果对log记录时间有要求,就在环境变量里加上TZ=Asia/Shanghai,否则会按照格林尼治时间走。
2.安装必要的包。启动完上面的ubuntu docker之后,点最右边的小齿轮,然后点执行进入到系统中。
默认好像没有用户,想建的自己建一个,不想建的可以用root直接搞~
安装包:pip install -U whisper-ctranslate2
如果没有pip,那就装一个:apt install pip.
去下载模型文件:必须是CTranslate2 format的模型,反正我感觉large v3 turbo识别率更好一点,速度也可以接受:https://hf-mirror.com/deepdml/faster-whisper-large-v3-turbo-ct2/tree/main 如果内存不够,或者想快点,可以用base,small,tiny之类的去hf-mirror上下载就行了。然后把模型放到刚刚共享的/shibie目录里,我又给它cp到了/usr/faster_whisper_largev3/里。不弄也行,改我后续的shell文件里执行识别命令的模型目录即可。
3.测试。执行whisper-ctranslate2 /record/test.mp3 --language Chinese --model_directory /usr/faster_whisper_largev3/ --model large-v3-turbo --device cpu --output_format txt --output_dir /shibie/ 解释一下这句命令:我的文件在/record目录下,叫test.mp3;我设定了识别的语音是中文,--language那个不写也行,会自动检测;--model_dirctory是目录地址;--model是你用的模型是什么,比如smallmediumbase需要写清楚;--device 有GPU可以写CUDA,咱这个就乖乖CPU吧;--outpu_format 如果删了这个会默认都输出,srt vtt什么的好几个,有时间戳。我只需要txt就行了,看个人需求设置。--output_dir /shibie 输出到/shibie目录下,可以自行设置。
whisper-ctranslate2 --help可以帮助你详细了解一下这个东西怎么用。如果命令成功了,那继续~
4.自动化执行。每5分钟查一下record目录下是否有新文件,如果有-就识别一下,输出到shibie目录下,并且把原文件挪到/shibie/transed里。
先把上面的需求写成一个shell脚本。放到/shibie/起名叫autolarge.sh
以下是我瞎写的…请大牛们别笑话……
#!/bin/bash
# get date&time.
current_date_time=$(date '+%Y-%m-%d %H:%M:%S')
# check whether new file exists.
if [ -n "$(ls /record)" ]; then
file_name=$(ls /record | head -1)
echo "$file_name">>/shibie/log.txt
file_path="/record/$file_name"
# run the commond!!!
whisper-ctranslate2 "$file_path" --language Chinese --model_directory /usr/faster_whisper_largev3/ --model large-v3-turbo --device cpu --output_format txt --output_dir /shibie/
if [ $? -eq 0 ]; then
mv "$file_path" "/shibie/transed/"
echo "$current_date_time - File has been processed and moved.">> /shibie/log.txt
else
echo "$current_date_time - Erro processing $file_name" >> /shibie/log.txt
fi
else echo "$current_date_time - No new audio file.">> /shibie/log.txt
fi
执行crontab -e,最下面添加一行*/5 * * * * sh /shibie/autolarge.sh
cat /shibie/log.txt看看5分钟后有没有日志生成。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
,