全部产品
Search
文档中心

Alibaba Cloud Model Studio:SDK Python untuk pengenalan ucapan real-time Paraformer

更新时间:Dec 26, 2025

Topik ini menjelaskan parameter dan antarmuka SDK Python untuk pengenalan ucapan real-time Paraformer.

Penting

Dokumen ini hanya berlaku untuk wilayah China (Beijing). Untuk menggunakan model-model tersebut, Anda harus menggunakan API key dari wilayah China (Beijing).

Panduan pengguna: Untuk deskripsi model dan panduan pemilihan, lihat Pengenalan ucapan real-time - Fun-ASR/Paraformer.

Prasyarat

  • Anda telah mengaktifkan Model Studio dan membuat API key. Untuk mencegah risiko keamanan, ekspor API key sebagai variabel lingkungan alih-alih menyematkannya langsung di kode Anda.

    Catatan

    Untuk memberikan izin akses sementara kepada aplikasi atau pengguna pihak ketiga, atau jika Anda ingin mengontrol secara ketat operasi berisiko tinggi seperti mengakses atau menghapus data sensitif, kami menyarankan Anda menggunakan token otentikasi sementara.

    Dibandingkan dengan API key jangka panjang, token otentikasi sementara lebih aman karena masa berlakunya singkat (60 detik). Token ini cocok untuk skenario panggilan sementara dan dapat secara efektif mengurangi risiko kebocoran API key.

    Untuk menggunakan token sementara, gantilah API key yang digunakan untuk autentikasi dalam kode Anda dengan token otentikasi sementara tersebut.

  • Instal versi terbaru SDK DashScope.

Daftar model

paraformer-realtime-v2

paraformer-realtime-8k-v2

Skenario

Skema seperti live streaming dan rapat

Skema pengenalan audio 8 kHz, seperti layanan pelanggan telepon dan pesan suara

Laju sampel

Apa saja

8 kHz

Bahasa

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

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

Tiongkok

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 Hotword kustom

✅ Lihat Hotword kustom

Tentukan bahasa pengenalan

✅ Tentukan bahasa menggunakan parameter language_hints.

Pengenalan emosi

✅ (Klik untuk melihat penggunaan)

Pengenalan emosi memiliki batasan berikut:

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

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

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

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

Mulai

Kelas Recognition menyediakan metode untuk panggilan non-streaming dan streaming dua arah. Pilih 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 langsung.

Panggilan non-streaming

Metode ini mengirimkan tugas speech-to-text real-time untuk file lokal. Proses akan diblokir hingga hasil transkripsi lengkap dikembalikan.

image

Buat instance kelas Recognition, atur parameter permintaan, lalu panggil metode call untuk melakukan pengenalan dan mendapatkan RecognitionResult.

Klik untuk melihat contoh lengkap

File audio yang digunakan dalam contoh adalah: asr_example.wav.

from http import HTTPStatus
from dashscope.audio.asr import Recognition

# 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('asr_example.wav')
if result.status_code == HTTPStatus.OK:
    print('Hasil pengenalan:')
    print(result.get_sentence())
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(),
    ))

Panggilan streaming dua arah

Metode ini mengirimkan tugas speech-to-text real-time dan mengembalikan hasil pengenalan secara real-time melalui antarmuka callback.

image
  1. Mulai pengenalan ucapan streaming

    Buat instance kelas Recognition, atur parameter permintaan dan antarmuka callback (RecognitionCallback), lalu panggil metode start.

  2. Kirimkan aliran audio

    Panggil berulang kali metode send_audio_frame dari kelas `Recognition` untuk mengirimkan 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 menyarankan 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

Kenali ucapan dari mikrofon

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 *

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 di 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()

Kenali file audio lokal

File audio yang digunakan dalam contoh adalah: asr_example.wav.

import os
import time
from dashscope.audio.asr import *

# 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() + ' Pengenalan selesai')  # pengenalan selesai

    def on_error(self, result: RecognitionResult) -> None:
        print('Task_id pengenalan: ', result.request_id)
        print('Error pengenalan: ', result.message)
        exit(0)

    def on_event(self, result: RecognitionResult) -> None:
        sentence = result.get_sentence()
        if 'text' in sentence:
            print(get_timestamp() + ' Teks RecognitionCallback: ', sentence['text'])
            if RecognitionResult.is_sentence_end(sentence):
                print(get_timestamp() + 
                    'Akhir kalimat RecognitionCallback, 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("asr_example.wav", 'rb')
    if os.path.getsize("asr_example.wav"):
        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, hanya satu thread yang dapat mengeksekusi kode Python pada satu waktu, meskipun beberapa library berorientasi performa mungkin menghilangkan batasan ini. Untuk memanfaatkan sumber daya komputasi komputer multi-core secara lebih baik, kami menyarankan Anda menggunakan 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__) kelas Recognition.

