رونویسی صوتی

رابط برنامه‌نویسی نرم‌افزار Gemini، گفتار موجود در فایل‌های صوتی را با استفاده از مدل Gemini 3.5 Transcribe ( gemini-3.5-transcribe ) به متن تبدیل می‌کند. این رابط بر اساس قابلیت‌های درک صدای Gemini، رونویسی دقیقی را با شناسایی خودکار زبان، تشخیص گویشور، مهرهای زمانی در سطح کلمه و نکات واژگانی سفارشی ارائه می‌دهد. همچنین یک حالت رونویسی هوشمند با حذف ناروانی و قالب‌بندی هوشمند ارائه می‌دهد.

برای رونویسی یک فایل صوتی، فایل صوتی را آپلود کرده و آن را به gemini-3.5-transcribe ارسال کنید:

پایتون

from google import genai

client = genai.Client()

audio_file = client.files.upload(file="path/to/sample.mp3")

response = client.models.generate_content(
    model="gemini-3.5-transcribe",
    contents=[audio_file],
)

print(response.text)

جاوا اسکریپت

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

const audioFile = await ai.files.upload({
  file: "path/to/sample.mp3",
  mimeType: "audio/mp3",
});

const response = await ai.models.generateContent({
  model: "gemini-3.5-transcribe",
  contents: [audioFile],
});

console.log(response.text);

استراحت

# First upload the file via the Files API, then pass its URI:
curl -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-transcribe:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [
      {
        "parts": [
          {
            "fileData": {
              "fileUri": "YOUR_FILE_URI",
              "mimeType": "audio/mp3"
            }
          }
        ]
      }
    ]
  }'

نمای کلی

نرم‌افزار Gemini 3.5 Transcribe برای وظایف تبدیل گفتار به متن بهینه شده است. این نرم‌افزار لهجه‌های مختلف، نویز پس‌زمینه و مکالمات چندزبانه را پشتیبانی می‌کند.

قابلیت‌های کلیدی عبارتند از:

  • تشخیص خودکار گفتار (ASR): به طور خودکار زبان‌ها را در بیش از ۸۵ زبان تشخیص می‌دهد. تغییر کد درون جمله‌ای و بین جمله‌ای را بدون پیکربندی دستی انجام می‌دهد.
  • واژگان سفارشی: با ارائه حداکثر ۱۰۰۰ عبارت، تشخیص را به سمت اصطلاحات خاص حوزه، کلمات اختصاری و نام‌های خاص متمایل می‌کند.
  • تفکیک گوینده: بین چندین گوینده تمایز قائل می‌شود و بخش‌های گفتاری را به برچسب‌های متمایز نسبت می‌دهد.
  • مهرهای زمانی در سطح کلمه: برای هر کلمه شناخته شده، انحرافات زمانی شروع و پایان دقیقی ایجاد می‌کند.
  • رونویسی هوشمند: ناروانی‌ها، کلمات پرکننده، تکرارها را اصلاح می‌کند و قالب‌بندی ساختاریافته‌ای را اعمال می‌کند.
  • قالب‌بندی و نرمال‌سازی: حروف بزرگ، علائم نگارشی و نرمال‌سازی معکوس متن را اعمال می‌کند، مانند تبدیل «بیست و شش میلیون دلار» به «۲۶ میلیون دلار».

برای استدلال صوتی عمومی یا پاسخ به سوالات از طریق محتوای صوتی، از درک صوتی استفاده کنید. برای تبدیل متن به گفتار، از متن به گفتار استفاده کنید.

تشخیص زبان و نکات

به طور پیش‌فرض، مدل زبان گفتاری را به طور خودکار تشخیص می‌دهد. وقتی گوینده‌ها کدشان را عوض می‌کنند، به صورت پویا بین زبان‌ها جابجا می‌شود.

برای استفاده از تشخیص خودکار، language_codes حذف کنید یا یک لیست خالی ارائه دهید:

پایتون

