All Products
Search
Document Center

Alibaba Cloud Model Studio:Python SDK

Last Updated:Sep 09, 2026

Parameter dan antarmuka Python SDK untuk pengenalan ucapan real-time Paraformer.

PentingDokumen ini hanya berlaku untuk wilayah Tiongkok daratan (Beijing). Untuk menggunakan model tersebut, Anda harus menggunakan API key dari wilayah Tiongkok daratan (Beijing).

PentingAlibaba Cloud Model Studio telah merilis domain khusus ruang kerja untuk wilayah Tiongkok (Beijing). Domain khusus baru ini memberikan performa lebih unggul dan stabilitas lebih tinggi untuk permintaan inferensi. Kami merekomendasikan migrasi dari dashscope.aliyuncs.com ke {WorkspaceId}.cn-beijing.maas.aliyuncs.com.

Ganti {WorkspaceId} dengan Workspace ID aktual Anda. Domain yang ada tetap berfungsi penuh.

Panduan pengguna: Untuk pengenalan model dan rekomendasi pemilihan, lihat Pengenalan Ucapan Real-time - Fun-ASR/Paraformer.

Prasyarat

Anda telah mengaktifkan layanan dan Mendapatkan API key. Harap Konfigurasikan API key sebagai Variabel lingkungan alih-alih hardcoding di kode Anda untuk mencegah risiko keamanan akibat kebocoran kode.

CatatanKetika Anda perlu memberikan akses sementara kepada aplikasi atau pengguna pihak ketiga, atau ketika ingin mengontrol secara ketat operasi berisiko tinggi seperti mengakses atau menghapus data sensitif, kami merekomendasikan penggunaan Token otentikasi sementara.

Dibandingkan dengan API Key jangka panjang, token otentikasi sementara memiliki periode validitas singkat (60 detik) dan keamanan lebih tinggi, sehingga cocok untuk skenario panggilan sementara dan secara efektif mengurangi risiko kebocoran API Key.

Penggunaan: Dalam kode Anda, gantilah API Key yang awalnya digunakan untuk otentikasi dengan token otentikasi sementara yang diperoleh.

Daftar model

paraformer-realtime-v2paraformer-realtime-8k-v2
Skema penggunaan

Streaming langsung, rapat, dan skenario serupa

Pengenalan audio 8 kHz dalam skenario seperti layanan pelanggan telepon dan pesan suara

Laju sampel

Apa saja

8kHz

Bahasa

Bahasa Tionghoa (termasuk Mandarin dan berbagai dialek), Inggris, Jepang, Korea, Jerman, Prancis, Rusia

Dialek Tionghoa yang didukung: Shanghainese, Wu, Minnan, Timur Laut, Gansu, Guizhou, Henan, Hubei, Hunan, Jiangxi, Ningxia, Shanxi, Shaanxi, Shandong, Sichuan, Tianjin, Yunnan, Kanton

Tionghoa

Prediksi tanda baca

✅ Didukung secara default. Tidak perlu konfigurasi.

✅ Didukung secara default. Tidak perlu konfigurasi.

Inverse Text Normalization (ITN)

✅ Didukung secara default. Tidak perlu konfigurasi.

✅ Didukung secara default. Tidak perlu konfigurasi.

Kosakata kustom

✅ Lihat Kustomisasi hotword

✅ Lihat Kustomisasi hotword

Tentukan bahasa pengenalan

✅ Tentukan bahasa menggunakan parameter language_hints.

Pengenalan emosi

✅ (Klik untuk melihat penggunaan)

Pengenalan emosi memiliki batasan berikut:

  • Hanya berlaku untuk model paraformer-realtime-8k-v2.
  • Anda harus menonaktifkan tanda baca semantik (dikendalikan oleh parameter permintaan semantic_punctuation_enabled). Tanda baca semantik dinonaktifkan secara default.
  • Hasil pengenalan emosi hanya ditampilkan ketika metode is_sentence_end dari RecognitionResult mengembalikan nilai True.

Untuk memperoleh hasil deteksi emosi, ambil emosi dan tingkat kepercayaan emosi kalimat saat ini dari field emo_tag dan emo_confidence pada informasi kalimat tunggal (Sentence).

