当前位置: 首页 » 工具 » 使用 Groq Whisper API 创建高准确度的语音转文本工具

使用 Groq Whisper API 创建高准确度的语音转文本工具

作为程序员,我们经常发现自己处于需要休息手腕的情况中。无论是长时间编码会话还是对更符合人体工程学的工作流程的渴望,能够口述文本可以改变一切。在本教程中,我们将教你如何使用 Groq 的 Whisper API 在 Python 中创建一个高速高准确度的语音转文本工具

我们的目标是开发一个能够在后台运行的脚本,我们可以通过按下一个按钮来触发任何应用程序中的语音输入。然后,在释放按钮时转录所说的内容,并自动粘贴到活动文本输入字段中。通过这种方式,我们可以在系统中几乎为任何应用程序提供本地语音模式。

先决条件

在我们深入之前,请确保你的系统上已安装了 Python。你还需要安装以下库:

pip install keyboard pyautogui pyperclip groq pyaudio

每个库都有特定的用途:

  • PyAudio:用于处理来自麦克风的音频输入。
  • Keyboard:用于检测和响应键盘事件。
  • PyAutoGUI:用于模拟键盘输入以粘贴转录的文本。
  • Pyperclip:用于与系统剪贴板交互。
  • Groq:用于访问他们的 Whisper 实现的 Groq API 客户端。

此外,你需要一个Groq API 密钥。如果你还没有,请前往 https://console.groq.com/keys 注册一个免费的 API 密钥。

代码

完整的代码,请参考 此 GitHub 项目。我们将分解此脚本的关键组件,并探讨它们如何共同工作以创建我们的语音转文本工具。

环境设置

我们首先导入必要的库并设置 Groq 客户端。我们使用存储在环境变量中的 API 密钥初始化 Groq 客户端。这是处理诸如 API 密钥之类的敏感信息的最佳实践,因为它可以将它们从源代码中分离出来,所以确保创建一个包含你的 API 密钥的 .env 文件

import os
import tempfile
import wave
import pyaudio
import keyboard
import pyautogui
import pyperclip
from groq import Groq

client = Groq(api_key=os.environ.get("GROQ_API_KEY"))

录制音频

record_audio 函数,正如其名称所示,负责捕获音频输入:

def record_audio(sample_rate=16000, channels=1, chunk=1024):
    p = pyaudio.PyAudio()
    stream = p.open(
        format=pyaudio.paInt16,
        channels=channels,
        rate=sample_rate,
        input=True,
        frames_per_buffer=chunk,
    )

  print("按住 PAUSE 按钮开始录制...")
  frames = []
  keyboard.wait("pause")  # 等待按下 PAUSE 按钮
  print("录制中... (释放 PAUSE 停止)")
  while keyboard.is_pressed("pause"):
      data = stream.read(chunk)
      frames.append(data)
  print("录制完成。")
  stream.stop_stream()
  stream.close()
  p.terminate()
  return frames, sample_rate

我们使用 16000 Hz 的采样率,这对我们的用例是最佳的。Whisper 本身将采样率降低到 16000 Hz,因此使用更高的采样率只会增加文件大小,这意味着我们无法转录与 16000 Hz 相同长度的秒数。

该函数设置了一个 PyAudio 流,并等待按下 PAUSE 按钮。然后,在按住按钮时以块的形式记录音频。我们选择了 PAUSE 按钮,因为它在现代应用程序中很少使用,但如果需要,你可以轻松修改为使用其他按键。

将音频保存到临时文件

一旦我们录制了音频,我们需要将其保存到临时文件以进行处理:

def save_audio(frames, sample_rate):
    with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as temp_audio:
        wf = wave.open(temp_audio.name, "wb")
        wf.setnchannels(1)
        wf.setsampwidth(pyaudio.PyAudio().get_sample_size(pyaudio.paInt16))
        wf.setframerate(sample_rate)
        wf.writeframes(b"".join(frames))
        wf.close()
        return temp_audio.name

该函数使用 tempfile 模块创建一个临时的 WAV 文件。临时文件在这里非常方便,因为我们只需要音频数据进行转录,之后我们会清理它,稍后我们会重新讨论这一点

使用 Groq 进行音频转录

我们工具的核心是由 transcribe_audio 函数处理的转录过程:

def transcribe_audio(audio_file_path):
    try:
        with open(audio_file_path, "rb") as file:
            transcription = client.audio.transcriptions.create(
                file=(os.path.basename(audio_file_path), file.read()),
                model="whisper-large-v3",
                prompt="""这段音频是由一个程序员讨论编程问题,程序员主要使用 Python,可能在讲话中提到 Python 库或引用代码。""",
                response_format="text",
                language="en",
            )
        return transcription
    except Exception as e:
        print(f"发生错误:{str(e)}")
        return None

该函数将使用 Groq API 对音频文件进行转录。我们使用了 “whisper-large-v3” 模型,它提供了高准确度的语音识别,但通过 Groq API,它也以极快的速度完成这项工作。prompt 参数为模型提供了上下文,提高了它对音频内容的理解。在这种情况下,我告诉它我将讨论与编程相关的事物,这使它在转录诸如库名称之类的内容时稍微更好。

处理转录输出

一旦我们有了转录的文本,我们需要将其放入活动应用程序中:

def copy_transcription_to_clipboard(text):
    pyperclip.copy(text)
    pyautogui.hotkey("ctrl", "v")

该函数使用 pyperclip 将转录的文本复制到剪贴板,然后使用 pyautogui 模拟 “Ctrl+V” 按键组合,将文本粘贴到活动应用程序中。这种方法确保我们的工具可以与任何文本输入字段无缝配合,无论应用程序是什么。

主循环

我们脚本的核心是 main() 函数,它将所有内容联系在一起:

def main():
    while True:
        # 录制音频
        frames, sample_rate = record_audio()

    # 将音频保存到临时文件
    temp_audio_file = save_audio(frames, sample_rate)
    # 转录音频
    print("转录中...")
    transcription = transcribe_audio(temp_audio_file)
    # 将转录复制到剪贴板
    if transcription:
        print("\n转录内容:")
        print(transcription)
        print("将转录内容复制到剪贴板...")
        copy_transcription_to_clipboard(transcription)
        print("转录内容已复制到剪贴板并粘贴到应用程序中。")
    else:
        print("转录失败。")
    # 清理临时文件
    os.unlink(temp_audio_file)
    print("\n准备进行下一次录制。按 PAUSE 键开始。")

该函数在一个无限循环中运行,允许用户进行多次录制而无需重新启动脚本。每次迭代中会发生以下情况:

  1. 当按住 PAUSE 按钮时,脚本录制音频。
  2. 将录制的音频保存到临时文件。
  3. 使用 Groq 的 Whisper API 对音频进行转录。
  4. 如果转录成功,将文本复制到剪贴板并粘贴到活动应用程序中。
  5. 删除临时音频文件以节省空间。

如果你喜欢这个项目,请务必在 GitHub 上 给项目加星

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

滚动至顶部