Uberi / speech_recognition

Speech recognition module for Python, supporting several engines and APIs, online and offline.
https://pypi.python.org/pypi/SpeechRecognition/
BSD 3-Clause "New" or "Revised" License
8.32k stars 2.4k forks source link

recognize_whisper_api(audio, api_key=OPENAI_API_KEY) causes openai.error.AuthenticationError: No API key provided. #674

Open ftnext opened 1 year ago

ftnext commented 1 year ago

Steps to reproduce

  1. pip install 'SpeechRecognition[whisper-api]' pyaudio
  2. Insert OpenAI API Key in examples/microphone_recognition.py and comment out other recognizers

https://github.com/Uberi/speech_recognition/blob/8b07762f80dfec2d34fb4c40b8eddbb7ec503521/examples/microphone_recognition.py#L97

  1. Run examples/microphone_recognition.py

Expected behaviour

See Whisper API response.

Actual behaviour

See the following error.

% python examples/microphone_recognition.py
Say something!
Traceback (most recent call last):
  File "/.../examples/microphone_recognition.py", line 99, in <module>
    print(f"Whisper API thinks you said {r.recognize_whisper_api(audio, api_key=OPENAI_API_KEY)}")
  File "/.../venv/lib/python3.10/site-packages/speech_recognition/recognizers/whisper.py", line 41, in recognize_whisper_api
    transcript = openai.Audio.transcribe(model, wav_data, api_key=api_key)
  File "/.../venv/lib/python3.10/site-packages/openai/api_resources/audio.py", line 55, in transcribe
    requestor, files, data = cls._prepare_request(file, file.name, model, **params)
  File "/.../venv/lib/python3.10/site-packages/openai/api_resources/audio.py", line 28, in _prepare_request
    requestor = api_requestor.APIRequestor(
  File "/.../venv/lib/python3.10/site-packages/openai/api_requestor.py", line 130, in __init__
    self.api_key = key or util.default_api_key()
  File "/.../venv/lib/python3.10/site-packages/openai/util.py", line 186, in default_api_key
    raise openai.error.AuthenticationError(
openai.error.AuthenticationError: No API key provided. You can set your API key in code using 'openai.api_key = <API-KEY>', or you can set the environment variable OPENAI_API_KEY=<API-KEY>). If your API key is stored in a file, you can point the openai module at it with 'openai.api_key_path = <PATH>'. You can generate API keys in the OpenAI web interface. See https://onboard.openai.com for details, or email support@openai.com if you have any questions.

It seems that api_key is not passed to Whisper API request.

✨Workaround
Set OPENAI_API_KEY. export or pass like

% OPENAI_API_KEY="INSERT OPENAI API KEY HERE" python examples/microphone_recognition.py
Say something!
Whisper API thinks you said Hi Whisper, how are you?

System information

My system is macOS Monterey.

My Python version is Python 3.10.9.

My Pip version is pip 23.0.1.

My SpeechRecognition library version is 3.10.0.

My PyAudio library version is 0.2.13.

% pip list
Package            Version
------------------ ---------
aiohttp            3.8.4
aiosignal          1.3.1
async-timeout      4.0.2
attrs              22.2.0
certifi            2022.12.7
charset-normalizer 3.1.0
frozenlist         1.3.3
idna               3.4
multidict          6.0.4
openai             0.27.2
pip                23.0.1
PyAudio            0.2.13
requests           2.28.2
setuptools         67.6.0
SpeechRecognition  3.10.0
tqdm               4.65.0
urllib3            1.26.15
yarl               1.8.2
ftnext commented 1 year ago

Open https://github.com/openai/openai-python/issues/303

Anuluxer commented 1 year ago

Add this to your code:

os.environ['OPENAI_API_KEY'] = 'API_KEY_HERE'

recongnize_whisper_api() tries to get an environment variable called "OPENAI_API_KEY", this sets that variable. Add this to your code instead of adding an argument to recongnize_whisper_api().