Mulai

Kelas Recognition menyediakan metode untuk panggilan non-streaming dan streaming dua arah. Anda dapat memilih metode yang sesuai berdasarkan kebutuhan Anda:

  • Panggilan non-streaming: Mengenali file lokal dan mengembalikan hasil lengkap sekaligus. Cocok untuk memproses audio yang telah direkam sebelumnya.
  • Panggilan streaming dua arah: Mengenali aliran audio dan menghasilkan hasil secara real time. Aliran audio dapat berasal dari perangkat eksternal, seperti mikrofon, atau dibaca dari file lokal. Cocok untuk skenario yang memerlukan umpan balik segera.

Panggilan non-streaming

Metode ini mengirimkan tugas ucapan-ke-teks real-time untuk file lokal. Proses diblokir hingga hasil transkripsi lengkap dikembalikan.

Buat instance kelas Recognition, atur parameter permintaan, dan panggil metode call untuk melakukan pengenalan atau terjemahan serta memperoleh RecognitionResult.

Klik untuk melihat contoh lengkap

from http import HTTPStatus
from dashscope.audio.asr import Recognition
# Tiongkok (Beijing): Ganti {WorkspaceId} dengan Workspace ID aktual Anda. Konfigurasi berbeda-beda berdasarkan wilayah.
dashscope.base_websocket_api_url = "wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/inference"

# Jika Anda belum mengonfigurasi API key dalam variabel lingkungan, hapus komentar baris kode berikut dan ganti apiKey dengan API key Anda.
# import dashscope
# dashscope.api_key = "apiKey"

recognition = Recognition(model='paraformer-realtime-v2',
                          format='wav',
                          sample_rate=16000,
                          # Parameter "language_hints" hanya didukung oleh model paraformer-realtime-v2.
                          language_hints=['zh', 'en'],
                          callback=None)
result = recognition.call('{YOUR_AUDIO_FILE}')
if result.status_code == HTTPStatus.OK:
    sentences = result.get_sentence()
    for sentence in sentences:
        print(sentence['text'])
else:
    print('Error: ', result.message)

print(
    '[Metric] requestId: {}, first package delay ms: {}, last package delay ms: {}'
    .format(
        recognition.get_last_request_id(),
        recognition.get_first_package_delay(),
        recognition.get_last_package_delay(),
    ))

CatatanPada panggilan non-streaming, result.get_sentence() mengembalikan daftar kalimat (List[Dict]). Setiap elemen berisi field seperti text (teks yang dikenali), begin_time / end_time (timestamp), dan words (timestamp per kata). Iterasi melalui daftar tersebut dan gunakan sentence['text'] untuk mengekstrak teks biasa.

Hal ini berbeda dengan callback streaming, di mana result.get_sentence() mengembalikan satu kalimat (Dict[str, Any]). Untuk detailnya, lihat Sentence.

Panggilan streaming dua arah

Metode ini mengirimkan tugas ucapan-ke-teks real-time dan mengembalikan hasil pengenalan secara real time melalui antarmuka callback.

  1. Mulai pengenalan ucapan streaming

    Buat instance kelas Recognition, ikat parameter permintaan dan antarmuka callback (RecognitionCallback), lalu panggil metode start untuk memulai pengenalan ucapan streaming.

  2. Streaming

    Panggil berulang kali metode send_audio_frame dari kelas Recognition untuk mengirim aliran audio biner dari file lokal atau perangkat (seperti mikrofon) ke server dalam segmen-segmen.

    Saat data audio dikirim, server menggunakan metode on_event dari antarmuka callback RecognitionCallback untuk mengembalikan hasil pengenalan ke klien secara real time.

    Kami merekomendasikan durasi setiap segmen audio yang dikirim sekitar 100 milidetik, dengan ukuran data antara 1 KB hingga 16 KB.

  3. Akhiri pemrosesan

    Panggil metode stop dari kelas Recognition untuk menghentikan pengenalan ucapan.

    Metode ini memblokir thread saat ini hingga callback on_complete atau on_error dari antarmuka callback (RecognitionCallback) dipicu.

