使用Gemini API掌握音频转录
Gemini模型是多模态大语言模型,能够处理和生成多种类型的数据,包括文本、代码、图像、音频和视频。Gemini模型提供强大的音频转录功能,使开发人员能够将语音内容转换为文本。这有助于构建转录服务、为视频创建字幕以及开发语音启用的应用程序。如果您希望使用Gemini强大的AI模型将语音转换为文本,本综合指南将展示如何使用不同的Gemini API实现音频转录。我们将从基础实现到高级实时流处理逐步讲解。
Gemini支持以下音频格式作为输入:WAV、MP3、AIFF、AAC、OGG和FLAC。我们将介绍generateContent、streamGenerateContent和BidiGenerateContent(LiveAPI)API。您可以在https://ai.google.dev/api找到所有支持的API。generateContent是一个标准的REST端点,处理请求并返回单个响应。streamGenerateContent使用SSE(服务器发送事件)在生成时发送部分响应。此API是聊天机器人等需要更快、更交互式体验的应用程序的更好选择。
BidiGenerateContent或LiveAPI为实时对话用例创建有状态的双向流连接。Google提供多种编程语言的官方Google GenAI SDK来访问这些API。
前提条件
- 安装Python版本> 3.10
- 安装pip
- 安装Google GenAI SDK:
pip install google-genai
认证和设置
要使用Gemini API,您需要一个API密钥。您可以在Google AI Studio免费创建新密钥。您需要登录您的Google帐户,如果没有,请创建一个新帐户。我们将在创建GenAI客户端时显式提供API密钥。更多文档可在https://ai.google.dev/gemini-api/docs/api-key找到。
音频输入到Gemini模型
您可以通过两种方式向Gemini提供音频数据:
- 使用files API将音频文件上传到Google Cloud。
1
2
3
4
|
myfile = client.files.upload(file="path/to/sample.mp3")
response = client.models.generate_content(
model="gemini-2.5-flash", contents=["Transcribe the Audio", myfile]
)
|
- 将音频文件内容作为内联数据字节发送。在此方法中,包括音频数据在内的最大请求大小限制为20 MB。因此,对于长音频文件,您应使用files API传递音频输入。对于本指南中的示例代码,我们将音频作为内联数据传递。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
with open('path/to/small-sample.wav', 'rb') as f:
audio_bytes = f.read()
response = client.models.generate_content(
model='gemini-2.5-flash',
contents=[
'Transcribe the Audio',
types.Part.from_bytes(
data=audio_bytes,
mime_type='audio/wav',
)
]
)
|
基础音频转录
要从generateContent和streamGenerateContent API获取音频转录,用户必须提示模型。Live API略有不同,将在后续部分中解释。触发音频转录的简单提示可以是"Transcribe this audio"或"Transcribe this audio in English"。您还可以在提示中要求具有特定说明的转录,如下所示。
1
2
3
4
5
6
7
8
9
10
|
Transcribe the audio following these formatting rules:
1. Currency:
- For exact dollar amounts, include "$" and ".00"
Example: "ten dollars" → "$10.00"
2. Dates:
- Use format MMDDYYYY without any separators
- Convert written months to numbers
Example: "December 20th 2020" → "12202020"
Example: "February third 2023" → "02032023"
|
使用GenerateContent API获取转录的示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
from google import genai
from google.genai import types
import os
import base64
os.environ["GEMINI_API_KEY"]="GEMINI_API_KEY_VALUE"
with open('pathToAudio/audioFile.wav', 'rb') as f:
audio_bytes = base64.b64encode(f.read()).decode('utf-8')
client = genai.Client()
response = client.models.generate_content(
model='gemini-2.5-flash',
contents=[
'Transcribe this audio',
types.Part.from_bytes(
data=audio_bytes,
mime_type='audio/wav',
)
]
)
print(response.text)
|
使用StreamGenerateContent API获取转录的示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
from google import genai
from google.genai import types
import os
import base64
os.environ["GEMINI_API_KEY"]="GEMINI_API_KEY_VALUE"
with open('pathToAudio/audioFile.wav', 'rb') as f:
audio_bytes = base64.b64encode(f.read()).decode('utf-8')
client = genai.Client()
response = client.models.generate_content_stream(
model='gemini-2.5-flash',
contents=[
'Transcribe this audio',
types.Part.from_bytes(
data=audio_bytes,
mime_type='audio/wav',
)
]
)
for chunk in response:
print(chunk.text)
|
您可以选择任何接受音频输入并提供文本输出的Gemini模型,可在https://ai.google.dev/gemini-api/docs/models找到。
使用Live API的高级用法
Gemini Live API仍处于预览阶段,支持与Gemini模型进行双向实时语音和视频交互。这与Amazon的Nova Sonic模型的InvokeModelWithBidirectionalStream API和OpenAI模型的Realtime API相当。这些API设计用于与模型进行类似人类的交互,并提供音频和文本作为输出。Live API可以为输入和输出音频提供转录。要获取输入音频的转录,您需要在设置配置中发送input_audio_transcription。启用转录后,我们可以从响应对象中访问ASR转录,如response.server_content.input_transcription。由于我们只需要音频转录,我们可以选择TEXT或AUDIO作为response_modalities。响应模态指示模型的输出类型,即文本或语音。Live API的输入音频必须是16kHz、小端序的原始16位PCM音频。
以下代码是从Gemini Live API获取输入音频转录的示例。作为前提条件,安装google-genai和soundfile库。google-genai库提供Gemini API访问,soundfile帮助从文件读取音频数据。
1
2
|
pip install google-genai
pip install soundfile
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
import asyncio
from google import genai
import soundfile as sf
import numpy as np
from google.genai.types import (
AudioTranscriptionConfig,
LiveConnectConfig,
Blob,
)
class AudioFileManager:
def __init__(self, sample_rate=16000):
self.sample_rate = sample_rate
self.chunk_size = 512 # 根据需要调整块大小
self.sleep_duration = self.chunk_size / self.sample_rate
async def stream_audio_file(self, file_path):
"""流式传输音频文件块。"""
audio_data, file_sample_rate = sf.read(file_path)
# 转换为int16
audio_data = (audio_data * 32767).astype(np.int16)
# 以块流式传输音频
for i in range(0, len(audio_data), self.chunk_size):
chunk = audio_data[i:i + self.chunk_size]
yield chunk.tobytes()
await asyncio.sleep(self.sleep_duration)
async def process_responses(session):
"""实时处理模型的响应。"""
while True: # 持续接收响应
turn = session.receive()
async for message in turn:
if message.go_away is not None:
# 连接即将终止
print("Received go away Message")
print(message.go_away.time_left)
continue
if message.server_content.interrupted is True:
print("The session was interrupted")
continue
if message.server_content.input_transcription:
print(f"Input Audio Transcription: {message.server_content.input_transcription.text}")
if message.text:
print(f"Model Response: {message.text}")
client = genai.Client(api_key="GEMINI_API_KEY_VALUE")
MODEL_ID = "gemini-live-2.5-flash-preview" # 您可以选择任何live api支持的模型
CONFIG = LiveConnectConfig(
response_modalities=["TEXT"],
input_audio_transcription=AudioTranscriptionConfig(), # 启用音频输入转录
)
async def main():
async with client.aio.live.connect(model=MODEL_ID, config=CONFIG) as session:
# 启动响应处理任务
response_task = asyncio.create_task(process_responses(session))
audio_manager = AudioFileManager()
async for chunk in audio_manager.stream_audio_file("pathToAudio/audioFile.wav"):
await session.send_realtime_input(
media=Blob(data=chunk, mime_type="audio/pcm;rate=16000")
)
await session.send_realtime_input(audio_stream_end=True)
await response_task
if __name__ == "__main__":
asyncio.run(main())
|
注意事项
- 在本指南中,我使用了从Google AI Studio获取的API密钥来访问Gemini API。但是,您也可以使用vertexAI通过创建Google Cloud项目凭据来访问这些API。对于大规模开发应用程序的Google Cloud用户,应使用vertexAI。创建启用vertexAI的GenAI客户端如下:
client = genai.Client(vertexai=True, project=PROJECT_ID, location=LOCATION)
- 在测试过程中,我注意到Live API在音频的某个点之后开始发送乱码文本。
- generateContent和generateContentStream API可能返回空响应。
- Gemini 2.5 Pro比Gemini 2.0 Flash提供更好的转录准确性。但是,使用Gemini 2.0 Flash时转录接收速度更快。
总之,Gemini API为音频转录需求提供了强大而灵活的解决方案。通过generateContent、streamGenerateContent和预览版Live API,开发人员可以选择最适合其特定用例的方法。无论是简单的一次性转录还是实时流处理,Gemini API都支持它们。凭借对多种音频格式的支持、可定制的提示以及通过Google GenAI SDK的集成,在应用程序中实现音频转录从未如此简单。当您开始实现这些API时,请记住考虑文件大小限制、音频质量、模型成本和适当的错误处理等因素,以确保转录服务的最佳性能。