whisper使用
介绍
Whisper是一种通用的语音识别模型。它是在大量不同音频数据集上训练的,也是一个多任务模型,可以执行多语言语音识别、语音翻译和语言识别。
GitHub:https://github.com/openai/whisper
论文链接:https://arxiv.org/abs/2212.04356
方法
Transformer序列到序列模型在各种语音处理任务上进行训练,包括多语言语音识别、语音翻译、口语识别和语音活动检测。这些任务被联合表示为将由解码器预测的令牌序列,从而允许单个模型代替传统语音处理流水线的许多级。多任务训练格式使用一组特殊的标记,用作任务说明符或分类目标。
安装
环境:
Python==3.8-3.11
PyTorch==1.10.1
使用pip安装
pip install -U openai-whisper
或者
pip install git+https://github.com/openai/whisper.git
更新:
pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git
它还需要在系统上安装命令行工具ffmpeg
,大多数包管理器都提供了该工具(命令行安装):
# on Ubuntu or Debian
sudo apt update && sudo apt install ffmpeg
# on Arch Linux
sudo pacman -S ffmpeg
# on MacOS using Homebrew (https://brew.sh/)
brew install ffmpeg
# on Windows using Chocolatey (https://chocolatey.org/)
choco install ffmpeg
# on Windows using Scoop (https://scoop.sh/)
scoop install ffmpeg
FFmpeg安装
FFmpeg是一款音视频编解码工具。Whisper需要使用FFmpeg工具提取声音数据,所以需要安装配置FFmpeg。
官网下载:https://ffmpeg.org/download.html 下载解压后配置环境变量:环境变量 --> path --> 新建 --> 解压目录\bin 验证: 在python环境中安装依赖包:pip install ffmpeg-python
使用whisper
代码
import whisper
model = whisper.load_model("base") # 共有四种模型:base、small、medium、large
result = model.transcribe("../XX.mp3", language="Chinese")
print(result["text"])
base结果
坐平二十七号。我打烈归来,掩着花园的林阴路走着,狗跑在我前边。突然,狗放慢脚步,逆足前行,好像袖到了前边有什么野物。我顺着林阴路望去,看见了一只,嘴边还带黄色,头上升着柔毛的小麻雀。风猛烈地吹打的林阴路上的白话术。麻雀,从朝里低落下来,呆呆地伏在地上,孤立无缘地,张开两只羽毛,还未封满的小翅吧。我的狗慢慢向它靠近。忽然,从附近一颗樹上,飞下一只黑胸铺的老麻雀,像一颗石子似的落到狗的眼前。老麻雀全身道术的羽毛,精恐万状发出绝望七慘的教生。接着,想漏出牙石,大张着的狗嘴铺去。老麻雀是猛铺下来救护右翹的。他用身体掩护着自己的幼儿,但他整个小小的身体,因恐怖而战力着。他小小的声音也变得粗暴思呀,他在犀生自己。在他看来,狗该是多么庞大的怪物吧。然而,他还是不能站在自己高高的安全的树制上。一种比他的理智更强烈的力量,是他从哪铺下身来。我的狗站住了,向后退了退。看来他也赶到了这种力量。我赶紧换住金荒失错的狗,然后我怀着重新的心情走开了。是啊,请不要见笑。我重庆那只小小的英勇的鸟儿,我重庆他那种爱的冲动和力量。爱,我想,比死和死的恐惧更强大。只有依靠他,依靠这种爱,生命才能维持下去,发展下去。欢迎光临普通话时期望,三达六点PTHXX.com。
这base模型,识别效果一般,有很多错别字
small结果
作品二十七号。我打猎龟来,沿着花园的林阴路走着,狗跑在我前边。突然,狗放慢脚步,涅足前行,好像绣到了前边有什么野物。我顺着林阴路望去,看见了一只嘴边还带黄色头上生着柔毛的小麻雀。风猛烈地吹打着林阴路上的白画树,麻雀从朝里跌落下来,呆呆地浮在地上,孤立无缘地张开两只羽毛还未风满的小翅膀。我的狗慢慢向它靠近。忽然,从附近一棵树上飞下一只黑胸脖的老麻雀,像一颗石子似的落到狗的眼前。老麻雀全身倒数着羽毛惊恐万状,发出绝望欺惨的叫声。接着,想露出牙齿,大张着的狗嘴铺去。老麻雀是猛铺下来救护幼雀的。它用身体掩护着自己的幼儿。但它整个小小的身体因恐怖而占力着,它小小的声音也变得粗暴思压,它在牺牲自己。在它看来,狗该是多么庞大的怪物啊。然而,它还是不能站在自己高高的安全的树枝上。一种比它的理智更强烈的力量,是它从哪儿扑下身来。我的狗站住了,向后退了退,看来它也感到了这种力量。我赶紧换住惊慌失措的狗,然后我怀着重庆的心情走开了。是啊,请不要见笑。我重庆那只小小的英勇的鸟儿,我重庆它那种爱的冲动和力量。爱,我想,比死和死的恐惧更强大。只有依靠它,依靠这种爱,生命才能维持下去,发展下去。
效果比base好一点,但不多
medium结果
作品二十七號我打獵歸來沿著花園的林蔭路走著狗跑在我前邊突然狗放慢腳步捏足前行好像繡到了前邊有什麼野物我順著林蔭路望去看見了一隻嘴邊還帶黃色頭上生著柔毛的小麻雀風猛烈地吹打著林蔭路上的白樺樹麻雀從巢裡跌落下來呆呆地浮在地上孤立無援地張開兩隻羽毛還未豐滿的小翅膀我的狗慢慢向它靠近忽然從附近一棵樹上飛下一隻黑胸脯的老麻雀像一顆石子似的落到狗的眼前老麻雀全身倒數著羽毛驚恐萬丈發出絕望淒慘的叫聲接著想露出牙齒大張著地狗嘴撲去老麻雀是猛撲下來救護幼雀的它用身體掩護著自己的幼兒但它整個小小的身體因恐怖而站立著它小小的聲音也變得粗暴私養它在犧牲自己在它看來狗該是多麼龐大的怪物啊然而它還是不能站在自己高高的安全的樹枝上一種比它的理智更強烈的力量使它從那兒撲下身來我的狗站住了向後退了退看來它也感到了這種力量我趕緊換住驚慌失措的狗然後我懷著重慶的心情走開了是啊請不要見笑我重慶那只小小的英勇的鳥兒我重慶它那種愛的衝動和力量愛我想比死和死的恐懼更強大只有依靠它依靠這種愛生命才能維持下去發展下去
不知道为什么全是繁体,效果不如small
large结果
作品二十七号我打猎归来,沿着花园的林荫路走着,狗跑在我前边。突然,狗放慢脚步,捏足前行,好像嗅到了前边有什么野物。我顺着林荫路望去,看见了一只,嘴边还带黄色,头上生着绒毛的小麻雀。风猛烈地吹打着林荫路上的白花树,麻雀从巢里跌落下来,呆呆地浮在地上,孤立无援地张开两只羽毛还未丰满的小翅膀。我的狗慢慢向它靠近,忽然从附近一棵树上飞下一只黑胸脯的老麻雀,像一颗石子似的落到狗的眼前。我顺着林荫路望去,看见了一只,嘴边还带黄色,头上生着绒毛的小麻雀。老麻雀全身倒竖着羽毛,惊恐万状,发出绝望凄惨的叫声。接着,想露出牙齿,大张着的狗嘴扑去。老麻雀是猛扑下来救护幼雀的,它用身体掩护着自己的幼儿,但它整个小小的身体因恐怖而站立着。它小小的声音也变得粗暴嘶哑。老麻雀在狗身上,它在牺牲自己。在它看来,狗该是多么庞大的怪物啊。然而,它还是不能站在自己高高的安全的树枝上。一种比它的理智更强烈的力量,是它从那扑下身来。我的狗站住了,向后退了退。看来,它也感到了这种力量。我赶紧唤住惊慌失措的狗,然后我怀着崇敬的心情走开了。老麻雀的狗叫了一声。我说:"是啊,请不要见笑。我崇敬那只小小的英勇的鸟儿。我崇敬它那种爱的冲动和力量。我说:"爱,我想,比死和死的恐惧更强大。只有依靠它,依靠这种爱,生命才能维持下去,发展下去。
使用large模型错别字显著减少,整体效果比base好,但仍然存在一些问题:部分文字重复识别。尚未查明原因
原文:
我打猎归来,沿着花园的林阴路走着。狗跑在我前边。
突然,狗放慢脚步,蹑足潜行,好像嗅到了前边有什么野物。
我顺着林阴路望去,看见了一只嘴边还带黄色、头上生着柔毛的小麻雀。风猛烈地吹打着林阴路上的白桦树,麻雀从巢里跌落下来,呆呆地伏在地上,孤立无援地张开两只羽毛还未丰满的小翅膀。
我的狗慢慢向它靠近。忽然,从附近一棵树上飞下一只黑胸脯的老麻雀,像一颗石子似的落到狗的跟前。老麻雀全身倒竖着羽毛,惊恐万状,发出绝望、凄惨的叫声,接着向露出牙齿、大张着的狗嘴扑去。
老麻雀是猛扑下来救护幼雀的。它用身体掩护着自己的幼儿……但它整个小小的身体因恐怖而战栗着,它小小的声音也变得粗暴嘶哑,它在牺牲自己!
在它看来,狗该是多么庞大的怪物啊!然而,它还是不能站在自己高高的、安全的树枝上……一种比它的理智更强烈的力量,使它从那儿扑下身来。
我的狗站住了,向后退了退……看来,它也感到了这种力量。
我赶紧唤住惊慌失措的狗,然后我怀着崇敬的心情,走开了。
是啊,请不要见笑。我崇敬那只小小的、英勇的鸟儿,我崇敬它那种爱的冲动和力量。
爱,我想,比死和死的恐惧更强大。只有依靠它,依靠这种爱,生命才能维持下去,发展下去。
语言模型下载
下载地址:https://huggingface.co/ggerganov/whisper.cpp/tree/main
GitHub:https://github.com/ggerganov/whisper.cpp/tree/master/models
遇到的错误信息
FileNotFoundError: [WinError 2] 系统找不到指定的文件。解决办法: 找到External Libraries —> Python 3.8 —> Libs —> subprocess.py—> Ctrl+F 查找“class POpen” ,将shell=False,改为 shell=True。
UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xb2 in position 9: invalid start byte解决办法: 这个问题一般是是ffmpeg造成的,在读取文件的时候某个位置的编码有问题。实际上是由于上面的代码修改后,需要重新启动(在windows系统有这个问题)。 如果重新启动之后,还是出现上述错误,可以按照如下方式重新设置:Pycharm setting —> Tools —> Terminal —> 找到 shell path,将其修改为本地cmd。
总结
### Whisper使用总结#### 介绍
Whisper是一种在多个音频数据集上训练的通用语音识别模型,具备多语言语音识别、语音翻译和语言识别等多个任务处理能力。其GitHub仓库和论文链接分别提供了源代码和详细的研究背景。
#### 方法
Whisper基于Transformer序列到序列模型,通过联合训练进行多语言语音识别、语音翻译、口语识别和语音活动检测。多任务训练使用特殊标记作为任务说明符,允许单个模型替代传统复杂的多级语音处理流水线。
#### 安装
##### 环境要求
- Python 3.8-3.11
- PyTorch 1.10.1
##### 通过pip安装
```bash
pip install -U openai-whisper
# 或者
pip install git+https://github.com/openai/whisper.git
# 更新版本
pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git
```
##### FFmpeg安装
由于whisper依赖FFmpeg提取音频数据,因此需要额外安装FFmpeg。多种操作系统均可使用包管理器安装,或下载官方版本后配置环境变量。
##### 验证安装
安装`ffmpeg-python`库以验证FFmpeg配置是否正确。
```bash
pip install ffmpeg-python
```
#### 使用例程
使用whisper进行语音识别的基础代码示例如下,分为四种模型(base、small、medium、large),不同模型的精度和性能各异。示例中展示了如何通过加载模型、转录音频文件和输出结果来执行语音识别。
##### 代码示例
```python
import whisper
model = whisper.load_model("base") # 加载模型
result = model.transcribe("../XX.mp3", language="Chinese") # 转录音频文件
print(result["text"]) # 输出识别结果
```
#### 效果对比
- **base模型**:识别效果一般,有很多错别字。
- **small模型**:效果略好于base,但仍存在错误。
- **medium模型**:输出文字全为繁体,效果不如small。
- **large模型**:整体效果好,错别字显著减少,但存在部分文字重复识别的问题。
#### 语言模型下载
额外的语言模型和预训练权重可从Hugging Face和特定GitHub仓库下载。
#### 常见问题解决
- `FileNotFoundError`:通常由于路径问题引起,确保音频文件路径正确。
- `UnicodeDecodeError`:可能是ffmpeg读取编码问题,确保ffmpeg和编码设置正确,并重启环境。
综合而言,Whisper提供了一种高效的语音识别解决方案,通过多任务学习和强大的Transformer模型,支持多语言和多种语音处理任务,为开发者提供了强大的语音识别工具。