Gemini API بااستفاده از مدل Gemini 3.5 Transcribe (gemini-3.5-transcribe)، گفتار موجود در فایلهای صوتی را به نوشتار تبدیل میکند. براساس قابلیتهای درک صوتی Gemini، این API ترانویسی دقیقی با شناسایی خودکار زبان، تفکیک گوینده، مُهرهای زمان در سطح کلمه، و راهنماییهای واژگان سفارشی ارائه میدهد. همچنین، حالت ترانویسی هوشمند را ارائه میدهد که دارای ویژگیهای ناروانیزدایی و قالببندی هوشمند است.
برای ترانویسی فایل صوتی، صدا را بارگذاری کنید و آن را به gemini-3.5-transcribe ارسال کنید:
Python
from google import genai
client = genai.Client()
audio_file = client.files.upload(file="path/to/sample.mp3")
interaction = client.interactions.create(
model="gemini-3.5-transcribe",
input=[
{
"type": "audio",
"uri": audio_file.uri,
"mime_type": audio_file.mime_type,
}
],
)
print(interaction.output_text)
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
const audioFile = await client.files.upload({
file: "path/to/sample.mp3",
config: { mime_type: "audio/mp3" },
});
const interaction = await client.interactions.create({
model: "gemini-3.5-transcribe",
input: [
{
type: "audio",
uri: audioFile.uri,
mime_type: audioFile.mimeType,
},
],
});
console.log(interaction.output_text);
رفتن
package main
import (
"context"
"fmt"
"log"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
audioFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", nil)
if err != nil {
log.Fatal(err)
}
res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
Model: interactions.Model("gemini-3.5-transcribe"),
Input: interactions.NewInteractionsInput([]interactions.Content{
interactions.NewContent(interactions.AudioContent{
URI: genai.Ptr(audioFile.URI),
MimeType: interactions.AudioContentMimeType(audioFile.MIMEType).ToPointer(),
}),
}),
}),
})
if err != nil {
log.Fatal(err)
}
fmt.Println(res.Interaction.GetOutputText())
}
استراحت
# First upload the file via the Files API, then pass its URI:
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.5-transcribe",
"input": [
{
"type": "audio",
"uri": "YOUR_FILE_URI",
"mime_type": "audio/mp3"
}
]
}'
نمای کلی
Gemini 3.5 Transcribe برای تکالیف گفتار به نوشتار بهینهسازی شده است. این مدل میتواند لهجههای مختلف، نوفه پسزمینه، و مکالمههای چندزبانه را مدیریت کند.
قابلیتهای کلیدی عبارتاند از:
- تشخیص خودکار گفتار (ASR): بهطور خودکار زبانها را در بیشاز ۸۵ منطقه تشخیص میدهد. جابهجایی کد درونجملهای و بینجملهای را بدون پیکربندی دستی مدیریت میکند.
- واژگان سفارشی: با ارسال حداکثر ۱۰۰۰ عبارت، تشخیص را بهسمت اصطلاحات خاص دامنه، سرنامها، و نامهای خاص متمایل میکند.
- تفکیک گوینده: بین چند گوینده تمایز قائل میشود و بخشهای گفتاری را به برچسبهای متمایز نسبت میدهد.
- مُهرهای زمان در سطح کلمه: برای هر کلمه تشخیصدادهشده، زمان شروع و پایان دقیق تولید میکند.
- ترانویسی هوشمند: نارساییهای گفتاری، کلمات پرکننده، و تکرارها را پاک میکند و قالببندی ساختاریافته اعمال میکند.
- قالببندی و عادیسازی: بزرگنویسی، نقطهگذاری، و عادیسازی معکوس نوشتار را اعمال میکند، مثلاً «بیستوشش میلیون دلار» را به «۲۶ میلیون دلار» تبدیل میکند.
برای استدلال صوتی عمومی یا پاسخ دادن به سؤال درباره محتوای صوتی، از درک صوتی استفاده کنید. برای ترکیب صدای نوشتار به گفتار، از نوشتار به گفتار استفاده کنید.
تشخیص زبان و راهنماییها
بهطور پیشفرض، مدل بهطور خودکار زبان گفتاری را تشخیص میدهد. وقتی گویندگان زبانشان را تغییر میدهند، بهطور پویا بین زبانها جابهجا میشود.
برای استفاده از تشخیص خودکار، language_codes را حذف کنید یا فهرست خالی ارائه دهید:
Python
interaction = client.interactions.create(
model="gemini-3.5-transcribe",
input=[
{
"type": "audio",
"uri": audio_file.uri,
"mime_type": audio_file.mime_type,
}
],
generation_config={
"transcription_config": {
"language_codes": [],
}
},
)
JavaScript
const interaction = await client.interactions.create({
model: "gemini-3.5-transcribe",
input: [
{
type: "audio",
uri: audioFile.uri,
mime_type: audioFile.mimeType,
},
],
generation_config: {
transcription_config: {
language_codes: [],
},
},
});
رفتن
package main
import (
"context"
"fmt"
"log"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
audioFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", nil)
if err != nil {
log.Fatal(err)
}
res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
Model: interactions.Model("gemini-3.5-transcribe"),
Input: interactions.NewInteractionsInput([]interactions.Content{
interactions.NewContent(interactions.AudioContent{
URI: genai.Ptr(audioFile.URI),
MimeType: interactions.AudioContentMimeType(audioFile.MIMEType).ToPointer(),
}),
}),
GenerationConfig: &interactions.GenerationConfig{
TranscriptionConfig: &interactions.TranscriptionConfig{
LanguageCodes: []string{},
},
},
}),
})
if err != nil {
log.Fatal(err)
}
fmt.Println(res.Interaction.GetOutputText())
}
استراحت
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.5-transcribe",
"input": [
{
"type": "audio",
"uri": "YOUR_FILE_URI",
"mime_type": "audio/mp3"
}
],
"generation_config": {
"transcription_config": {
"language_codes": []
}
}
}'
اگر زبان را ازقبل میدانید، کدهای زبان BCP-47 را در language_codes مشخص کنید تا دقت ترانویسی بهبود یابد (زبانهای پشتیبانیشده را ببینید):
Python
generation_config = {
"transcription_config": {
"language_codes": ["es-ES"],
}
}
JavaScript
const generationConfig = {
transcription_config: {
language_codes: ["es-ES"],
},
};
رفتن
package main
import (
"google.golang.org/genai/interactions/models/interactions"
)
func main() {
generationConfig := &interactions.GenerationConfig{
TranscriptionConfig: &interactions.TranscriptionConfig{
LanguageCodes: []string{"es-ES"},
},
}
_ = generationConfig
}
استراحت
{
"generation_config": {
"transcription_config": {
"language_codes": ["es-ES"]
}
}
}
واژگان سفارشی
میتوانید مدل گفتار را بهسمت کلمات غیرمعمول، اصطلاحات فنی، نامهای نمانام، یا اسامی خاص هدایت کنید. حداکثر ۱۰۰۰ عبارت را در آرایه custom_vocabulary ارائه دهید (بهترین نتایج معمولاً با حداکثر ۱۰۰ عبارت بهدست میآید):
Python
interaction = client.interactions.create(
model="gemini-3.5-transcribe",
input=[
{
"type": "audio",
"uri": audio_file.uri,
"mime_type": audio_file.mime_type,
}
],
generation_config={
"transcription_config": {
"custom_vocabulary": ["Gemini", "Kubernetes", "BigQuery"],
}
},
)
JavaScript
const interaction = await client.interactions.create({
model: "gemini-3.5-transcribe",
input: [
{
type: "audio",
uri: audioFile.uri,
mime_type: audioFile.mimeType,
},
],
generation_config: {
transcription_config: {
custom_vocabulary: ["Gemini", "Kubernetes", "BigQuery"],
},
},
});
رفتن
package main
import (
"context"
"fmt"
"log"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
audioFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", nil)
if err != nil {
log.Fatal(err)
}
res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
Model: interactions.Model("gemini-3.5-transcribe"),
Input: interactions.NewInteractionsInput([]interactions.Content{
interactions.NewContent(interactions.AudioContent{
URI: genai.Ptr(audioFile.URI),
MimeType: interactions.AudioContentMimeType(audioFile.MIMEType).ToPointer(),
}),
}),
GenerationConfig: &interactions.GenerationConfig{
TranscriptionConfig: &interactions.TranscriptionConfig{
CustomVocabulary: []string{"Gemini", "Kubernetes", "BigQuery"},
},
},
}),
})
if err != nil {
log.Fatal(err)
}
fmt.Println(res.Interaction.GetOutputText())
}
استراحت
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.5-transcribe",
"input": [
{
"type": "audio",
"uri": "YOUR_FILE_URI",
"mime_type": "audio/mp3"
}
],
"generation_config": {
"transcription_config": {
"custom_vocabulary": ["Gemini", "Kubernetes", "BigQuery"]
}
}
}'
بخشبندی صدای گوینده
«تفکیک گوینده» صداهای مختلف را در قطعه ضبطشده شناسایی میکند و هر بخش را با شناسه گوینده مثل spk_1 یا spk_2 برچسبگذاری میکند. تا ۸ گوینده پشتیبانی میشود (انتساب برای ۳ گوینده یا بیشتر آزمایشی است).
با پیکربندی diarization_mode در mode، بخشبندی را فعال کنید:
Python
interaction = client.interactions.create(
model="gemini-3.5-transcribe",
input=[
{
"type": "audio",
"uri": audio_file.uri,
"mime_type": audio_file.mime_type,
}
],
generation_config={
"transcription_config": {
"mode": {
"type": "verbatim",
"diarization_mode": "speaker",
},
}
},
)
JavaScript
const interaction = await client.interactions.create({
model: "gemini-3.5-transcribe",
input: [
{
type: "audio",
uri: audioFile.uri,
mime_type: audioFile.mimeType,
},
],
generation_config: {
transcription_config: {
mode: {
type: "verbatim",
diarization_mode: "speaker",
},
},
},
});
رفتن
package main
import (
"context"
"fmt"
"log"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
audioFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", nil)
if err != nil {
log.Fatal(err)
}
res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
Model: interactions.Model("gemini-3.5-transcribe"),
Input: interactions.NewInteractionsInput([]interactions.Content{
interactions.NewContent(interactions.AudioContent{
URI: genai.Ptr(audioFile.URI),
MimeType: interactions.AudioContentMimeType(audioFile.MIMEType).ToPointer(),
}),
}),
GenerationConfig: &interactions.GenerationConfig{
TranscriptionConfig: &interactions.TranscriptionConfig{
Mode: genai.Ptr(interactions.NewTranscriptionConfigMode(interactions.NewTranscriptionMode(interactions.VerbatimTranscriptionMode{
DiarizationMode: genai.Ptr("speaker"),
}))),
},
},
}),
})
if err != nil {
log.Fatal(err)
}
fmt.Println(res.Interaction.GetOutputText())
}
استراحت
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.5-transcribe",
"input": [
{
"type": "audio",
"uri": "YOUR_FILE_URI",
"mime_type": "audio/mp3"
}
],
"generation_config": {
"transcription_config": {
"mode": {
"type": "verbatim",
"diarization_mode": "speaker"
}
}
}
}'
مُهرهای زمان در سطح کلمه
مُهرهای زمان در سطح کلمه، زمان شروع و پایان دقیق هر کلمه شناساییشده در جاریسازی صوتی را ارائه میدهند.
با پیکربندی timestamp_granularities در mode، مُهرهای زمان را فعال کنید:
Python
interaction = client.interactions.create(
model="gemini-3.5-transcribe",
input=[
{
"type": "audio",
"uri": audio_file.uri,
"mime_type": audio_file.mime_type,
}
],
generation_config={
"transcription_config": {
"mode": {
"type": "verbatim",
"timestamp_granularities": ["word"],
},
}
},
)
JavaScript
const interaction = await client.interactions.create({
model: "gemini-3.5-transcribe",
input: [
{
type: "audio",
uri: audioFile.uri,
mime_type: audioFile.mimeType,
},
],
generation_config: {
transcription_config: {
mode: {
type: "verbatim",
timestamp_granularities: ["word"],
},
},
},
});
رفتن
package main
import (
"context"
"fmt"
"log"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
audioFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", nil)
if err != nil {
log.Fatal(err)
}
res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
Model: interactions.Model("gemini-3.5-transcribe"),
Input: interactions.NewInteractionsInput([]interactions.Content{
interactions.NewContent(interactions.AudioContent{
URI: genai.Ptr(audioFile.URI),
MimeType: interactions.AudioContentMimeType(audioFile.MIMEType).ToPointer(),
}),
}),
GenerationConfig: &interactions.GenerationConfig{
TranscriptionConfig: &interactions.TranscriptionConfig{
Mode: genai.Ptr(interactions.NewTranscriptionConfigMode(interactions.NewTranscriptionMode(interactions.VerbatimTranscriptionMode{
TimestampGranularities: []string{"word"},
}))),
},
},
}),
})
if err != nil {
log.Fatal(err)
}
fmt.Println(res.Interaction.GetOutputText())
}
استراحت
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.5-transcribe",
"input": [
{
"type": "audio",
"uri": "YOUR_FILE_URI",
"mime_type": "audio/mp3"
}
],
"generation_config": {
"transcription_config": {
"mode": {
"type": "verbatim",
"timestamp_granularities": ["word"]
}
}
}
}'
میتوانید diarization_mode و timestamp_granularities را در mode ترکیب کنید تا هم برچسبهای گوینده و هم مُهرهای زمان کلمه را دریافت کنید:
Python
generation_config = {
"transcription_config": {
"mode": {
"type": "verbatim",
"diarization_mode": "speaker",
"timestamp_granularities": ["word"],
},
}
}
JavaScript
const generationConfig = {
transcription_config: {
mode: {
type: "verbatim",
diarization_mode: "speaker",
timestamp_granularities: ["word"],
},
},
};
رفتن
package main
import (
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
)
func main() {
generationConfig := &interactions.GenerationConfig{
TranscriptionConfig: &interactions.TranscriptionConfig{
Mode: genai.Ptr(interactions.NewTranscriptionConfigMode(interactions.NewTranscriptionMode(interactions.VerbatimTranscriptionMode{
DiarizationMode: genai.Ptr("speaker"),
TimestampGranularities: []string{"word"},
}))),
},
}
_ = generationConfig
}
استراحت
{
"generation_config": {
"transcription_config": {
"mode": {
"type": "verbatim",
"diarization_mode": "speaker",
"timestamp_granularities": ["word"]
}
}
}
}
حالتهای ترانویسی
Gemini 3.5 Transcribe از دو حالت ترانویسی ازطریق پارامتر mode پشتیبانی میکند:
verbatim(پیشفرض): ترانویسی دقیق کلمهبهکلمه از هر آنچه گفته شده است را برمیگرداند و کلمات پرکننده خام («ام»، «اِ»، «مثلاً»، «میدانی»)، تکرارها، مکثها، و شروعهای اشتباه را حفظ میکند. مُهرهای زمان و بخشبندی صدای گوینده در این حالت ({"type": "verbatim", ...}) پیکربندی شدهاند.smart(ترانویسی هوشمند): ترانویسی را با اعمال پسپردازش هوشمند برای خواندن بهینهسازی میکند:- ناروانیزدایی: کلمات پرکننده مکالمه، لکنت زبان، و شروعهای اشتباه را حذف میکند.
- خوداصلاحی درونخطی: اصلاحات گفتاری را مستقیماً حل میکند (برای مثال، «بیایید سهشنبه همدیگر را ببینیم، نه، درواقع چهارشنبه ساعت دو» به «بیایید چهارشنبه ساعت ۲:۰۰ بعدازظهر همدیگر را ببینیم» تبدیل میشود).
- قالببندی ساختاریافته خودکار: بهطور خودکار افکار بیانشده را در قالب پاراگراف، فهرست شمارهدار، فهرست نقطهدار، تاریخهای قالببندیشده، واحد پول، و عدد ساختاردهی میکند.
- پاکسازی دستوری: نشانههای سجاوندی، حروف بزرگ و کوچک، و جریان طبیعی را اعمال میکند.
| صوتی گفتاری | verbatim برونداد |
برونداد smart (ترانویسی هوشمند) |
|---|---|---|
| «ام، خب برای جلسه، فکر میکنم باید، اه، آلیس را دعوت کنیم و، نه صبر کن، باب و کارول.» | «خب برای جلسه فکر میکنم باید آلیس را دعوت کنیم و نه صبر کن باب و کارول.» | «برای جلسه، فکر میکنم باید باب و کارول را دعوت کنیم.» |
| «مورد اول بازبینی بودجه مورد دوم نهایی کردن زمانبندی مورد سوم ارسال خلاصه» | «مورد اول بازبینی بودجه مورد دوم نهایی کردن زمانبندی مورد سوم ارسال خلاصه» | «۱. مرور بودجه ۲. نهایی کردن خط زمان ۳. ارسال خلاصه» |
Python
interaction = client.interactions.create(
model="gemini-3.5-transcribe",
input=[
{
"type": "audio",
"uri": audio_file.uri,
"mime_type": audio_file.mime_type,
}
],
generation_config={
"transcription_config": {
"mode": "smart",
}
},
)
print(interaction.output_text)
JavaScript
const interaction = await client.interactions.create({
model: "gemini-3.5-transcribe",
input: [
{
type: "audio",
uri: audioFile.uri,
mime_type: audioFile.mimeType,
},
],
generation_config: {
transcription_config: {
mode: "smart",
},
},
});
console.log(interaction.output_text);
رفتن
package main
import (
"context"
"fmt"
"log"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
audioFile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp3", nil)
if err != nil {
log.Fatal(err)
}
res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
Model: interactions.Model("gemini-3.5-transcribe"),
Input: interactions.NewInteractionsInput([]interactions.Content{
interactions.NewContent(interactions.AudioContent{
URI: genai.Ptr(audioFile.URI),
MimeType: interactions.AudioContentMimeType(audioFile.MIMEType).ToPointer(),
}),
}),
GenerationConfig: &interactions.GenerationConfig{
TranscriptionConfig: &interactions.TranscriptionConfig{
Mode: genai.Ptr(interactions.NewTranscriptionConfigMode(interactions.TranscriptionConfigModeEnumSmart)),
},
},
}),
})
if err != nil {
log.Fatal(err)
}
fmt.Println(res.Interaction.GetOutputText())
}
استراحت
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.5-transcribe",
"input": [
{
"type": "audio",
"uri": "YOUR_FILE_URI",
"mime_type": "audio/mp3"
}
],
"generation_config": {
"transcription_config": {
"mode": "smart"
}
}
}'
درحال تجزیه خروجی ترانویسی
متن کامل ترانویسی در interaction.output_text برگردانده میشود.
وقتی timestamp_granularities یا diarization_mode فعال باشد، API حاشیهنویسیهای دقیق در سطح کلمه را نیز که به محتوای تعامل پیوست شده است برمیگرداند.
در اینجا نحوه استخراج و تکرار مُهرهای زمان کلمه و نوبتهای گوینده آورده شده است:
Python
def extract_word_annotations(interaction):
words = []
for step in getattr(interaction, "steps", []) or []:
for content in getattr(step, "content", []) or []:
for annotation in getattr(content, "annotations", []) or []:
if getattr(annotation, "type", None) == "word_info":
words.append(annotation)
return words
words = extract_word_annotations(interaction)
for w in words:
speaker = f"[{w.speaker}] " if getattr(w, "speaker", None) else ""
start = getattr(w, "start_offset", "")
end = getattr(w, "end_offset", "")
timing = f"({start} -> {end}) " if start and end else ""
print(f"{speaker}{timing}{w.text}")
JavaScript
function extractWordAnnotations(interaction) {
const words = [];
for (const step of interaction.steps ?? []) {
for (const content of step.content ?? []) {
for (const annotation of content.annotations ?? []) {
if (annotation.type === "word_info") {
words.push(annotation);
}
}
}
}
return words;
}
const words = extractWordAnnotations(interaction);
for (const w of words) {
const speaker = w.speaker ? `[${w.speaker}] ` : "";
const timing = (w.start_offset && w.end_offset) ? `(${w.start_offset} -> ${w.end_offset}) ` : "";
console.log(`${speaker}${timing}${w.text}`);
}
رفتن
package main
import (
"fmt"
"google.golang.org/genai/interactions/models/interactions"
)
func extractWordAnnotations(interaction *interactions.Interaction) []*interactions.WordInfo {
var words []*interactions.WordInfo
if interaction == nil {
return words
}
for _, step := range interaction.Steps {
if step.ModelOutputStep != nil {
for _, content := range step.ModelOutputStep.Content {
if content.TextContent != nil {
for _, annotation := range content.TextContent.Annotations {
if annotation.WordInfo != nil {
words = append(words, annotation.WordInfo)
}
}
}
}
}
}
return words
}
func main() {
var interaction *interactions.Interaction
words := extractWordAnnotations(interaction)
for _, w := range words {
speaker := ""
if w.Speaker != nil && *w.Speaker != "" {
speaker = fmt.Sprintf("[%s] ", *w.Speaker)
}
timing := ""
if w.StartOffset != nil && w.EndOffset != nil {
timing = fmt.Sprintf("(%s -> %s) ", *w.StartOffset, *w.EndOffset)
}
fmt.Printf("%s%s%s\n", speaker, timing, w.GetText())
}
}
استراحت
{
"id": "interactions/abc123xyz",
"status": "completed",
"steps": [
{
"id": "step_001",
"type": "model_output",
"content": [
{
"type": "text",
"text": "Hello world",
"annotations": [
{
"type": "word_info",
"text": "Hello",
"speaker": "spk_1",
"start_offset": "0.100s",
"end_offset": "0.400s"
},
{
"type": "word_info",
"text": "world",
"speaker": "spk_1",
"start_offset": "0.500s",
"end_offset": "0.800s"
}
]
}
]
}
]
}
زبانهای پشتیبانیشده
زبانها و کدهای زبان BCP-47 زیر برای Gemini 3.5 Transcribe پشتیبانی میشوند:
| زبان | کد BCP-47 | زبان | کد BCP-47 |
|---|---|---|---|
| آفریکانس | af-ZA |
ژاپنی | ja-JP |
| آمهاریک | am-ET |
جاوهای | jv-ID |
| عربی (مصر) | ar-EG |
کابووردیانو | kea-CV |
| ارمنی | hy-AM |
کنادا | kn-IN |
| آسامی | as-IN |
قزاقی | kk-KZ |
| آذربایجانی | az-AZ |
کرهای | ko-KR |
| Belarusian | be-BY |
قرقیزی | ky-KG |
| بنگالی (بنگلادش) | bn-BD |
لتونیایی | lv-LV |
| بنگالی (هند) | bn-IN |
لینگالا | ln-CD |
| بوسنیایی | bs-BA |
لیتوانیایی | lt-LT |
| بلغاری | bg-BG |
مقدونی | mk-MK |
| بلغاری (آرومانی) | rup-BG |
مالایی | ms-MY |
| برمهای | my-MM |
مالایالام | ml-IN |
| کانتونی (سنتی) | yue-Hant-HK |
مالتی | mt-MT |
| کاتالان | ca-ES |
چینی ماندارین (سادهشده) | cmn-Hans-CN |
| سبوانو | ceb |
ماراتی | mr-IN |
| خِمِر مرکزی | km-KH |
مغولی | mn-MN |
| کرواتی | hr-HR |
نپالی | ne-NP |
| چک | cs-CZ |
نروژی | nb-NO |
| دانمارکی | da-DK |
اوریا | or-IN |
| هلندی | nl-NL |
لهستانی | pl-PL |
| انگلیسی (پادشاهی متحد) | en-GB |
پرتغالی (برزیل) | pt-BR |
| انگلیسی (هند) | en-IN |
پرتغالی (پرتغال) | pt-PT |
| انگلیسی (ایالات متحده) | en-US |
پنجابی | pa-IN |
| استونیایی | et-EE |
پنجابی (خط گورموخی) | pa-Guru-IN |
| فارسی | fa-IR |
رومانیایی | ro-RO |
| فیلیپینی | fil-PH |
روسی | ru-RU |
| فنلاندی | fi-FI |
صربی | sr-RS |
| فرانسوی | fr-FR |
سندی (خط عربی) | sd-Arab-IN |
| گالیسی | gl-ES |
اسلوواک | sk-SK |
| گرجستانی | ka-GE |
Slovenian | sl-SI |
| آلمانی | de-DE |
اسپانیایی (امریکای لاتین) | es-419 |
| یونانی | el-GR |
اسپانیایی (ایالات متحده) | es-US |
| گجراتی | gu-IN |
سواهیلی (کنیا) | sw-KE |
| هوسایی | ha-NG |
سوئدی | sv-SE |
| عبری | he-IL |
تاجیکی | tg-TJ |
| هندی | hi-IN |
تلوگو | te-IN |
| مجارستانی | hu-HU |
تایلندی | th-TH |
| ایسلندی | is-IS |
ترکی | tr-TR |
| انگلیسی هندی | en-IN |
اوکراینی | uk-UA |
| اندونزیایی | id-ID |
ازبکی | uz-UZ |
| ایتالیایی | it-IT |
ویتنامی | vi-VN |
قالبهای صوتی پشتیبانیشده
Gemini 3.5 Transcribe از انواع MIME قالب صوتی زیر پشتیبانی میکند:
- WAV -
audio/wav - MP3 -
audio/mp3 - AIFF -
audio/aiff - AAC -
audio/aac - OGG -
audio/ogg - FLAC -
audio/flac - MPEG -
audio/mpeg - M4A -
audio/m4a - L16 -
audio/l16 - Opus -
audio/opus - ALAW -
audio/alaw - MULAW -
audio/mulaw - WebM -
audio/webm
برای مشاهده فهرست کامل انواع MIME و طرحوارههای پارامتر پشتیبانیشده، به مرجع Interactions API مراجعه کنید.
مرجع پارامتر
ترانویسی را با تنظیم فیلدها در شیء transcription_config در generation_config پیکربندی کنید:
| فیلد | نوع | شرح |
|---|---|---|
language_codes |
آرایه رشتهها | کدهای زبان BCP-47 (مثلاً ["en-US"]). اگر حذف شود یا خالی باشد ([])، مدل بهطور خودکار زبان را تشخیص میدهد و تغییر کد را مدیریت میکند. |
custom_vocabulary |
آرایه رشتهها | تا ۱۰۰۰ اصطلاح سفارشی، سرنام، یا نام خاص برای سوگیری تشخیص گفتار. با بخشبندی صدای گوینده و مُهرهای زمان سطح کلمه ناسازگار است. |
mode |
شیء یا رشته | پیکربندی حالت ترانویسی. "smart" یا شیء حالت کلمهبهکلمه ({"type": "verbatim", ...}) را میپذیرد. بهطور پیشفرض ترانویسی کلمهبهکلمه است. |
mode.type |
رشته | (فقط حالت «عین عبارت») شناسه حالت. همیشه روی "verbatim" تنظیم شده است. |
mode.timestamp_granularities |
آرایه رشتهها | (فقط حالت کلمهبهکلمه) جزئیات مُهرهای زمان برای برگرداندن. برای فعال کردن افستهای شروع و پایان کلمه، ["word"] را ارسال کنید. با واژگان سفارشی سازگار نیست. |
mode.diarization_mode |
رشته | (فقط حالت «عین عبارت») حالت «تشخیص گوینده». "speaker" را برای شناسایی و برچسبگذاری گویندگان متمایز ارسال کنید. با واژگان سفارشی سازگار نیست. |
روالهای مطلوب
- صدای واضح ارائه دهید: مطمئن شوید صداهای ضبطشده دارای تفکیک صدای واضح باشند و از برش شدید اجتناب کنید.
- درصورت اطلاع، راهنماییهای زبانی ارائه دهید: اگر ازقبل زبان صوتی را میدانید،
language_codesرا مشخص کنید تا دقت به حداکثر برسد. - واژگان سفارشی هدف: فقط اصطلاحات دامنه متمایز، نامهای تجاری، یا اسامی خاص را در
custom_vocabularyاضافه کنید، نه کلمات رایج روزمره. - از Files API برای قطعههای ضبطشده بزرگ استفاده کنید: برای فایلهای طولانیتر از چند ثانیه، فایل را بااستفاده از
client.files.uploadبارگذاری کنید و شناسه منبع یکسان فایل برگرداندهشده را به مدل ارسال کنید.
محدودیتها
- مدت صدا: درخواستهای تکتایی استاندارد از فایلهای صوتی تا ۱ ساعت پشتیبانی میکنند. وقتی ویژگیهایی مثل تفکیک گوینده یا مُهرهای زمان در سطح کلمه فعال باشد، پردازش صدا به ۳۰ دقیقه محدود میشود.
- مُهرهای زمان در سطح کلمه: فعال کردن مُهرهای زمان در سطح کلمه ممکن است دقت کلی ترانویسی را کاهش دهد.
- بخشبندی صدای گوینده: بخشبندی صدای گوینده حداکثر از ۸ گوینده پشتیبانی میکند. انتساب گوینده برای ۳ گوینده یا بیشتر آزمایشی است.
- واژگان سفارشی: میتوانید حداکثر ۱٬۰۰۰ عبارت را در
custom_vocabularyارائه دهید، اما بهترین نتایج معمولاً با حداکثر ۱۰۰ عبارت بهدست میآید. نمیتوانیدcustom_vocabularyرا با گویندهشناسی یا مُهرهای زمان در سطح کلمه ترکیب کنید؛ میانای برنامهسازی کاربردی درخواستهایی را کهcustom_vocabularyرا در کنار هریک از این ویژگیها مشخص میکنند رد میکند. - سازگاری حالت: ترانویسی هوشمند (
"smart") را نمیتوان باtimestamp_granularitiesیاdiarization_modeترکیب کرد.
قدم بعدی چیست
- بااستفاده از Live API، صدا را بهطور همزمان با راهنمای ترانویسی زنده جاریسازی کنید.
- درک صوتی را کاوش کنید تا محتوای صوتی را تجزیهوتحلیل، خلاصه، یا پُرسمان کنید.
- با نحوه ترکیب صدا از نوشتار بااستفاده از نوشتار به گفتار آشنا شوید.
- برای اطلاع از قیمتگذاری مدل و محدودیتهای توکن، صفحه قیمتگذاری را بررسی کنید.
- برای جزئیات مربوط به بارگذاری و مدیریت فایلهای رسانهای، راهنمای Files API را بررسی کنید.