from google import genai
from google.genai import types

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3.5-transcribe",
    contents=[audio_file],
    config=types.GenerateContentConfig(
        audio_transcription_config=types.AudioTranscriptionConfig(
            language_codes=[],
        )
    ),
)

جاوا اسکریپت

const response = await ai.models.generateContent({
  model: "gemini-3.5-transcribe",
  contents: [audioFile],
  config: {
    audioTranscriptionConfig: {
      languageCodes: [],
    },
  },
});

استراحت

curl -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-transcribe:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [
      {
        "parts": [
          {
            "fileData": {
              "fileUri": "YOUR_FILE_URI",
              "mimeType": "audio/mp3"
            }
          }
        ]
      }
    ],
    "generationConfig": {
      "audioTranscriptionConfig": {
        "languageCodes": []
      }
    }
  }'

اگر زبان را از قبل می‌دانید، کدهای زبان BCP-47 را در language_codes مشخص کنید تا دقت رونویسی بهبود یابد (به زبان‌های پشتیبانی‌شده مراجعه کنید):

پایتون

config = types.GenerateContentConfig(
    audio_transcription_config=types.AudioTranscriptionConfig(
        language_codes=["es-ES"],
    )
)

جاوا اسکریپت

const config = {
  audioTranscriptionConfig: {
    languageCodes: ["es-ES"],
  },
};

استراحت

{
  "generationConfig": {
    "audioTranscriptionConfig": {
      "languageCodes": ["es-ES"]
    }
  }
}

واژگان سفارشی

شما می‌توانید مدل گفتار را به سمت کلمات غیرمعمول، اصطلاحات فنی، نام‌های تجاری یا اسم‌های خاص هدایت کنید. حداکثر ۱۰۰۰ اصطلاح را در آرایه custom_vocabulary وارد کنید (بهترین نتایج معمولاً با حداکثر ۱۰۰ اصطلاح حاصل می‌شود):

پایتون

from google import genai
from google.genai import types

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3.5-transcribe",
    contents=[audio_file],
    config=types.GenerateContentConfig(
        audio_transcription_config=types.AudioTranscriptionConfig(
            custom_vocabulary=["Gemini", "Kubernetes", "BigQuery"],
        )
    ),
)

جاوا اسکریپت

const response = await ai.models.generateContent({
  model: "gemini-3.5-transcribe",
  contents: [audioFile],
  config: {
    audioTranscriptionConfig: {
      customVocabulary: ["Gemini", "Kubernetes", "BigQuery"],
    },
  },
});

استراحت

curl -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-transcribe:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [
      {
        "parts": [
          {
            "fileData": {
              "fileUri": "YOUR_FILE_URI",
              "mimeType": "audio/mp3"
            }
          }
        ]
      }
    ],
    "generationConfig": {
      "audioTranscriptionConfig": {
        "customVocabulary": ["Gemini", "Kubernetes", "BigQuery"]
      }
    }
  }'

دفتر خاطرات گوینده

قابلیت diarization گوینده، صداهای مختلف موجود در فایل ضبط شده را شناسایی کرده و هر بخش را با یک شناسه گوینده مانند spk_1 یا spk_2 برچسب‌گذاری می‌کند. حداکثر ۸ گوینده پشتیبانی می‌شوند (قابلیت انتساب ۳ گوینده یا بیشتر آزمایشی است).

با تنظیم diarization روی True diarization را فعال کنید:

پایتون

from google import genai
from google.genai import types

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3.5-transcribe",
    contents=[audio_file],
    config=types.GenerateContentConfig(
        audio_transcription_config=types.AudioTranscriptionConfig(
            diarization=True,
        )
    ),
)

جاوا اسکریپت

const response = await ai.models.generateContent({
  model: "gemini-3.5-transcribe",
  contents: [audioFile],
  config: {
    audioTranscriptionConfig: {
      diarization: true,
    },
  },
});

استراحت

curl -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-transcribe:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [
      {
        "parts": [
          {
            "fileData": {
              "fileUri": "YOUR_FILE_URI",
              "mimeType": "audio/mp3"
            }
          }
        ]
      }
    ],
    "generationConfig": {
      "audioTranscriptionConfig": {
        "diarization": true
      }
    }
  }'

