目录
Whisper是Open AI开源的语音识别网络,支持98中语言,用于语音识别和翻译等任务。我们可以将歌曲的歌词进行识别,将无字幕的视频资源自动生成字母,极大方便了用户。同时,whisper可以在本地运行,充分保障了个人隐私。在识别方面也具有较准确的识别能力。
因此想通过本文对whisper的安装和使用进行说明,希望能对正在学习的伙伴给予参考。
本设备基于Python环境:3.8.1,pip:23.0.1,torch:2.0.0+cpu

1.在以下网址进行安装Git:
https://git-scm.com/download/win
安装过程只需无脑点next,直至安装成功。

win+R进入cmd控制台输入git,若显示如下,则表示安装成功!

若显示’git’ 不是内部或外部命令,也不是可运行的程序,则未安装成功

2.找到git.exe所在的位置,一般在bin下,本机为:
D:\Program Files\Git\bin

3.将git添加到环境变量中
win+R输入Sysdm.cpl进入环境变量配置


双击path

新建一个环境变量路径,填入所找到的git.exe所在的路径

下载地址:
https://github.com/BtbN/FFmpeg-Builds/releases
1.选择 ffmpeg-master-latest-win64-gpl-shared.zip 版本点击下载

2.找到ffmpeg.exe所在的位置,一般在bin下,本机为:
D:\ffmpeg\ffmpeg-master-latest-win64-gpl-shared\bin

3.将ffmpeg添加到环境变量中
win+R输入Sysdm.cpl进入环境变量配置

进入PyTorch官方网站:
https://pytorch.org/
选择cpu版本,最下面一行会提供一个pip命令用于安装torch

这里有个注意点:在原命令基础上加入参数 -i [镜像源地址],即可把国外的源换成国内源,可以极大程度上加快下载速度,命令如下:
pip3 install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple

在以上步骤均完成后,即可安装whisper,分别执行以下命令:
pip install git+https://github.com/openai/whisper.git

pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git

至此,whisper的安装步骤就全部结束了。
在音频所在文件夹的空白处按住shift,然后鼠标右键单击,打开powershell窗口,如图:

进入PowerShell后,输入命令 :whisper + [你需要识别的音频],就可以开始识别了,首次识别时会先下载模型文件,如图:

这里以识别歌曲 爱在天际.mp3 为例,在PowerShell中输入:
whisper 爱在天际.mp3
识别结果如下:

需要注意的是,在不添加任何参数的情况下,whisper默认以其small模型进行训练。官方的模型有以下几种,分别为tiny、base、small、medium、large。各模型的大小以及速度对比如下图所示:

我们该如何选择其他模型进行语音识别呢?只需在命令后面加入参数即可,如我们要用medium模型识别爱在天际.mp3,只需在PowerShell中输入:
whisper 爱在天际.mp3 --model medium
同样,在首次使用模型的情况下,会先自动下载模型文件,再对音频进行识别

那我们下载的模型会存储在哪里呢?具体位置为
C:\Users[你的用户名].cache\whisper
以本机为例,在以下目录下即可找到所下载的模型文件:

当语音识别完成以后会在相应的目录下生成.vtt .json .str .tsv .txt 文件,其中 .srt 为字幕文件:

对.json .tsv .txt .vtt 文件进行对比:

识别的操作和命令与.mp3文件的识别无异,命令均为 whisper + [待识别的文件名]
MV:念风及你.mp4识别结果如下:

同样,识别结束后生成了以下文件

识别结果可以看出,英文的识别也是毫无压力,识别准确率高:


我们对音频识别产生的字幕文件该如何使用呢?
这里借助一个视频软件PotPlayer,该视频软件可以方便的读取.srt文件,在双击文件后就能自动将字幕与原视频对应上。PotPlayer下载地址:
http://potplayer.tv/?lang=zh_CN
PotPlayer安装完成后,接下来只需直接双击.srt文件即可。最后我们来看看字幕效果吧!
爱在天际.mp3

念风及你.mp4

TED演讲:如何有效地学习.mp4

从不同的测试结果可以看到,whisper的识别效果还是不错的,最后的字幕的显示结果也讨人欢喜。小伙伴们在使用的过程中也可以尝试使用whisper不同大小的模型进行识别,来提高识别的准确率哦!
当然在具体安装和配置环境的过程中,我还是遇到了不少的问题的,感兴趣的小伙伴可看看我的上一篇博客的踩坑点,希望可以有效的帮助到大家。博客链接我放在下面啦。
最后,特别感谢我同学zeyu对我的帮助!
当然,也感谢大家的大力支持,你们的支持是我前进的最大动力,欢迎大家在评论区积极讨论哦~
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为