رونویسی صوتی

رابط برنامه‌نویسی نرم‌افزار 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")

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)

جاوا اسکریپت

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);

استراحت

# 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 حذف کنید یا یک لیست خالی ارائه دهید:

پایتون

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": [],
        }
    },
)

جاوا اسکریپت

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: [],
    },
  },
});

استراحت

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 مشخص کنید تا دقت رونویسی بهبود یابد (به زبان‌های پشتیبانی‌شده مراجعه کنید):

پایتون

generation_config = {
    "transcription_config": {
        "language_codes": ["es-ES"],
    }
}

جاوا اسکریپت

const generationConfig = {
  transcription_config: {
    language_codes: ["es-ES"],
  },
};

استراحت

{
  "generation_config": {
    "transcription_config": {
      "language_codes": ["es-ES"]
    }
  }
}

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

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

پایتون

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"],
        }
    },
)

جاوا اسکریپت

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"],
    },
  },
});

استراحت

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"]
      }
    }
  }'

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

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

با پیکربندی diarization_mode در mode diarization را فعال کنید:

پایتون

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",
            },
        }
    },
)

جاوا اسکریپت

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",
      },
    },
  },
});

استراحت

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 مهرهای زمانی را فعال کنید:

پایتون

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"],
            },
        }
    },
)

جاوا اسکریپت

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"],
      },
    },
  },
});

استراحت

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 ترکیب کنید تا هم برچسب‌های گوینده و هم مهرهای زمانی کلمات را دریافت کنید:

پایتون

generation_config = {
    "transcription_config": {
        "custom_vocabulary": ["Gemini"],
        "mode": {
            "type": "verbatim",
            "diarization_mode": "speaker",
            "timestamp_granularities": ["word"],
        },
    }
}

جاوا اسکریپت

const generationConfig = {
  transcription_config: {
    custom_vocabulary: ["Gemini"],
    mode: {
      type: "verbatim",
      diarization_mode: "speaker",
      timestamp_granularities: ["word"],
    },
  },
};

استراحت

{
  "generation_config": {
    "transcription_config": {
      "custom_vocabulary": ["Gemini"],
      "mode": {
        "type": "verbatim",
        "diarization_mode": "speaker",
        "timestamp_granularities": ["word"]
      }
    }
  }
}

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

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

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

پایتون

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": "smart",
            },
        }
    },
)
print(interaction.output_text)

جاوا اسکریپت

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: "smart",
      },
    },
  },
});
console.log(interaction.output_text);

استراحت

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": "smart"
        }
      }
    }
  }'

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

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

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

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

پایتون

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}")

جاوا اسکریپت

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}`);
}

استراحت

{
  "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.450s"
            },
            {
              "type": "word_info",
              "text": "world",
              "speaker": "spk_1",
              "start_offset": "0.500s",
              "end_offset": "0.850s"
            }
          ]
        }
      ]
    }
  ]
}

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

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

مرجع پارامتر

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

میدان نوع توضیحات
language_codes آرایه‌ای از رشته‌ها کدهای زبان BCP-47 (مثلاً ["en-US"] ). اگر حذف یا خالی باشد ( [] )، مدل به طور خودکار زبان را تشخیص داده و تغییر کد را مدیریت می‌کند.
custom_vocabulary آرایه‌ای از رشته‌ها تا ۱۰۰۰ اصطلاح، سرواژه یا نام‌های خاص سفارشی برای سوگیری در تشخیص گفتار.
mode شیء یا رشته پیکربندی حالت رونویسی. یک شیء حالت ( {"type": "smart"} یا {"type": "verbatim", ...} ) یا یک enum رشته‌ای ( "smart" , "verbatim" ) را می‌پذیرد. پیش‌فرض روی رونویسی کلمه به کلمه است.
mode.type رشته شناسه حالت ( "smart" یا "verbatim" ).
mode.timestamp_granularities آرایه‌ای از رشته‌ها (فقط در حالت Verbatim) جزئیات مهرهای زمانی برای برگرداندن. برای فعال کردن فاصله‌های شروع و پایان کلمه ["word"] را وارد کنید.
mode.diarization_mode رشته (فقط حالت کلمه به کلمه) حالت دیاریزاسیون. برای شناسایی و برچسب‌گذاری گویندگان مجزا "speaker" را وارد کنید.

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

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

محدودیت‌ها

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

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