Klik untuk melihat contoh lengkap

import os
import signal  # untuk penanganan event keyboard (tekan "Ctrl+C" untuk menghentikan perekaman)
import sys

import dashscope
import pyaudio
from dashscope.audio.asr import *
# Tiongkok (Beijing): Ganti {WorkspaceId} dengan Workspace ID aktual Anda. Konfigurasi berbeda-beda berdasarkan wilayah.
dashscope.base_websocket_api_url = "wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/inference"

mic = None
stream = None

# Atur parameter perekaman
sample_rate = 16000  # laju pengambilan sampel (Hz)
channels = 1  # saluran mono
dtype = 'int16'  # tipe data
format_pcm = 'pcm'  # format data audio
block_size = 3200  # jumlah frame per buffer

def init_dashscope_api_key():
    """
        Tetapkan API-key DashScope Anda. Informasi lebih lanjut:
        https://github.com/aliyun/alibabacloud-bailian-speech-demo/blob/master/PREREQUISITES.md
    """

    if 'DASHSCOPE_API_KEY' in os.environ:
        dashscope.api_key = os.environ[
            'DASHSCOPE_API_KEY']  # muat API-key dari variabel lingkungan DASHSCOPE_API_KEY
    else:
        dashscope.api_key = '<your-dashscope-api-key>'  # tetapkan API-key secara manual

# Callback pengenalan ucapan real-time
class Callback(RecognitionCallback):
    def on_open(self) -> None:
        global mic
        global stream
        print('RecognitionCallback open.')
        mic = pyaudio.PyAudio()
        stream = mic.open(format=pyaudio.paInt16,
                          channels=1,
                          rate=16000,
                          input=True)

    def on_close(self) -> None:
        global mic
        global stream
        print('RecognitionCallback close.')
        stream.stop_stream()
        stream.close()
        mic.terminate()
        stream = None
        mic = None

    def on_complete(self) -> None:
        print('RecognitionCallback completed.')  # pengenalan selesai

    def on_error(self, message) -> None:
        print('RecognitionCallback task_id: ', message.request_id)
        print('RecognitionCallback error: ', message.message)
        # Hentikan dan tutup aliran audio jika sedang berjalan
        if 'stream' in globals() and stream.active:
            stream.stop()
            stream.close()
        # Keluar dari program secara paksa
        sys.exit(1)

    def on_event(self, result: RecognitionResult) -> None:
        sentence = result.get_sentence()
        if 'text' in sentence:
            print('RecognitionCallback text: ', sentence['text'])
            if RecognitionResult.is_sentence_end(sentence):
                print(
                    'RecognitionCallback sentence end, request_id:%s, usage:%s'
                    % (result.get_request_id(), result.get_usage(sentence)))

def signal_handler(sig, frame):
    print('Ctrl+C ditekan, hentikan pengenalan ...')
    # Hentikan pengenalan
    recognition.stop()
    print('Pengenalan dihentikan.')
    print(
        '[Metric] requestId: {}, first package delay ms: {}, last package delay ms: {}'
        .format(
            recognition.get_last_request_id(),
            recognition.get_first_package_delay(),
            recognition.get_last_package_delay(),
        ))
    # Keluar dari program secara paksa
    sys.exit(0)

# fungsi utama
if __name__ == '__main__':
    init_dashscope_api_key()
    print('Menginisialisasi ...')

    # Buat callback pengenalan
    callback = Callback()

    # Panggil layanan pengenalan dengan mode async, Anda dapat menyesuaikan parameter pengenalan, seperti model, format,
    # sample_rate
    recognition = Recognition(
        model='paraformer-realtime-v2',
        format=format_pcm,
        # 'pcm', 'wav', 'opus', 'speex', 'aac', atau 'amr'. Anda dapat memeriksa format yang didukung dalam dokumen.
        sample_rate=sample_rate,
        # 8000 atau 16000 didukung.
        semantic_punctuation_enabled=False,
        callback=callback)

    # Mulai pengenalan
    recognition.start()

    signal.signal(signal.SIGINT, signal_handler)
    print("Tekan 'Ctrl+C' untuk menghentikan perekaman dan pengenalan...")
    # Buat pendengar keyboard hingga "Ctrl+C" ditekan

    while True:
        if stream:
            data = stream.read(3200, exception_on_overflow=False)
            recognition.send_audio_frame(data)
        else:
            break

    recognition.stop()