Parameter

Tipe

Default

Wajib

Deskripsi

model

str

-

Ya

Model yang digunakan untuk pengenalan ucapan real-time. Untuk informasi selengkapnya, lihat Daftar model.

sample_rate

int

-

Ya

Laju pengambilan sampel audio dalam Hz.

Parameter ini bervariasi tergantung model:

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

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

format

str

-

Ya

Format audio yang akan dikenali.

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

Penting

opus/speex: Harus dikemas dalam Ogg.

wav: Harus diencode PCM.

amr: Hanya tipe AMR-NB yang didukung.

vocabulary_id

str

-

Tidak

ID kosakata hotword. Parameter ini hanya berlaku jika diatur. Gunakan field ini untuk mengatur ID hotword untuk model v2 dan yang lebih baru.

Informasi hotword untuk ID hotword ini diterapkan pada permintaan pengenalan ucapan. Untuk informasi selengkapnya, lihat Hotword kustom.

disfluency_removal_enabled

bool

False

Tidak

Menentukan apakah akan memfilter kata-kata tidak lancar:

  • true

  • false (default)

language_hints

list[str]

["zh", "en"]

Tidak

Kode bahasa yang akan dikenali. Jika Anda tidak dapat menentukan bahasa sebelumnya, Anda dapat membiarkan parameter ini tidak diatur. Model akan secara otomatis mendeteksi bahasa.

Kode bahasa yang saat ini didukung:

  • zh: Tiongkok

  • en: Inggris

  • ja: Jepang

  • yue: Kanton

  • ko: Korea

  • de: Jerman

  • fr: Prancis

  • ru: Rusia

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

semantic_punctuation_enabled

bool

False

Tidak

Menentukan apakah akan mengaktifkan segmentasi kalimat semantik. Fitur ini dinonaktifkan secara default.

  • true: Mengaktifkan segmentasi kalimat semantik dan menonaktifkan segmentasi kalimat Voice Activity Detection (VAD).

  • false (default): Mengaktifkan segmentasi kalimat VAD dan menonaktifkan segmentasi kalimat semantik.

Segmentasi kalimat semantik memberikan akurasi lebih tinggi dan cocok untuk skenario transkripsi rapat. Segmentasi kalimat VAD memiliki latensi lebih rendah dan cocok untuk skenario interaktif.

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

Parameter ini hanya berlaku untuk model v2 dan yang lebih baru.

max_sentence_silence

int

800

Tidak

Ambang batas durasi diam untuk segmentasi kalimat VAD, dalam ms.

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

Nilai parameter berkisar antara 200 ms hingga 6000 ms. Nilai default adalah 800 ms.

Parameter ini hanya berlaku ketika parameter semantic_punctuation_enabled bernilai `false` (segmentasi VAD) dan modelnya v2 atau lebih baru.

multi_threshold_mode_enabled

bool

False

Tidak

Jika parameter ini diatur ke `true`, fitur ini mencegah VAD membagi kalimat yang terlalu panjang. Fitur ini dinonaktifkan secara default.

Parameter ini hanya berlaku ketika parameter semantic_punctuation_enabled bernilai `false` (segmentasi VAD) dan modelnya v2 atau lebih baru.

punctuation_prediction_enabled

bool

True

Tidak

Menentukan apakah akan menambahkan tanda baca secara otomatis ke hasil pengenalan:

  • true (default)

  • false

Parameter ini hanya berlaku untuk model v2 dan yang lebih baru.

heartbeat

bool

False

Tidak

Mengontrol apakah akan mempertahankan koneksi persisten dengan server:

  • true: Mempertahankan koneksi dengan server tanpa gangguan saat Anda terus-menerus mengirimkan audio diam.

  • false (default): Bahkan jika audio diam terus-menerus dikirimkan, koneksi akan terputus setelah 60 detik karena timeout.

    Audio diam mengacu pada konten dalam file audio atau aliran data yang tidak memiliki sinyal suara. Anda dapat menghasilkan audio diam menggunakan berbagai metode, seperti menggunakan perangkat lunak pengeditan audio seperti Audacity atau Adobe Audition, atau alat command-line seperti FFmpeg.

Parameter ini hanya berlaku untuk model v2 dan yang lebih baru.

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

inverse_text_normalization_enabled

bool

True

Tidak

Menentukan apakah akan mengaktifkan Inverse Text Normalization (ITN).

Fitur ini diaktifkan secara default (`true`). Saat diaktifkan, angka Tiongkok dikonversi menjadi angka Arab.

