使用 SpeechRecognition 的 recognize_whisper() 方法时权限被拒绝

问题描述 投票:0回答:2

我正在尝试 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 创建的虚拟环境中运行脚本。

python windows speech-recognition file-permissions openai-whisper
2个回答
0
投票

我和你有同样的问题。根据文档,rexognize_whisper 应该采用 AudioData 形式的 Audiofile 实例,但它不起作用。


0
投票

所以,我让它工作了不知何故。 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()
方法中替换旧代码时得到权限错误)。

© www.soinside.com 2019 - 2024. All rights reserved.