import os
import time
from dashscope.audio.asr import *
# Tiongkok (Beijing): Ganti {WorkspaceId} dengan Workspace ID aktual Anda. Konfigurasi berbeda-beda berdasarkan wilayah.
dashscope.base_websocket_api_url = "wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/inference"

# Jika Anda belum mengonfigurasi API key dalam variabel lingkungan, hapus komentar baris kode berikut dan ganti apiKey dengan API key Anda.
# import dashscope
# dashscope.api_key = "apiKey"

from datetime import datetime

def get_timestamp():
    now = datetime.now()
    formatted_timestamp = now.strftime("[%Y-%m-%d %H:%M:%S.%f]")
    return formatted_timestamp

class Callback(RecognitionCallback):
    def on_complete(self) -> None:
        print(get_timestamp() + ' Recognition completed')  # pengenalan selesai

    def on_error(self, result: RecognitionResult) -> None:
        print('Recognition task_id: ', result.request_id)
        print('Recognition error: ', result.message)
        exit(0)

    def on_event(self, result: RecognitionResult) -> None:
        sentence = result.get_sentence()
        if 'text' in sentence:
            print(get_timestamp() + ' RecognitionCallback text: ', sentence['text'])
            if RecognitionResult.is_sentence_end(sentence):
                print(get_timestamp() +
                    'RecognitionCallback sentence end, request_id:%s, usage:%s'
                    % (result.get_request_id(), result.get_usage(sentence)))

callback = Callback()

recognition = Recognition(model='paraformer-realtime-v2',
                          format='wav',
                          sample_rate=16000,
                          # Parameter "language_hints" hanya didukung oleh model paraformer-realtime-v2.
                          language_hints=['zh', 'en'],
                          callback=callback)

recognition.start()

try:
    audio_data: bytes = None
    f = open("{YOUR_AUDIO_FILE}", 'rb')
    if os.path.getsize("{YOUR_AUDIO_FILE}"):
        while True:
            audio_data = f.read(3200)
            if not audio_data:
                break
            else:
                recognition.send_audio_frame(audio_data)
            time.sleep(0.1)
    else:
        raise Exception(
            'File yang diberikan kosong (panjang nol byte)')
    f.close()
except Exception as e:
    raise e

recognition.stop()

print(
    '[Metric] requestId: {}, first package delay ms: {}, last package delay ms: {}'
    .format(
        recognition.get_last_request_id(),
        recognition.get_first_package_delay(),
        recognition.get_last_package_delay(),
    ))

Panggilan konkuren

Dalam Python, karena adanya Global Interpreter Lock (GIL), hanya satu thread yang dapat menjalankan kode Python pada satu waktu (meskipun beberapa library berorientasi performa mungkin menghilangkan batasan ini). Jika Anda ingin memanfaatkan sumber daya komputasi komputer multi-inti secara lebih baik, kami merekomendasikan penggunaan multiprocessing atau concurrent.futures.ProcessPoolExecutor. Multithreading dapat meningkatkan latensi panggilan SDK secara signifikan dalam kondisi konkurensi tinggi.

Parameter permintaan

Parameter permintaan diatur dalam konstruktor (init) dari kelas Recognition.

Parameter

Type

Default

Wajib

Deskripsi

model

str

-

Ya

Model yang digunakan untuk pengenalan ucapan real-time. Untuk informasi lebih lanjut, lihat Daftar Model.

sample_rate

int

-

Ya

Atur laju sampel (dalam Hz) audio yang akan dikenali.

Bervariasi berdasarkan model:

  • paraformer-realtime-v2 mendukung laju sampel apa saja.

  • paraformer-realtime-8k-v2 hanya mendukung laju sampel 8000 Hz.

format

str

-

Ya

Atur format audio yang akan dikenali.

Format audio yang didukung: pcm, wav, mp3, opus, speex, aac, amr.

opus/speex: Harus menggunakan enkapsulasi Ogg.

