G6900部署whispier.cpp
如题,发现什么值得买上面都没有部署whisper.cpp的文章,一直想尝试折腾ai,春节假期刚好有空,搞起来。在B站、知乎上翻了翻,好像语音转写有搞头,折腾成功,聊以记录。
选择折腾whisper.cpp,主要还是受硬件限制,只有联想M93(E3-1268L V3,16G内存)和一台充当NAS的台式机(G6900,32G内存),买不起显卡,经折腾:whisper.cpp对硬件要求不高,E3-1268L V3、G6900都能跑,实测内存占用2G,速度嘛,26.4秒的音频,大概需要2分钟转写完毕,时效性不高,不过还是符合实际需求。
程序
whisper.cpp
官网:https://github.com/ggerganov/whisper.cpp/releases
我下载的是:whisper-bin-x64.zip,其他版本看不懂英文说明,没有尝试。
ffmpeg
下载最新版就好了,我使用scoop安装的。
Python
下载最新版就好了,我使用scoop安装的,下载安装记得将主程序路径添加到环境变量。
源码
whisper.cpp
官网:https://github.com/ggerganov/whisper.cpp
源码也要下载,下载模型或转换模型要用到,Windows下用的是"whisper-bin-x64\whisper.cpp\models\download-ggml-model.cmd"这个批处理,拖到命令提示符里面输入:空格+模型名称,模型名称:make tiny.en、tiny、base.en、 base、small.en、small、medium.en、medium、large-v1、large-v2、large-v3,尝试了几个小时,没下载成功,后来先下载了whisper的相关模型,通过"whisper-bin-x64\whisper.cpp\models\convert-pt-to-ggml.py"这个脚本进行了转换才跑起来。
解压到放到D盘根目录。
whisper
官网:https://github.com/openai/whisper
这个源码也要下载了,转换模型要指定该目录,至于实际有没有用到就不懂了,我是二把刀、二把刀。
解压到放到D盘根目录。
模型
模型下载有坑,如上文所述。有网络条件的可以直接在whisper.cpp官网提供的网址下载,这里就不放了。
我是先下载了whisper的medium.pt模型,再通过"whisper-bin-x64\whisper.cpp\models\convert-pt-to-ggml.py"这个脚本进行了转换才跑起来。模型下载地址:https://openaipublic.azureedge.net/main/whisper/models/345ae4da62f9b3d59415adc60127b97c714f32e89e936602e85993674d08dcb1/medium.pt。
模型转换还有一个坑,把whisper.cpp和whisper的源码解压缩到磁盘根目录才可以,也可能是我开打的姿势不对。
另外:large-v3在我的电脑上跑起来非常慢,识别率也没见得高到哪里去,也可能测试样本不够吧。
模型转换命令:python "D:\whisper-bin-x64\whisper.cpp\models\convert-pt-to-ggml.py" "D:\whisper-bin-x64\models\medium.pt" "D:\whisper" "D:\"
这样D盘根目录就会生出适用于whisper.cpp的“.bin”模型文件,将其剪切到whisper-bin-x64\models\目录下,文件名:ggml-medium.bin。
转写
命令
"D:\whisper-bin-x64\main.exe" -m "D:\whisper-bin-x64\models\ggml-medium.bin" -l zh "d:\1.wav" -otxt -of "d:\1.txt" --prompt "简体中文"
输入音频文件,转写出纯文本。
"D:\whisper-bin-x64\main.exe":命令转写主程序路径。-m "D:\whisper-bin-x64\models\ggml-medium.bin":指定模型文件-l zh:指定语言"d:\1.wav":指定输入音频-otxt:纯文本输出,无时间轴-of "d:\1.txt":指定输出文件路径--prompt "简体中文":还是会转写为繁体中文,一直搞不懂为啥指定了中文,转写出来还是会有繁体字
服务
"D:\whisper-bin-x64\server.exe" -m "D:\whisper-bin-x64\models\ggml-medium.bin" -l zh --prompt "简体中文" --port 8080
以服务的形式运行,通过curl命令发送需求,并返回json字符串。
"D:\whisper-bin-x64\server.exe":后台服务主程序路径。-m "D:\whisper-bin-x64\models\ggml-medium.bin":指定模型文件-l zh:指定语言--port 8080:指定端口
直接访问:127.0.0.1:8080是没有用的,必须使用curl命令发送请求,然后返回json字符串,命令:curl 127.0.0.1:8080/inference -H "Content-Type: multipart/form-data" -F file="@C:\1.WAV" -F temperature="0.0" -F temperature_inc="0.2" -F response_format="json"
上述命令可以成功返回json字符串,不过我想给他改成powershell脚本,但是没有成功,在这里也想请教一下各路大神,上述命令如何通过powershell实现。
最后
贴一下自用的Powershell监控录音文件并转写的脚本:
$Module = "D:\whisper-bin-x64\models\ggml-medium.bin"
#模型文件路径
$SourcePath = "D:\Recorder"
#音频文件路径
while($true){
#死循环
$Now = Get-Date
#当前时间
$Yestoday = $Now.AddSeconds(-$Now.TimeOfDay.TotalSeconds)
#昨天
Get-ChildItem -Path $SourcePath -Filter '*.*' | Where-Object {$_.CreationTime -gt $Yestoday} |
Group-Object -Property 'BaseName' | Where-Object {$_.Group.Extension -contains '.mp3' -and $_.Count -eq 1} |
ForEach-Object {
#获取所有文件,过滤掉今天之前的文件,按文件名分组,再过滤掉已转写的音频,逐个转写
$Source = $_.Group[0].Fullname
#待转写音频路径
$Target = $Source.Substring(0,$Source.LastIndexOf('.')) + '.wav'
#转为wav后的路径
& ffmpeg.exe -i "$($Source)" -f wav -ac 1 -ar 16000 -y "$($Target)"
#mp3转为wav
& D:Softwarewhisper-bin-x64main.exe -m "$($Module)" -l zh "$($Target)" -otxt -of "$($Source.Substring(0,$Source.LastIndexOf('.')))" # --prompt "简体中文"
#转写音频
Remove-Item -Path $Target -Force -ErrorAction Ignore
#删除wav文件
}
Start-Sleep -Seconds 60
#等待60秒
}
最后,再请教一下大神,curl语句如何使用powershell实现,毕竟powershell会用,curl不会用,拜谢。
没图啊,非要我加1张。
powershell代码截图充数。吞斜杠呀,我全不替换成全角斜杆了,有需要自己替换一下吧。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