مهرهای زمانی در سطح کلمه

مهرهای زمانی در سطح کلمه، فاصله‌های شروع و پایان دقیقی را برای هر کلمه شناخته شده در جریان صوتی ارائه می‌دهند.

با تنظیم word_timestamp روی True مهرهای زمانی را فعال کنید:

پایتون

from google import genai
from google.genai import types

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3.5-transcribe",
    contents=[audio_file],
    config=types.GenerateContentConfig(
        audio_transcription_config=types.AudioTranscriptionConfig(
            word_timestamp=True,
        )
    ),
)

جاوا اسکریپت

const response = await ai.models.generateContent({
  model: "gemini-3.5-transcribe",
  contents: [audioFile],
  config: {
    audioTranscriptionConfig: {
      wordTimestamp: true,
    },
  },
});

استراحت

curl -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-transcribe:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [
      {
        "parts": [
          {
            "fileData": {
              "fileUri": "YOUR_FILE_URI",
              "mimeType": "audio/mp3"
            }
          }
        ]
      }
    ],
    "generationConfig": {
      "audioTranscriptionConfig": {
        "wordTimestamp": true
      }
    }
  }'

شما می‌توانید diarization و word_timestamp را در یک درخواست واحد ترکیب کنید تا هم برچسب‌های گوینده و هم مهرهای زمانی کلمات را دریافت کنید:

پایتون

config = types.GenerateContentConfig(
    audio_transcription_config=types.AudioTranscriptionConfig(
        diarization=True,
        word_timestamp=True,
        custom_vocabulary=["Gemini"],
    )
)

جاوا اسکریپت

const config = {
  audioTranscriptionConfig: {
    diarization: true,
    wordTimestamp: true,
    customVocabulary: ["Gemini"],
  },
};

استراحت

{
  "generationConfig": {
    "audioTranscriptionConfig": {
      "diarization": true,
      "wordTimestamp": true,
      "customVocabulary": ["Gemini"]
    }
  }
}

حالت‌های رونویسی

نرم‌افزار Gemini 3.5 Transcribe از طریق پارامتر mode از دو حالت رونویسی پشتیبانی می‌کند:

  • VERBATIM (پیش‌فرض) : متن دقیق کلمه به کلمه هر آنچه گفته شده را برمی‌گرداند، و کلمات پرکننده خام ("امم"، "اوه"، "مثلاً"، "می‌دانی")، تکرارها، مکث‌ها و شروع‌های نادرست را حفظ می‌کند. هنگام استفاده از مهرهای زمانی یا ثبت خاطرات گوینده لازم است.
  • SMART (رونویسی هوشمند) : با اعمال پردازش هوشمند، رونوشت را برای خواندن بهینه می‌کند:
    • رفع ناروانی گفتار : کلمات پرکننده مکالمه، لکنت زبان و شروع‌های نادرست گفتار حذف می‌شوند.
    • خود-اصلاحی‌های درون‌خطی : اصلاحات گفتاری را مستقیماً حل می‌کند (برای مثال، «بیایید سه‌شنبه ملاقات کنیم، در واقع نه، چهارشنبه ساعت دو» تبدیل می‌شود به «بیایید چهارشنبه ساعت ۲ بعد از ظهر ملاقات کنیم» ).
    • قالب‌بندی ساختاریافته خودکار : افکار گفتاری را به‌طور خودکار در پاراگراف‌ها، فهرست‌های شماره‌گذاری‌شده، نقاط بولت‌دار، تاریخ‌های قالب‌بندی‌شده، واحد پول و اعداد ساختاردهی می‌کند.
    • پاکسازی دستوری : علائم نگارشی طبیعی، پوشش جمله و روند نگارشی را اعمال می‌کند.