Parameter ini hanya berlaku untuk model v2 dan yang lebih baru.

callback

RecognitionCallback

-

Tidak

Antarmuka RecognitionCallback.

Antarmuka utama

Kelas Recognition

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

Metode anggota

Signature metode

Deskripsi

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 selesai 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 dikirimkan setiap kali sebaiknya tidak terlalu besar atau terlalu kecil. Kami menyarankan 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 selesai 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)

Mendapatkan 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 penting 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

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

Metode

Parameter

Nilai kembali

Deskripsi

def on_open(self) -> None

None

None

Metode ini dipanggil segera setelah koneksi dengan server berhasil dibuat.

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 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 anggota

Signature metode

Deskripsi

get_sentence

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

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

Untuk informasi selengkapnya, lihat Kalimat.

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.

Kalimat (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 tersedia untuk model paraformer-realtime-8k-v2.

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

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

emo_confidence

float

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

Pengenalan emosi memiliki batasan berikut:

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

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

  • Hasil pengenalan emosi hanya ditampilkan ketika metode is_sentence_end objek 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 terjadi error, lihat Pesan error untuk troubleshooting.

Jika masalah berlanjut, bergabunglah dengan grup developer untuk melaporkan masalah tersebut. Sertakan Request ID untuk membantu kami menyelidiki masalah tersebut.

Contoh lainnya

Untuk contoh lainnya, lihat GitHub.

FAQ

Fitur

T: Bagaimana cara mempertahankan koneksi persisten dengan server selama periode diam yang panjang?

Anda dapat mengatur parameter permintaan heartbeat ke true dan terus-menerus mengirimkan audio diam ke server.

Audio diam mengacu pada konten dalam file audio atau aliran data yang tidak memiliki sinyal suara. Anda dapat menghasilkan audio diam menggunakan berbagai metode, seperti perangkat lunak pengeditan audio seperti Audacity atau Adobe Audition, atau alat command-line seperti FFmpeg.

T: Bagaimana cara mengonversi format audio ke format yang diperlukan?

Anda dapat menggunakan tool FFmpeg. Untuk informasi selengkapnya, lihat situs web resmi FFmpeg.

# Perintah konversi dasar (templat universal)
# -i: Menentukan path file input. Contoh: audio.wav
# -c:a: Menentukan encoder audio. Contoh: aac, libmp3lame, pcm_s16le
# -b:a: Menentukan bit rate (mengontrol kualitas audio). Contoh: 192k, 320k
# -ar: Menentukan laju sampel. Contoh: 44100 (CD), 48000, 16000
# -ac: Menentukan jumlah saluran suara. Contoh: 1 (mono), 2 (stereo)
# -y: Menimpa file yang sudah ada (tidak perlu nilai).
ffmpeg -i input_audio.ext -c:a encoder_name -b:a bit_rate -ar sample_rate -ac num_channels output.ext

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

Ya. Hasil pengenalan ucapan mencakup timestamp awal dan akhir untuk setiap kalimat. Anda dapat menggunakan timestamp ini untuk menentukan rentang waktu setiap kalimat.

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

Ada dua cara untuk mengenali file lokal:

  • Langsung berikan path file lokal: Metode ini mengembalikan hasil pengenalan lengkap setelah file selesai diproses. Tidak cocok untuk skenario yang memerlukan umpan balik langsung.

    Berikan path file ke metode call dari kelas Recognition untuk langsung mengenali file audio. Untuk informasi selengkapnya, lihat panggilan non-streaming.

  • Konversi file lokal menjadi aliran biner untuk pengenalan: Metode ini mengembalikan hasil pengenalan secara streaming selama file sedang diproses. Cocok untuk skenario yang memerlukan umpan balik langsung.

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

Troubleshooting

T: Mengapa tidak ada hasil pengenalan?

  1. Periksa apakah format audio dan sampleRate/sample_rate dalam parameter permintaan diatur dengan benar dan memenuhi batasan parameter. Berikut adalah contoh kesalahan umum:

    • File audio memiliki ekstensi .wav tetapi berformat MP3, dan parameter format salah diatur ke `mp3`.

    • Laju sampel audio adalah 3.600 Hz, tetapi parameter sampleRate/sample_rate salah diatur ke 48.000.

    Anda dapat menggunakan tool ffprobe untuk mendapatkan informasi audio, seperti container, encoding, laju sampel, dan saluran suara:

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

    Misalnya, audio berbahasa Tiongkok, tetapi language_hints diatur ke en (Inggris).

  3. Jika semua pemeriksaan di atas lolos, Anda dapat menggunakan hotword kustom untuk meningkatkan pengenalan kata-kata tertentu.