wav: Harus dikodekan dengan PCM.

amr: Hanya tipe AMR-NB yang didukung.

vocabulary_id

str

-

Tidak

Atur ID hot word. Jika tidak diatur, hot word tidak akan berlaku. Gunakan field ini untuk mengatur ID hot word untuk model v2 dan yang lebih baru.

Pada sesi pengenalan ucapan saat ini, informasi hot word yang sesuai dengan ID hot word ini akan diterapkan. Untuk penggunaan detail, lihat Hotword kustom.

disfluency_removal_enabled

bool

False

Tidak

Atur apakah akan menyaring kata pengisi:

  • true: Menyaring kata pengisi

  • false (default): Tidak menyaring kata pengisi

language_hints

list[str]

["zh", "en"]

Tidak

Atur kode bahasa untuk pengenalan. Jika Anda tidak dapat menentukan bahasa sebelumnya, Anda dapat membiarkannya tidak diatur dan model akan secara otomatis mendeteksi bahasa.

Kode bahasa yang saat ini didukung:

  • zh: Tionghoa

  • en: Inggris

  • ja: Jepang

  • yue: Kanton

  • ko: Korea

  • de: Jerman

  • fr: Prancis

  • ru: Rusia

Parameter ini hanya berlaku untuk model multibahasa. Untuk informasi lebih lanjut, lihat Daftar model.

semantic_punctuation_enabled

bool

False

Tidak

Atur apakah akan mengaktifkan segmentasi semantik. Dinonaktifkan secara default.

  • true: Aktifkan segmentasi semantik dan nonaktifkan segmentasi VAD (Voice Activity Detection).

  • false (default): Aktifkan segmentasi VAD (Voice Activity Detection) dan nonaktifkan segmentasi semantik.

Segmentasi semantik memberikan akurasi lebih tinggi dan cocok untuk skenario transkripsi rapat. Segmentasi VAD (Voice Activity Detection) memiliki latensi lebih rendah dan cocok untuk skenario interaktif.

Dengan menyesuaikan parameter semantic_punctuation_enabled, Anda dapat secara fleksibel mengganti metode segmentasi pengenalan ucapan agar sesuai dengan skenario berbeda.

Parameter ini hanya berlaku ketika model adalah v2 atau yang lebih baru.

max_sentence_silence

int

800

Tidak

Atur ambang batas durasi diam (dalam ms) untuk segmentasi VAD (Voice Activity Detection).

Ketika durasi diam setelah segmen ucapan melebihi ambang batas ini, sistem menentukan bahwa kalimat telah berakhir.

Rentang parameter adalah 200 ms hingga 6000 ms, dengan nilai default 800 ms.

Parameter ini hanya berlaku ketika parameter semantic_punctuation_enabled bernilai false (segmentasi VAD) dan model adalah v2 atau yang lebih baru.

multi_threshold_mode_enabled

bool

False

Tidak

Ketika sakelar ini diaktifkan (true), mencegah segmentasi VAD memotong kalimat yang terlalu panjang. Dinonaktifkan secara default.

Parameter ini hanya berlaku ketika parameter semantic_punctuation_enabled bernilai false (segmentasi VAD) dan model adalah v2 atau yang lebih baru.

punctuation_prediction_enabled

bool

True

Tidak

Atur apakah akan secara otomatis menambahkan tanda baca dalam hasil pengenalan:

  • true (default): Ya

  • false: Tidak

Parameter ini hanya berlaku ketika model adalah v2 atau yang lebih baru.

heartbeat

bool

False

Tidak

Ketika Anda perlu mempertahankan koneksi panjang dengan server, gunakan sakelar ini untuk mengontrol perilaku:

  • true: Koneksi dengan server dapat dipertahankan tanpa gangguan ketika terus-menerus mengirim audio diam.

  • false (default): Bahkan ketika audio diam terus-menerus dikirim, koneksi akan timeout dan ditutup setelah periode tertentu.

    Audio diam mengacu pada file audio atau aliran data yang tidak mengandung sinyal suara. Audio diam dapat dihasilkan melalui berbagai metode, seperti menggunakan perangkat lunak pengeditan audio seperti Audacity atau Adobe Audition, atau melalui alat command-line seperti FFmpeg.

