所有文章 > API解决方案 > 使用 Whisper API 通过设备麦克风把语音转录为文本
使用 Whisper API 通过设备麦克风把语音转录为文本

使用 Whisper API 通过设备麦克风把语音转录为文本

Open AI 的 Audio Whisper API 能够翻译和转录——将语音转换为书面形式。它由 OpenAI 的 large-v2 Whisper 模型提供支持。

我们将从您设备的麦克风录制音频,并使用 OpenAI 的 Audio Whisper API 转录音频。此功能类似于单击 ChatGPT 中的麦克风 🎙️ 图标。

请注意, ChatGPT for Web 不支持语音转文本。不过,此处的代码用于在 Web 上启用此功能。

我们将使用 WAV 文件。虽然 WAV 文件比 MP3 大,但它以未压缩的格式存储音频,从而保留了音频质量。对于转录和翻译而言,高质量的音频可以显著提高准确性。

我们将通过三个不同的代码片段来实现主要功能:

  1. 从设备麦克风录音并将其存储到临时文件中
  2. 使用 OpenAI 的 Whisper API 将音频转录或翻译为文本
  3. 将成绩单复制到剪贴板以供使用(提示、消息等)

整个代码片段将在本文末尾提供。

麦克风权限

在我们开始录制音频之前,请确保获得访问麦克风的必要权限。

对于 Windows

  1. 打开“设置”。
  2. 2. 转到隐私 > 麦克风。
  3. 3. 确保“此设备的麦克风访问”已打开。
  4. 4. 确保您使用的应用程序(例如,您的 Python IDE)被允许访问麦克风。

对于 MacOS

  1. 打开系统偏好设置。
  2. 转到安全和隐私> 隐私。
  3. 从左侧菜单中选择麦克风。
  4. 确保已检查您正在使用的应用程序(例如,Python IDE)。

设置

我们需要几个库来录制和处理音频。

  • pyaudio:从麦克风捕获音频。
  • • wave:处理.wav 文件。
  • • tempfile:创建用于存储录音的临时文件。
  • • simpleaudio:播放音频(用于调试)。

要安装先决条件,只需运行以下代码片段。

# Prerequisites for the Python Modules
!brew install ffmpeg
!brew install portaudio

# Audio Processing
%pip install -q simpleaudio
%pip install -q pyaudio
%pip install -q wave

# Clipboard Management
%pip install -q pyperclip

# Speech Transcriber
%pip install -q openai
%pip install -q openai --upgrade # fix for Cannot import name 'OpenAI' from 'openai'

# Securing API keys
%pip install -q python-dotenv

从设备麦克风录制音频

我们将创建一个处理录音的函数。此功能将支持手动和定时录音:

  1. 设置临时文件。 我们创建一个临时文件来存储录制的音频。使用后该文件将被删除。
temp_file = tempfile.NamedTemporaryFile(suffix=".wav", delete=False)
temp_file_name = temp_file.name

2. 回调函数。 此函数在录音时将音频数据写入临时文件。

def callback(data_input, frame_count, time_info, status):
wav_file.writeframes(data_input)
return None, pyaudio.paContinue

3. 录制音频。 我们设置麦克风来捕捉音频并将其保存到临时文件中。

打开 .wav 文件进行写入。设置音频格式:1 通道、16 位样本和 16000 Hz 采样率。

这些值是语音识别任务的标准:

  • 1 通道(单声道) :单声道音频足以进行语音识别,并减少要处理的数据量。
  • 16 位样本 :在音频质量和文件大小之间提供良好的平衡。
  • 16000 Hz 采样率 :常用于语音识别,因为它可以捕捉人类语音所需的频率范围,同时保持文件大小可管理。

初始化 PyAudio 并开始录音。

import pyaudio
import wave
import tempfile
import time


def record_audio(timed_recording=False, record_seconds=5):
temp_file = tempfile.NamedTemporaryFile(suffix=".wav", delete=False)
temp_file_name = temp_file.name

def callback(data_input, frame_count, time_info, status):
wav_file.writeframes(data_input)
return None, pyaudio.paContinue

with wave.open(temp_file_name, "wb") as wav_file:
wav_file.setnchannels(1) # Mono channel
wav_file.setsampwidth(2) # 16-bit samples
wav_file.setframerate(16000) # 16kHz sample rate

audio = pyaudio.PyAudio()
stream = audio.open(
format=pyaudio.paInt16,
channels=1,
rate=16000,
input=True,
frames_per_buffer=1024,
stream_callback=callback,
)

if timed_recording:
print(f"Recording for {record_seconds} seconds...")
time.sleep(record_seconds)
else:
input("Press Enter to stop recording...")

stream.stop_stream()
stream.close()
audio.terminate()

return temp_file_name

此函数允许我们记录特定持续时间(timed_recording=True)或直到用户按下 Enter(timed_recording=False)。

