
Transformers Generate 功能介绍
Open AI 的 Audio Whisper API 能够翻译和转录——将语音转换为书面形式。它由 OpenAI 的 large-v2 Whisper 模型提供支持。
我们将从您设备的麦克风录制音频,并使用 OpenAI 的 Audio Whisper API 转录音频。此功能类似于单击 ChatGPT 中的麦克风 🎙️ 图标。
请注意, ChatGPT for Web 不支持语音转文本。不过,此处的代码可用于在 Web 上启用此功能。
我们将使用 WAV 文件。虽然 WAV 文件比 MP3 大,但它以未压缩的格式存储音频,从而保留了音频质量。对于转录和翻译而言,高质量的音频可以显著提高准确性。
我们将通过三个不同的代码片段来实现主要功能:
整个代码片段将在本文末尾提供。
麦克风权限
在我们开始录制音频之前,请确保获得访问麦克风的必要权限。
对于 Windows
对于 MacOS
设置
我们需要几个库来录制和处理音频。
要安装先决条件,只需运行以下代码片段。
# 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
我们将创建一个处理录音的函数。此功能将支持手动和定时录音:
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 采样率。
这些值是语音识别任务的标准:
初始化 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