Parameter ini hanya berlaku ketika model adalah v2 atau yang lebih baru.

Ketika menggunakan field ini, versi SDK harus 1.23.1 atau lebih baru.

inverse_text_normalization_enabled

bool

True

Tidak

Atur apakah akan mengaktifkan ITN (Inverse Text Normalization).

Diaktifkan secara default (true). Ketika diaktifkan, angka Tionghoa dikonversi menjadi angka Arab.

Parameter ini hanya berlaku ketika model adalah v2 atau yang lebih baru.

callback

RecognitionCallback

-

Tidak

Antarmuka RecognitionCallback.

Antarmuka utama

Kelas Recognition

Kelas Recognition diimpor menggunakan from dashscope.audio.asr import *.

Metode anggotaSignature metodeDeskripsi

call

def call(self, file: str, phrase_id: str = None, **kwargs) -> RecognitionResult

Panggilan non-streaming yang menggunakan file lokal. Metode ini memblokir thread saat ini hingga seluruh file audio dibaca. File harus memiliki izin baca.

Hasil pengenalan dikembalikan sebagai tipe RecognitionResult.

start

def start(self, phrase_id: str = None, **kwargs)

Memulai pengenalan ucapan.

Ini adalah metode pengenalan real-time streaming berbasis callback yang tidak memblokir thread saat ini. Harus digunakan bersama send_audio_frame dan stop.

send_audio_frame

def send_audio_frame(self, buffer: bytes)

Mendorong aliran audio. Aliran audio yang didorong setiap kali tidak boleh terlalu besar atau terlalu kecil. Kami merekomendasikan setiap paket audio memiliki durasi sekitar 100 ms dan ukuran antara 1 KB hingga 16 KB.

Anda dapat memperoleh hasil pengenalan melalui metode on_event dari antarmuka callback (RecognitionCallback).

stop

def stop(self)

Menghentikan pengenalan ucapan. Metode ini memblokir hingga layanan telah mengenali semua audio yang diterima dan tugas selesai.

get_last_request_id

def get_last_request_id(self)

Mendapatkan request_id. Ini dapat digunakan setelah konstruktor dipanggil (objek dibuat).

get_first_package_delay

def get_first_package_delay(self)

Mendapatkan delay paket pertama, yaitu latensi dari pengiriman paket audio pertama hingga menerima paket hasil pengenalan pertama. Gunakan ini setelah tugas selesai.

get_last_package_delay

def get_last_package_delay(self)

Memperoleh delay paket terakhir, yaitu waktu yang dibutuhkan dari pengiriman instruksi stop hingga menerima paket hasil pengenalan terakhir. Gunakan ini setelah tugas selesai.

Antarmuka callback (RecognitionCallback)

Selama panggilan streaming dua arah, server menggunakan callback untuk mengembalikan informasi dan data proses kunci ke klien. Anda harus mengimplementasikan metode callback untuk memproses informasi dan data yang dikembalikan.

Klik untuk melihat contoh

class Callback(RecognitionCallback):
    def on_open(self) -> None:
        print('Koneksi berhasil')

    def on_event(self, result: RecognitionResult) -> None:
        # Implementasikan logika untuk menerima hasil pengenalan
        pass

    def on_complete(self) -> None:
        print('Tugas selesai')

    def on_error(self, result: RecognitionResult) -> None:
        print('Terjadi pengecualian: ', result)

    def on_close(self) -> None:
        print('Koneksi ditutup')

callback = Callback()
MetodeParameterNilai kembalianDeskripsi
def on_open(self) -> None

None

None

Metode ini dipanggil segera setelah koneksi dengan server terjalin.

def on_event(self, result: RecognitionResult) -> None

result: RecognitionResult

None

Metode ini dipanggil ketika layanan mengirimkan respons.

def on_complete(self) -> None

None

None

Metode ini dipanggil setelah semua hasil pengenalan telah dikembalikan.

def on_error(self, result: RecognitionResult) -> None

result: Hasil pengenalan

None

Metode ini dipanggil ketika terjadi pengecualian.

