我正在尝试 SpeechRecognition 模块的一些转录方法。 我能够使用 Google API (
recognize_google()
) 进行转录,但当我尝试使用 OpenAPI 的 Whisper (recognize_whisper()
) 时,一个临时文件“%LocalAppData%\Temp mps_pfkh0z.wav”(实际文件名每次都会略有变化) 被创建并且脚本失败并出现“权限被拒绝”错误:
Traceback (most recent call last):
File "D:\Users\Renato\Documents\Code\projects\transcriber\.venv\lib\site-packages\whisper\audio.py", line 42, in load_audio
ffmpeg.input(file, threads=0)
File "D:\Users\Renato\Documents\Code\projects\transcriber\.venv\lib\site-packages\ffmpeg\_run.py", line 325, in run
raise Error('ffmpeg', out, err)
ffmpeg._run.Error: ffmpeg error (see stderr output for detail)
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "d:\Users\Renato\Documents\Code\projects\transcriber\main.py", line 15, in <module>
print("Transcription: " + r.recognize_whisper(audio_data=audio_data, model="medium", language="uk"))
File "D:\Users\Renato\Documents\Code\projects\transcriber\.venv\lib\site-packages\speech_recognition\__init__.py", line 1697, in recognize_whisper
result = self.whisper_model[model].transcribe(
File "D:\Users\Renato\Documents\Code\projects\transcriber\.venv\lib\site-packages\whisper\transcribe.py", line 85, in transcribe
mel = log_mel_spectrogram(audio)
File "D:\Users\Renato\Documents\Code\projects\transcriber\.venv\lib\site-packages\whisper\audio.py", line 111, in log_mel_spectrogram
audio = load_audio(audio)
File "D:\Users\Renato\Documents\Code\projects\transcriber\.venv\lib\site-packages\whisper\audio.py", line 47, in load_audio
libavdevice 59. 7.100 / 59. 7.100
libavfilter 8. 44.100 / 8. 44.100
libswscale 6. 7.100 / 6. 7.100
libswresample 4. 7.100 / 4. 7.100 libpostproc 56. 6.100 / 56. 6.100C:\Users\Renato\AppData\Local\Temp\tmps_pfkh0z.wav: Permission denied
代码本身非常简单:
import speech_recognition as sr
r = sr.Recognizer()
with sr.AudioFile("audio.wav") as src:
audio_data = r.record(src)
print("Transcription: " + r.recognize_whisper(audio_data=audio_data, model="medium", language="en"))
我尝试了不同的 ffmpeg 安装(gyan.dev 和 BtbN 预构建包,我也尝试通过 chocolatey 安装)。
我也尝试取消选中临时文件夹属性上的“只读”选项,但错误仍然发生。
我在 Windows 机器上使用 venv 创建的虚拟环境中运行脚本。
我和你有同样的问题。根据文档,rexognize_whisper 应该采用 AudioData 形式的 Audiofile 实例,但它不起作用。
所以,我让它工作了不知何故。 speech_recognition“
recognize_whisper
”文件中“Recognizer
”类中的“__init__.py
”有一行:
with tempfile.NamedTemporaryFile(suffix=".wav") as f:
我猜是因为我在这里运行 Windows(是的,我也讨厌它......),它以某种方式遇到了一些权限问题。 我将其替换为:
with open('test.wav', 'wb') as f:
现在,生成了 .wav 文件并且运行没有错误。但也没有显示识别结果......
另外:在尝试了 speech_recognition 之后,我认为耳语集成不起作用? 我试着给两个相同的音频文件:
AUDIO_FILE = 'test.wav'
r = sr.Recognizer()
with sr.AudioFile(AUDIO_FILE) as source:
audio = r.record(source) # read the entire audio file
r.recognize_whisper(audio)
r.recognize_google(audio)
这给出了谷歌识别的结果,但没有给出耳语识别的结果(当我在
recognize_whisper()
方法中替换旧代码时得到权限错误)。