リアルタイム音声認識サービスは、音声ストリームをリアルタイムで句読点付きのテキストに変換し、「話しながら入力」するような体験を提供します。マイク入力、会議の録音、またはローカル音声ファイルを簡単に文字起こしできます。このサービスは、リアルタイムの議事録、ライブ字幕、音声チャット、インテリジェントカスタマーサービスなどのシナリオで広く使用されています。
主な機能
中国語、英語、およびさまざま方言を含む多言語のリアルタイム音声認識をサポートします。
特定の語彙の認識精度を向上させるためのカスタムホットワードをサポートします。
構造化された認識結果を生成するためのタイムスタンプ出力をサポートします。
さまざまな録音環境に適応するために、柔軟なサンプルレートと多様な音声フォーマットを提供します。
オプションの音声アクティビティ検出 (VAD) を提供し、無音セグメントを自動的にフィルタリングし、長時間の音声の処理効率を向上させます。
SDK と WebSocket 接続を通じて、低遅延で安定したサービスを提供します。
適用範囲
サポートモデル:
国際
国際デプロイメントモードでは、アクセスポイントとデータストレージはシンガポールリージョンに配置され、モデル推論の計算リソースはグローバルに (中国本土を除く) 動的にスケジュールされます。
以下のモデルを呼び出す際は、シンガポールリージョンの API キーを選択してください:
Fun-ASR: fun-asr-realtime (安定バージョン、現在は fun-asr-realtime-2025-11-07 と同等)、fun-asr-realtime-2025-11-07 (スナップショットバージョン)
中国本土
中国本土デプロイメントモードでは、アクセスポイントとデータストレージは北京リージョンに配置され、モデル推論の計算リソースは中国本土に限定されます。
以下のモデルを呼び出す際は、北京リージョンの API キーを選択してください:
Fun-ASR: fun-asr-realtime (安定バージョン、現在は fun-asr-realtime-2025-11-07 と同等)、fun-asr-realtime-2025-11-07 (スナップショットバージョン)、fun-asr-realtime-2025-09-15 (スナップショットバージョン)、fun-asr-flash-8k-realtime (安定バージョン、現在は fun-asr-flash-8k-realtime-2026-01-28 と同等)、fun-asr-flash-8k-realtime-2026-01-28
Paraformer: paraformer-realtime-v2、paraformer-realtime-v1、paraformer-realtime-8k-v2、paraformer-realtime-8k-v1
詳細については、「モデルリスト」をご参照ください。
モデルの選択
シナリオ | 推奨モデル | 理由 |
中国語普通話認識 (会議/ライブストリーミング) | fun-asr-realtime、fun-asr-realtime-2025-11-07、paraformer-realtime-v2 | 複数フォーマット互換、高サンプルレート対応、安定した遅延。 |
多言語認識 (国際会議) | paraformer-realtime-v2 | 多言語をカバー。 |
中国語方言認識 (カスタマーサービス/行政サービス) | fun-asr-realtime-2025-11-07、paraformer-realtime-v2 | 複数の地方方言をカバー。 |
中国語、英語、日本語の混合認識 (授業/スピーチ) | fun-asr-realtime、fun-asr-realtime-2025-11-07 | 中国語、英語、日本語の認識に最適化。 |
低帯域幅の電話通話文字起こし | fun-asr-flash-8k-realtime | 中国語の電話カスタマーサービスシナリオ向けに設計。 |
ホットワードのカスタマイズシナリオ (ブランド名/専門用語) | Paraformer、Fun-ASR 最新バージョンモデル | ホットワードの有効化/無効化が可能で、イテレーションと設定が容易。 |
詳細については、「モデル機能の比較」をご参照ください。
クイックスタート
以下のサンプルコードは、API の呼び出し方法を示しています。一般的なシナリオのその他のコード例については、GitHub をご参照ください。
API キーを取得し、API キーを環境変数として設定する必要があります。SDK を使用して呼び出しを行う場合は、DashScope SDK をインストールする必要もあります。
Fun-ASR
マイク入力からの音声認識
リアルタイム音声認識は、マイクからの音声を認識して結果を出力し、「話しながら入力」するような体験を提供します。
Java
import com.alibaba.dashscope.audio.asr.recognition.Recognition;
import com.alibaba.dashscope.audio.asr.recognition.RecognitionParam;
import com.alibaba.dashscope.audio.asr.recognition.RecognitionResult;
import com.alibaba.dashscope.common.ResultCallback;
import com.alibaba.dashscope.utils.Constants;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.TargetDataLine;
import java.nio.ByteBuffer;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class Main {
public static void main(String[] args) throws InterruptedException {
// 以下の URL はシンガポールリージョン用です。北京リージョンのモデルを使用する場合は、URL を wss://dashscope.aliyuncs.com/api-ws/v1/inference に置き換えてください。
Constants.baseWebsocketApiUrl = "wss://dashscope-intl.aliyuncs.com/api-ws/v1/inference";
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.submit(new RealtimeRecognitionTask());
executorService.shutdown();
executorService.awaitTermination(1, TimeUnit.MINUTES);
System.exit(0);
}
}
class RealtimeRecognitionTask implements Runnable {
@Override
public void run() {
RecognitionParam param = RecognitionParam.builder()
.model("fun-asr-realtime")
// シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
// 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: .apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.format("wav")
.sampleRate(16000)
.build();
Recognition recognizer = new Recognition();
ResultCallback<RecognitionResult> callback = new ResultCallback<RecognitionResult>() {
@Override
public void onEvent(RecognitionResult result) {
if (result.isSentenceEnd()) {
System.out.println("Final Result: " + result.getSentence().getText());
} else {
System.out.println("Intermediate Result: " + result.getSentence().getText());
}
}
@Override
public void onComplete() {
System.out.println("Recognition complete");
}
@Override
public void onError(Exception e) {
System.out.println("RecognitionCallback error: " + e.getMessage());
}
};
try {
recognizer.call(param, callback);
// 音声フォーマットを作成します。
AudioFormat audioFormat = new AudioFormat(16000, 16, 1, true, false);
// フォーマットに基づいてデフォルトの録音デバイスを照合します。
TargetDataLine targetDataLine =
AudioSystem.getTargetDataLine(audioFormat);
targetDataLine.open(audioFormat);
// 録音を開始します。
targetDataLine.start();
ByteBuffer buffer = ByteBuffer.allocate(1024);
long start = System.currentTimeMillis();
// 50 秒間録音し、リアルタイムで文字起こしを行います。
while (System.currentTimeMillis() - start < 50000) {
int read = targetDataLine.read(buffer.array(), 0, buffer.capacity());
if (read > 0) {
buffer.limit(read);
// 録音された音声データをストリーミング認識サービスに送信します。
recognizer.sendAudioFrame(buffer);
buffer = ByteBuffer.allocate(1024);
// 録音レートは制限されています。高い CPU 使用率を防ぐために短時間スリープします。
Thread.sleep(20);
}
}
recognizer.stop();
} catch (Exception e) {
e.printStackTrace();
} finally {
// タスク完了後、WebSocket 接続を閉じます。
recognizer.getDuplexApi().close(1000, "bye");
}
System.out.println(
"[Metric] requestId: "
+ recognizer.getLastRequestId()
+ ", first package delay ms: "
+ recognizer.getFirstPackageDelay()
+ ", last package delay ms: "
+ recognizer.getLastPackageDelay());
}
}Python
Python の例を実行する前に、pip install pyaudio コマンドを実行して、サードパーティの音声再生およびキャプチャスイートをインストールしてください。
import os
import signal # キーボードイベント処理用 (「Ctrl+C」を押して録音を終了)
import sys
import dashscope
import pyaudio
from dashscope.audio.asr import *
mic = None
stream = None
# 録音パラメーターを設定
sample_rate = 16000 # サンプリングレート (Hz)
channels = 1 # モノラルチャンネル
dtype = 'int16' # データの型
format_pcm = 'pcm' # 音声データのフォーマット
block_size = 3200 # バッファーごとのフレーム数
# リアルタイム音声認識コールバック
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.') # 認識完了
def on_error(self, message) -> None:
print('RecognitionCallback task_id: ', message.request_id)
print('RecognitionCallback error: ', message.message)
# 音声ストリームが実行中の場合は停止して閉じる
if 'stream' in globals() and stream.active:
stream.stop()
stream.close()
# プログラムを強制終了
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 pressed, stop recognition ...')
# 認識を停止
recognition.stop()
print('Recognition stopped.')
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(),
))
# プログラムを強制終了
sys.exit(0)
# main 関数
if __name__ == '__main__':
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
# 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: dashscope.api_key = "sk-xxx"
dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')
# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を wss://dashscope.aliyuncs.com/api-ws/v1/inference に置き換えてください
dashscope.base_websocket_api_url='wss://dashscope-intl.aliyuncs.com/api-ws/v1/inference'
# 認識コールバックを作成
callback = Callback()
# 非同期モードで認識サービスを呼び出します。モデル、フォーマット、サンプルレートなどの認識パラメーターをカスタマイズできます
# sample_rate
recognition = Recognition(
model='fun-asr-realtime',
format=format_pcm,
# 'pcm'、'wav'、'opus'、'speex'、'aac'、'amr'。サポートされているフォーマットはドキュメントで確認できます。
sample_rate=sample_rate,
# 8000、16000 をサポートします。
semantic_punctuation_enabled=False,
callback=callback)
# 認識を開始
recognition.start()
signal.signal(signal.SIGINT, signal_handler)
print("Press 'Ctrl+C' to stop recording and recognition...")
# 「Ctrl+C」が押されるまでキーボードリスナーを作成
while True:
if stream:
data = stream.read(3200, exception_on_overflow=False)
recognition.send_audio_frame(data)
else:
break
recognition.stop()ローカル音声ファイルの認識
リアルタイム音声認識は、ローカル音声ファイルを認識し、結果を返します。この API は、チャットの会話、音声コマンド、音声入力メソッド、音声検索など、短時間でほぼリアルタイムの音声認識シナリオに適しています。
Java
この例で使用されている音声ファイルは asr_example.wav です。
import com.alibaba.dashscope.audio.asr.recognition.Recognition;
import com.alibaba.dashscope.audio.asr.recognition.RecognitionParam;
import com.alibaba.dashscope.audio.asr.recognition.RecognitionResult;
import com.alibaba.dashscope.common.ResultCallback;
import com.alibaba.dashscope.utils.Constants;
import java.io.FileInputStream;
import java.nio.ByteBuffer;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
class TimeUtils {
private static final DateTimeFormatter formatter =
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
public static String getTimestamp() {
return LocalDateTime.now().format(formatter);
}
}
public class Main {
public static void main(String[] args) throws InterruptedException {
// 以下の URL はシンガポールリージョン用です。北京リージョンのモデルを使用する場合は、URL を wss://dashscope.aliyuncs.com/api-ws/v1/inference に置き換えてください。
Constants.baseWebsocketApiUrl = "wss://dashscope-intl.aliyuncs.com/api-ws/v1/inference";
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.submit(new RealtimeRecognitionTask(Paths.get(System.getProperty("user.dir"), "asr_example.wav")));
executorService.shutdown();
// すべてのタスクが完了するのを待つ
executorService.awaitTermination(1, TimeUnit.MINUTES);
System.exit(0);
}
}
class RealtimeRecognitionTask implements Runnable {
private Path filepath;
public RealtimeRecognitionTask(Path filepath) {
this.filepath = filepath;
}
@Override
public void run() {
RecognitionParam param = RecognitionParam.builder()
.model("fun-asr-realtime")
// シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
// 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: .apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.format("wav")
.sampleRate(16000)
.build();
Recognition recognizer = new Recognition();
String threadName = Thread.currentThread().getName();
ResultCallback<RecognitionResult> callback = new ResultCallback<RecognitionResult>() {
@Override
public void onEvent(RecognitionResult message) {
if (message.isSentenceEnd()) {
System.out.println(TimeUtils.getTimestamp()+" "+
"[process " + threadName + "] Final Result:" + message.getSentence().getText());
} else {
System.out.println(TimeUtils.getTimestamp()+" "+
"[process " + threadName + "] Intermediate Result: " + message.getSentence().getText());
}
}
@Override
public void onComplete() {
System.out.println(TimeUtils.getTimestamp()+" "+"[" + threadName + "] Recognition complete");
}
@Override
public void onError(Exception e) {
System.out.println(TimeUtils.getTimestamp()+" "+
"[" + threadName + "] RecognitionCallback error: " + e.getMessage());
}
};
try {
recognizer.call(param, callback);
// パスを音声ファイルのパスに置き換えてください
System.out.println(TimeUtils.getTimestamp()+" "+"[" + threadName + "] Input file_path is: " + this.filepath);
// ファイルを読み込み、チャンクで音声を送信
FileInputStream fis = new FileInputStream(this.filepath.toFile());
// チャンクサイズを 16 kHz サンプルレートで 1 秒に設定
byte[] buffer = new byte[3200];
int bytesRead;
// ファイルのチャンクを読み込むループ
while ((bytesRead = fis.read(buffer)) != -1) {
ByteBuffer byteBuffer;
// バッファーサイズより小さい可能性のある最後のチャンクを処理
System.out.println(TimeUtils.getTimestamp()+" "+"[" + threadName + "] bytesRead: " + bytesRead);
if (bytesRead < buffer.length) {
byteBuffer = ByteBuffer.wrap(buffer, 0, bytesRead);
} else {
byteBuffer = ByteBuffer.wrap(buffer);
}
recognizer.sendAudioFrame(byteBuffer);
buffer = new byte[3200];
Thread.sleep(100);
}
System.out.println(TimeUtils.getTimestamp()+" "+LocalDateTime.now());
recognizer.stop();
} catch (Exception e) {
e.printStackTrace();
} finally {
// タスク完了後、WebSocket 接続を閉じます。
recognizer.getDuplexApi().close(1000, "bye");
}
System.out.println(
"["
+ threadName
+ "][Metric] requestId: "
+ recognizer.getLastRequestId()
+ ", first package delay ms: "
+ recognizer.getFirstPackageDelay()
+ ", last package delay ms: "
+ recognizer.getLastPackageDelay());
}
}Python
この例で使用されている音声ファイルは asr_example.wav です。
import os
import time
import dashscope
from dashscope.audio.asr import *
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
# 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: dashscope.api_key = "sk-xxx"
dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')
# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を wss://dashscope.aliyuncs.com/api-ws/v1/inference に置き換えてください
dashscope.base_websocket_api_url='wss://dashscope-intl.aliyuncs.com/api-ws/v1/inference'
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') # 認識完了
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='fun-asr-realtime',
format='wav',
sample_rate=16000,
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(
'The supplied file was empty (zero bytes long)')
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(),
))Paraformer
マイクからの音声認識
リアルタイム音声認識は、マイクからの入力音声を検出し、文字起こし結果を出力します。これにより、話すと同時にテキストが表示されるようになります。
Java
import com.alibaba.dashscope.audio.asr.recognition.Recognition;
import com.alibaba.dashscope.audio.asr.recognition.RecognitionParam;
import com.alibaba.dashscope.exception.NoApiKeyException;
import io.reactivex.BackpressureStrategy;
import io.reactivex.Flowable;
import java.nio.ByteBuffer;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.TargetDataLine;
public class Main {
public static void main(String[] args) throws NoApiKeyException {
// Flowable<ByteBuffer> を作成
Flowable<ByteBuffer> audioSource = Flowable.create(emitter -> {
new Thread(() -> {
try {
// 音声フォーマットを作成
AudioFormat audioFormat = new AudioFormat(16000, 16, 1, true, false);
// フォーマットに基づいてデフォルトの録音デバイスを照合
TargetDataLine targetDataLine =
AudioSystem.getTargetDataLine(audioFormat);
targetDataLine.open(audioFormat);
// 録音を開始
targetDataLine.start();
ByteBuffer buffer = ByteBuffer.allocate(1024);
long start = System.currentTimeMillis();
// 300 秒間録音し、リアルタイムで文字起こしを実行
while (System.currentTimeMillis() - start < 300000) {
int read = targetDataLine.read(buffer.array(), 0, buffer.capacity());
if (read > 0) {
buffer.limit(read);
// 録音された音声データをストリーミング認識サービスに送信
emitter.onNext(buffer);
buffer = ByteBuffer.allocate(1024);
// 録音速度が制限されているため、CPU 使用率を制限するために短時間スリープ
Thread.sleep(20);
}
}
// 文字起こしの終了を通知
emitter.onComplete();
} catch (Exception e) {
emitter.onError(e);
}
}).start();
},
BackpressureStrategy.BUFFER);
// 認識器を作成
Recognition recognizer = new Recognition();
// RecognitionParam を作成し、上記で作成した Flowable<ByteBuffer> を audioFrames に渡す
RecognitionParam param = RecognitionParam.builder()
.model("paraformer-realtime-v2")
.format("pcm")
.sampleRate(16000)
// API キーを環境変数として設定していない場合は、以下の行のコメントを解除し、「apikey」を実際の API キーに置き換えてください
// .apiKey("apikey")
.build();
// ストリーミング API を呼び出す
recognizer.streamCall(param, audioSource)
// Flowable の subscribe メソッドを使用して結果をサブスクライブする
.blockingForEach(
result -> {
// 最終結果を出力
if (result.isSentenceEnd()) {
System.out.println("Fix:" + result.getSentence().getText());
} else {
System.out.println("Result:" + result.getSentence().getText());
}
});
System.exit(0);
}
}Python
Python の例を実行する前に、pip install pyaudio コマンドを実行して、サードパーティの音声再生およびキャプチャスイートをインストールしてください。
import pyaudio
from dashscope.audio.asr import (Recognition, RecognitionCallback,
RecognitionResult)
# API キーを環境変数として設定していない場合は、以下の行のコメントを解除し、「apiKey」を実際の API キーに置き換えてください
# import dashscope
# dashscope.api_key = "apiKey"
mic = None
stream = None
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_event(self, result: RecognitionResult) -> None:
print('RecognitionCallback sentence: ', result.get_sentence())
callback = Callback()
recognition = Recognition(model='paraformer-realtime-v2',
format='pcm',
sample_rate=16000,
callback=callback)
recognition.start()
while True:
if stream:
data = stream.read(3200, exception_on_overflow=False)
recognition.send_audio_frame(data)
else:
break
recognition.stop()ローカル音声ファイルの認識
リアルタイム音声認識は、ローカルファイルから音声を文字起こしできます。この方法は、チャットの会話、音声コマンド、音声入力メソッド、音声検索など、短い音声セグメントを含むほぼリアルタイムのシナリオに適しています。
Java
import com.alibaba.dashscope.audio.asr.recognition.Recognition;
import com.alibaba.dashscope.audio.asr.recognition.RecognitionParam;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
public class Main {
public static void main(String[] args) {
// URL ダウンロードセクションをスキップして、直接ローカルファイルを使用して認識できます
String exampleWavUrl =
"https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav";
try {
InputStream in = new URL(exampleWavUrl).openStream();
Files.copy(in, Paths.get("asr_example.wav"), StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
System.out.println("error: " + e);
System.exit(1);
}
// Recognition インスタンスを作成
Recognition recognizer = new Recognition();
// RecognitionParam を作成
RecognitionParam param =
RecognitionParam.builder()
// API キーを環境変数として設定していない場合は、以下の行のコメントを解除し、「apikey」を実際の API キーに置き換えてください
// .apiKey("apikey")
.model("paraformer-realtime-v2")
.format("wav")
.sampleRate(16000)
// "language_hints" は paraformer-v2 および paraformer-realtime-v2 モデルでのみサポートされています
.parameter("language_hints", new String[]{"zh", "en"})
.build();
try {
System.out.println("Recognition result: " + recognizer.call(param, new File("asr_example.wav")));
} catch (Exception e) {
e.printStackTrace();
}
System.exit(0);
}
}Python
import requests
from http import HTTPStatus
from dashscope.audio.asr import Recognition
# API キーを環境変数として設定していない場合は、以下の行のコメントを解除し、「apiKey」を実際の API キーに置き換えてください
# import dashscope
# dashscope.api_key = "apiKey"
# URL からファイルをダウンロードするのをスキップして、直接ローカルファイルを使用して認識できます
r = requests.get(
'https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav'
)
with open('asr_example.wav', 'wb') as f:
f.write(r.content)
recognition = Recognition(model='paraformer-realtime-v2',
format='wav',
sample_rate=16000,
# "language_hints" は paraformer-v2 および paraformer-realtime-v2 モデルでのみサポートされています
language_hints=['zh', 'en'],
callback=None)
result = recognition.call('asr_example.wav')
if result.status_code == HTTPStatus.OK:
print('Recognition result:')
print(result.get_sentence())
else:
print('Error: ', result.message)公開
認識精度の向上
正しいサンプルレートモデルの使用:8 kHz の電話音声には、8 kHz モデルを直接使用してください。認識前に 16 kHz にアップサンプリングしないでください。これにより、信号のエイリアシングを回避し、より良い結果が得られます。
ホットワード検出の使用:ドメイン固有の用語、名前、ブランド名にホットワードを設定することで、認識精度を大幅に向上させることができます。詳細については、「カスタムホットワード – Paraformer/Fun-ASR」をご参照ください。
入力音声品質の最適化:高品質のマイクを使用し、S/N 比が高くエコーのない静かな環境で録音してください。アプリケーション層では、ノイズ除去 (例:RNNoise) やアコースティックエコーキャンセレーション (AEC) などの前処理アルゴリズムを統合して、よりクリーンな音声を生成できます。
認識言語の明示的な指定:Paraformer-v2 などの多言語モデルでは、Language_hints パラメーターを使用して音声の言語を事前に指定します (例:['zh','en'] に設定)。これにより、モデルがより速く収束し、似たような発音の単語を持つ言語間の混同を避けることができます。また、精度も向上します。
フィラーワードのフィルタリング:Paraformer モデルでは、disfluency_removal_enabled パラメーターを設定することでフィラーワードのフィルタリングを有効にできます。これにより、よりフォーマルで読みやすいテキスト出力が生成されます。
フォールトトレランスポリシーの設定
クライアント側の再接続:ネットワークジッターに対処するために、クライアント側で自動再接続を実装します。例えば、Python SDK の場合は、以下の手順に従います:
例外のキャッチ:
Callbackクラスで、on_errorメソッドを実装します。dashscopeSDK は、ネットワークエラーやその他の問題が発生したときにこのメソッドを呼び出します。ステータス通知の送信:
on_errorがトリガーされたときに、再接続フラグを設定します。Python では、スレッドセーフなフラグであるthreading.Eventを使用できます。再接続ループの実行:メインロジックを
forループでラップします (例:最大 3 回のリトライ)。再接続フラグが検出されたら、現在の認識を停止し、リソースをクリーンアップし、数秒待ってからループを再開して新しい接続を作成します。
ハートビートを送信して切断を防止:サーバーとの持続的接続を維持するために、heartbeat パラメーターを
trueに設定します。これにより、音声ストリームに長い無音期間があっても接続が維持されます。モデルのレート制限:API を呼び出す際は、モデルのレート制限ルールに従ってください。
API リファレンス
モデル機能の比較
機能 | Fun-ASR | Paraformer |
サポート言語 | モデルにより異なる:
| モデルにより異なる:
|
サポートされている音声フォーマット | pcm、wav、mp3、opus、speex、aac、amr | |
サンプルレート | モデルにより異なる:
| モデルにより異なる:
|
音声チャンネル | モノラル | |
入力フォーマット | バイナリ音声ストリーム | |
音声サイズまたは時間 | 無制限 | 無制限 |
感情検出 | モデルにより異なる:
| |
不適切表現フィルター | ||
話者分離 | ||
フィラーワードフィルタリング | デフォルトで無効。有効化可能。 | デフォルトで無効。有効化可能。 |
タイムスタンプ | 常時有効。 | |
句読点予測 | 常時有効。 | モデルにより異なる:
|
ホットワード | モデルにより異なる:
| |
ITN | 常時有効 | |
VAD | 常時有効。 | |
レート制限 (RPS) | 20 | 20 |
接続タイプ | Java/Python/Android/iOS SDK、WebSocket API | |
料金 | モデルにより異なる:
| 中国本土:0.000012 USD/秒 |