转录或翻译音频

现在,让我们创建一个函数来处理转录(用于英语)和翻译(用于非英语音频):

1.导入 OpenAI 库

我们使用 OpenAI 库来访问 Audio Whisper API。要使用 OpenAI API,您需要设置 API 密钥。您可以从 OpenAI 网站获取 API 密钥。

出于安全考虑,请在项目目录中创建一个 .env 文件并将 OpenAI API 密钥存储在那里。这样,您就避免直接在代码中硬编码敏感信息。

1. 在与笔记本相同的目录中创建一个.env 文件。

2. 将您的 OpenAI API 密钥添加到 .env 文件中,格式如下:

OPEN_AI_API_KEY=your_actual_api_key_here

3. 使用 dotenv 库在笔记本中加载环境变量。

获得密钥后,您可以按如下方式在代码中进行设置:

from openai import OpenAI
from dotenv import load_dotenv
import os

# Load the OpenAI API key from the .env file
load_dotenv()
openai_api_key = os.getenv("OPEN_AI_API_KEY")

# Set up your OpenAI API client
client = OpenAI(api_key=openai_api_key)

2. 转录音频

打开录制的音频文件并将其发送到 OpenAI Audio Whisper API 进行转录。API 返回文本。

def process_audio(file_name, is_english=True, prompt=""):
with open(file_name, "rb") as audio_file:
if is_english:
response = client.audio.transcriptions.create(
model="whisper-1", file=audio_file, prompt=prompt
)
else:
response = client.audio.translations.create(
model="whisper-1", file=audio_file
)

return response.text.strip()

注意: 您可以使用提示来指导您录制时的转录。这有多种用途,例如拼写纠正、语言规范、首字母缩略词识别、填充词删除或添加、标点符号等等。

请查看 Audio Whisper API 的参考资料以了解更多信息。或者,您也可以查看 prestontuggle 的 AI Cookbook Recipe

复制到剪贴板

1.导入 pyperclip

这个库有助于将文本复制到剪贴板。

import pyperclip

2. 复制转录

将转录的文本复制到剪贴板并打印确认信息。

def copy_to_clipboard(text):
pyperclip.copy(text)
print("Result copied to clipboard!")

主要代码片段

这是录制音频、转录并将结果文本复制到剪贴板的完整功能。

import simpleaudio as sa
import os


def transcribe_audio(
debug: bool = False,
prompt: str = "",
timed_recording: bool = False,
record_seconds: int = 5,
is_english: bool = True,
) -> str:
"""
Records audio from the microphone and transcribes or translates it using OpenAI's API.

Args:
debug (bool): If True, plays back the recorded audio for verification.
prompt (str): A prompt to guide the transcription (only used for English).
timed_recording (bool): If True, records for a set duration. If False, records until user input.
record_seconds (int): The number of seconds to record if timed_recording is True.
is_english (bool): If True, uses transcription. If False, uses translation to English.

Returns:
str: The transcription or translation of the recorded audio.
"""
# Record audio
temp_file_name = record_audio(timed_recording, record_seconds)

# Debug playback
if debug:
print("Playing back recorded audio...")
playback = sa.WaveObject.from_wave_file(temp_file_name)
play_obj = playback.play()
play_obj.wait_done()

# Process audio (transcribe or translate)
result = process_audio(temp_file_name, is_english, prompt)

# Clean up temporary file
os.remove(temp_file_name)

# Copy result to clipboard
copy_to_clipboard(result)

return result

演示

# Demo: Transcribe 5 seconds of spoken English with proper grammar and punctuation
result = transcribe_audio(
debug=True,
prompt="English spoken. Proper grammar and punctuation. Skip fillers.",
timed_recording=True,
record_seconds=5,
is_english=True,
)
print("\nTranscription/Translation:", result)

故障排除

如果遇到问题,请确保:

• 您的麦克风已正确设置并已授予权限。

• OpenAI API 密钥有效且在您的 .env 文件中正确设置。

• 您正在使用正确版本的库。

常问问题

1. 我可以录制超过 5 分钟吗?

是的,将 record_seconds 参数调整为更长的持续时间。

2. Whisper 支持哪些音频格式?

Whisper 支持多种音频格式;但为了获得最佳性能,建议使用 .wav。

3. 有没有办法转录英语以外的其他语言?

是的,只需将 is_english 参数设置为 False 即可使用 Whisper 的翻译功能。

结论

使用这些代码片段,您可以轻松地从设备麦克风录制音频,使用 OpenAI 的 Whisper API 转录或翻译音频,并将结果复制到剪贴板。您可以扩展或修改这些函数以获得其他功能,例如用户界面或与其他应用程序集成。

文章转载自:Using Whisper API to transcribe text using your Device Microphone

#你可能也喜欢这些API文章!