صدای گفتاری خروجی VERBATIM خروجی SMART (رونویسی هوشمند)
«امم، پس برای جلسه، فکر کنم باید، اه، آلیس و، نه صبر کن، باب و کارول رو دعوت کنیم.» «خب، برای جلسه فکر می‌کنم باید آلیس را دعوت کنیم و باب و کارول را منتظر نگذاریم.» «برای جلسه، فکر می‌کنم باید باب و کارول را دعوت کنیم.»
«مورد اول بررسی بودجه مورد دوم نهایی کردن جدول زمانی مورد سوم ارسال خلاصه» «اولین مورد، بررسی بودجه، دومین مورد، نهایی کردن جدول زمانی، سومین مورد، ارسال خلاصه» «۱. بررسی بودجه
۲. جدول زمانی را نهایی کنید
۳. خلاصه را ارسال کنید.

پایتون

from google import genai
from google.genai import types

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3.5-transcribe",
    contents=[audio_file],
    config=types.GenerateContentConfig(
        audio_transcription_config=types.AudioTranscriptionConfig(
            mode="SMART",
        )
    ),
)
print(response.text)

جاوا اسکریپت

const response = await ai.models.generateContent({
  model: "gemini-3.5-transcribe",
  contents: [audioFile],
  config: {
    audioTranscriptionConfig: {
      mode: "SMART",
    },
  },
});
console.log(response.text);

استراحت

curl -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-transcribe:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [
      {
        "parts": [
          {
            "fileData": {
              "fileUri": "YOUR_FILE_URI",
              "mimeType": "audio/mp3"
            }
          }
        ]
      }
    ],
    "generationConfig": {
      "audioTranscriptionConfig": {
        "mode": "SMART"
      }
    }
  }'

تجزیه خروجی رونویسی

متن کامل رونوشت در response.text برگردانده می‌شود.

وقتی word_timestamp یا diarization فعال باشد، API حاشیه‌نویسی‌های دقیق در سطح کلمه و برچسب‌های گوینده متصل به بخش‌های کاندید را نیز برمی‌گرداند.

در اینجا نحوه استخراج و تکرار روی مهرهای زمانی کلمات و نوبت‌های گوینده آمده است:

پایتون

def extract_word_transcriptions(response):
    words = []
    for candidate in getattr(response, "candidates", []) or []:
        content = getattr(candidate, "content", None)
        for part in getattr(content, "parts", []) or []:
            transcription = getattr(part, "audio_transcription", None)
            if transcription:
                speaker = getattr(transcription, "speaker_label", "")
                for word_info in getattr(transcription, "words", []) or []:
                    word = getattr(word_info, "word", "")
                    start = getattr(word_info, "start_offset", "")
                    end = getattr(word_info, "end_offset", "")
                    words.append({
                        "word": word,
                        "speaker": speaker,
                        "start_offset": start,
                        "end_offset": end,
                    })
    return words

words = extract_word_transcriptions(response)

for w in words:
    speaker = f"[{w['speaker']}] " if w["speaker"] else ""
    timing = f"({w['start_offset']} -> {w['end_offset']}) " if w["start_offset"] and w["end_offset"] else ""
    print(f"{speaker}{timing}{w['word']}")

جاوا اسکریپت

function extractWordTranscriptions(response) {
  const words = [];
  for (const candidate of response.candidates ?? []) {
    for (const part of candidate.content?.parts ?? []) {
      const transcription = part.audioTranscription;
      if (transcription) {
        const speaker = transcription.speakerLabel ?? "";
        for (const wordInfo of transcription.words ?? []) {
          words.push({
            word: wordInfo.word ?? "",
            speaker: speaker,
            startOffset: wordInfo.startOffset ?? "",
            endOffset: wordInfo.endOffset ?? "",
          });
        }
      }
    }
  }
  return words;
}

const words = extractWordTranscriptions(response);

for (const w of words) {
  const speaker = w.speaker ? `[${w.speaker}] ` : "";
  const timing = (w.startOffset && w.endOffset) ? `(${w.startOffset} -> ${w.endOffset}) ` : "";
  console.log(`${speaker}${timing}${w.word}`);
}