def on_close(self) -> None

None

None

Metode ini dipanggil setelah layanan menutup koneksi.

Hasil respons

Hasil pengenalan (RecognitionResult)

RecognitionResult merepresentasikan hasil pengenalan dari satu pengenalan real-time dalam panggilan streaming dua arah atau panggilan non-streaming.

Metode anggotaSignature metodeDeskripsi

get_sentence

def get_sentence(self) -> Union[Dict[str, Any], List[Any]]

Mendapatkan kalimat yang saat ini dikenali dan informasi timestamp-nya. Dalam callback, satu kalimat dikembalikan, sehingga metode ini mengembalikan tipe Dict[str, Any].

Untuk informasi lebih lanjut, lihat Sentence.

get_request_id

def get_request_id(self) -> str

Mendapatkan request_id dari permintaan.

is_sentence_end

@staticmethod
def is_sentence_end(sentence: Dict[str, Any]) -> bool

Menentukan apakah kalimat yang diberikan telah berakhir.

Sentence (Sentence)

Anggota kelas Sentence adalah sebagai berikut:

Parameter

Tipe

Deskripsi

begin_time

int

Waktu mulai kalimat, dalam ms.

end_time

int

Waktu akhir kalimat, dalam ms.

text

str

Teks yang dikenali.

words

Daftar Informasi timestamp kata (Word)

Informasi timestamp kata.

emo_tag

str

Emosi kalimat saat ini:

  • positive: Emosi positif, seperti senang atau puas

  • negative: Emosi negatif, seperti marah atau sedih

  • neutral: Tidak ada emosi yang jelas

Pengenalan emosi memiliki batasan berikut:

  • Hanya berlaku untuk model paraformer-realtime-8k-v2.

  • Anda harus menonaktifkan tanda baca semantik (dikendalikan oleh parameter permintaan semantic_punctuation_enabled). Tanda baca semantik dinonaktifkan secara default.

  • Hasil pengenalan emosi hanya ditampilkan ketika metode is_sentence_end dari RecognitionResult mengembalikan nilai True.

emo_confidence

float

Tingkat kepercayaan emosi yang dikenali untuk kalimat saat ini. Nilainya berkisar dari 0,0 hingga 1,0. Nilai yang lebih besar menunjukkan tingkat kepercayaan yang lebih tinggi.

Pengenalan emosi memiliki batasan berikut:

  • Hanya berlaku untuk model paraformer-realtime-8k-v2.

  • Anda harus menonaktifkan tanda baca semantik (dikendalikan oleh parameter permintaan semantic_punctuation_enabled). Tanda baca semantik dinonaktifkan secara default.

  • Hasil pengenalan emosi hanya ditampilkan ketika metode is_sentence_end dari RecognitionResult mengembalikan nilai True.

Informasi timestamp kata (Word)

Anggota kelas Word adalah sebagai berikut:

Parameter

Tipe

Deskripsi

begin_time

int

Waktu mulai kata, dalam ms.

end_time

int

Waktu akhir kata, dalam ms.

text

str

Kata tersebut.

punctuation

str

Tanda baca.

Kode error

Jika Anda mengalami error, lihat Kode error untuk troubleshooting.

Jika masalah berlanjut, bergabunglah dengan komunitas developer untuk melaporkan masalah Anda dan berikan Request ID untuk investigasi lebih lanjut.

Contoh lainnya

Untuk contoh lainnya, lihat GitHub.

FAQ

Fitur

T: Bagaimana cara mempertahankan koneksi panjang dengan server selama diam berkepanjangan?

Atur parameter permintaan heartbeat ke true dan terus-menerus kirimkan audio diam ke server.

Audio diam mengacu pada file audio atau aliran data yang tidak mengandung sinyal suara. Audio diam dapat dihasilkan melalui berbagai metode, seperti menggunakan perangkat lunak pengeditan audio seperti Audacity atau Adobe Audition, atau melalui alat command-line seperti FFmpeg.

T: Bagaimana cara mengonversi audio ke format yang didukung?

Anda dapat menggunakan tool FFmpeg. Untuk penggunaan lebih lanjut, rujuk situs resmi FFmpeg.