استراحت

{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "audioTranscription": {
              "speakerLabel": "spk_1",
              "words": [
                {
                  "word": "Hello",
                  "startOffset": "0.100s",
                  "endOffset": "0.450s"
                },
                {
                  "word": "world",
                  "startOffset": "0.500s",
                  "endOffset": "0.850s"
                }
              ]
            }
          }
        ],
        "role": "model"
      },
      "finishReason": "STOP"
    }
  ]
}

زبان‌های پشتیبانی‌شده

زبان‌های زیر و کدهای زبان 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
بلاروسی 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 اسلوونیایی 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

مرجع پارامتر

رونویسی را با تنظیم فیلدها در شیء audio_transcription_config در GenerateContentConfig پیکربندی کنید:

میدان نوع توضیحات
language_codes آرایه‌ای از رشته‌ها کدهای زبان BCP-47 (مثلاً ["en-US"] ). اگر حذف یا خالی باشد ( [] )، مدل به طور خودکار زبان را تشخیص داده و تغییر کد را مدیریت می‌کند.
custom_vocabulary آرایه‌ای از رشته‌ها تا ۱۰۰۰ اصطلاح، سرواژه یا نام‌های خاص سفارشی برای سوگیری در تشخیص گفتار.
word_timestamp بولی برای شامل کردن فاصله‌های شروع و پایان کلمه، روی True تنظیم کنید. اگر حذف شود یا False ، هیچ مهر زمانی کلمه‌ای بازگردانده نمی‌شود.
diarization بولی برای شناسایی و برچسب‌گذاری گویندگان متمایز، روی True تنظیم کنید.
mode رشته حالت رونویسی. مقادیر پشتیبانی‌شده: "VERBATIM" (پیش‌فرض) و "SMART" . با مهرهای زمانی و diarization سازگار نیست.

بهترین شیوه‌ها

  • صدای واضحی ارائه دهید: مطمئن شوید که ضبط‌های صوتی تفکیک صدای واضحی دارند و از بریدگی شدید صدا جلوگیری کنید.
  • در صورت اطلاع، نکات مربوط به زبان را ارائه دهید: اگر زبان فایل صوتی را از قبل می‌دانید، برای به حداکثر رساندن دقت، language_codes را مشخص کنید.
  • واژگان سفارشی را هدف قرار دهید: فقط اصطلاحات دامنه، نام‌های تجاری یا اسم‌های خاص متمایز را در custom_vocabulary به جای کلمات رایج روزمره قرار دهید.
  • برای ضبط‌های بزرگ از API فایل‌ها استفاده کنید: برای فایل‌هایی که بیش از چند ثانیه طول می‌کشند، فایل را با استفاده از client.files.upload آپلود کنید و فایل برگردانده شده را به محتوای مدل ارسال کنید.

محدودیت‌ها

  • مدت زمان صدا: درخواست‌های استاندارد unary از فایل‌های صوتی تا ۱ ساعت پشتیبانی می‌کنند. پردازش صدا در صورت فعال بودن ویژگی‌هایی مانند diarization گوینده یا مهرهای زمانی در سطح کلمه، به ۳۰ دقیقه محدود می‌شود.
  • مهرهای زمانی سطح کلمه: فعال کردن مهرهای زمانی سطح کلمه ممکن است دقت کلی رونویسی را کاهش دهد.
  • تنظیم نام گوینده: تنظیم نام گوینده تا ۸ گوینده را پشتیبانی می‌کند. اختصاص نام گوینده برای ۳ گوینده یا بیشتر آزمایشی است.
  • واژگان سفارشی: شما می‌توانید تا ۱۰۰۰ اصطلاح را در custom_vocabulary ارائه دهید، اما بهترین نتایج معمولاً با حداکثر ۱۰۰ اصطلاح حاصل می‌شود.
  • سازگاری با حالت: رونویسی هوشمند ( mode: "SMART" ) را نمی‌توان با word_timestamp یا diarization ترکیب کرد.

قدم بعدی چیست؟