# Perintah konversi dasar (templat universal)
# -i: Jalur file input. Contoh: audio.wav
# -c:a: Kodek audio. Contoh: aac, libmp3lame, pcm_s16le
# -b:a: Bitrate (kontrol kualitas). Contoh: 192k, 320k
# -ar: Laju sampel. Contoh: 44100 (CD), 48000, 16000
# -ac: Jumlah saluran. Contoh: 1 (mono), 2 (stereo)
# -y: Timpa file yang ada (tidak perlu nilai)
ffmpeg -i input_audio.ext -c:a codec_name -b:a bitrate -ar sample_rate -ac channels output.ext

# Contoh: WAV -> MP3 (pertahankan kualitas asli)
ffmpeg -i input.wav -c:a libmp3lame -q:a 0 output.mp3
# Contoh: MP3 -> WAV (format standar PCM 16-bit)
ffmpeg -i input.mp3 -c:a pcm_s16le -ar 44100 -ac 2 output.wav
# Contoh: M4A -> AAC (ekstraksi/konversi audio Apple)
ffmpeg -i input.m4a -c:a copy output.aac  # Ekstraksi langsung tanpa re-encoding
ffmpeg -i input.m4a -c:a aac -b:a 256k output.aac  # Re-encode untuk kualitas lebih tinggi
# Contoh: FLAC lossless -> Opus (kompresi tinggi)
ffmpeg -i input.flac -c:a libopus -b:a 128k -vbr on output.opus
T: Apakah mendukung melihat rentang waktu untuk setiap kalimat?

Ya. Hasil pengenalan ucapan mencakup timestamp awal dan akhir untuk setiap kalimat, yang dapat digunakan untuk menentukan rentang waktu setiap kalimat.

T: Bagaimana cara mengenali file lokal (file audio rekaman)?

Ada dua cara untuk mengenali file lokal:

  • Langsung berikan jalur file lokal: Metode ini mengembalikan hasil pengenalan lengkap setelah file sepenuhnya diproses. Tidak cocok untuk skenario yang memerlukan umpan balik segera.

    Berikan jalur file ke metode call dari kelas Recognition untuk langsung mengenali file audio. Untuk informasi lebih lanjut, lihat Panggilan non-streaming.

  • Konversi file lokal menjadi aliran biner untuk pengenalan: Metode ini mengembalikan hasil pengenalan sebagai aliran saat file sedang diproses. Cocok untuk skenario yang memerlukan umpan balik segera.

    Anda dapat menggunakan metode send_audio_frame dari kelas Recognition untuk mengirim aliran biner ke server untuk pengenalan. Untuk informasi lebih lanjut, lihat panggilan streaming dua arah.

Troubleshooting

T: Apa penyebab kegagalan mengenali ucapan (tidak ada hasil pengenalan)?

  1. Periksa apakah format audio (format) dan laju sampel (sampleRate/sample_rate) dalam parameter permintaan diatur dengan benar dan mematuhi batasan parameter. Berikut adalah contoh kesalahan umum:

    • Ekstensi file audio adalah .wav, tetapi format sebenarnya adalah MP3, dan parameter permintaan format diatur ke mp3 (pengaturan parameter salah).
    • Laju sampel audio adalah 3600 Hz, tetapi parameter permintaan sampleRate/sample_rate diatur ke 48000 (pengaturan parameter salah).

    Anda dapat menggunakan tool ffprobe untuk memperoleh informasi kontainer, kodek, laju sampel, saluran, dan lainnya tentang audio:

ffprobe -v error -show_entries format=format_name -show_entries stream=codec_name,sample_rate,channels -of default=noprint_wrappers=1 input.xxx
  1. Ketika menggunakan model paraformer-realtime-v2, periksa apakah bahasa yang diatur dalam language_hints sesuai dengan bahasa aktual audio.

    Contoh: Audio sebenarnya dalam bahasa Tionghoa, tetapi language_hints diatur ke en (Inggris).

  2. Jika semua pemeriksaan di atas lolos, Anda dapat menggunakan hot word kustom untuk meningkatkan akurasi pengenalan untuk kata-kata tertentu.