ailia_speech  1.3.0.0
APIの使用方法

ailia SpeechのAPIの概要

基本的な使用方法

ailia Speechでは、ailiaSpeechCreateでインスタンスを作成、ailiaSpeechOpenModelFileでモデルを開き、ailiaSpeechPushInputDataでPCMを入力、ailiaSpeechBufferedで十分なPCMが入力されたか確認、ailiaSpeechTranscribeでテキスト化、ailiaSpeechGetTextで認識結果を取得可能です。

ailiaSpeechPushInputDataは音声全体を入力する必要はなく、少しずつ音声を供給することが可能であり、マイクからのリアルタイム入力を受けることができます。

#include "ailia.h"
#include "ailia_audio.h"
#include "ailia_speech.h"
#include "ailia_speech_util.h"
void main(void){
// インスタンス作成
struct AILIASpeech* net;
AILIASpeechApiCallback callback = ailiaSpeechUtilGetCallback();
int memory_mode = AILIA_MEMORY_REDUCE_CONSTANT | AILIA_MEMORY_REDUCE_CONSTANT_WITH_INPUT_INITIALIZER | AILIA_MEMORY_REUSE_INTERSTAGE;
ailiaSpeechCreate(&net, AILIA_ENVIRONMENT_ID_AUTO, AILIA_MULTITHREAD_AUTO, memory_mode, AILIA_SPEECH_TASK_TRANSCRIBE, AILIA_SPEECH_FLAG_NONE, callback, AILIA_SPEECH_API_CALLBACK_VERSION);
// モデルファイル読み込み
ailiaSpeechOpenModelFileA(net, "encoder_small.onnx", "decoder_small_fix_kv_cache.onnx", AILIA_SPEECH_MODEL_TYPE_WHISPER_MULTILINGUAL_SMALL);
// 言語設定
// PCMをまとめて供給
ailiaSpeechPushInputData(net, pPcm, nChannels, nSamples, sampleRate);
// テキスト化
while(true){
// テキスト化するための十分なPCMが供給されたか
unsigned int buffered = 0;
ailiaSpeechBuffered(net, &buffered);
if (buffered == 1){
// テキスト化の実行
// 取得できたテキストの数を取得
unsigned int count = 0;
// テキストの取得
for (unsigned int idx = 0; idx < count; idx++){
float cur_time = text.time_stamp_begin;
float next_time = text.time_stamp_end;
printf("[%02d:%02d.%03d --> %02d:%02d.%03d] ", (int)cur_time/60%60,(int)cur_time%60, (int)(cur_time*1000)%1000, (int)next_time/60%60,(int)next_time%60, (int)(next_time*1000)%1000);
printf("%s\n", text.text);
}
}
// 全てのPCMの処理が終わったかどうか
unsigned int complete = 0;
ailiaSpeechComplete(net, &complete);
if (complete == 1){
break;
}
}
// インスタンス解放
}

ライブ変換

ライブ変換を有効にするには、ailiaSpeechCreateの引数にAILIA_SPEECH_FLAG_LIVEを与えます。

ailiaSpeechCreate(&net, AILIA_ENVIRONMENT_ID_AUTO, AILIA_MULTITHREAD_AUTO, memory_mode, AILIA_SPEECH_TASK_TRANSCRIBE, AILIA_SPEECH_FLAG_LIVE, callback, AILIA_SPEECH_API_CALLBACK_VERSION);

プレビューは、IntermediateCallbackに通知されます。

int intermediate_callback(void *handle, const char *text){
printf("%s\n", text);
return 0; // 1で中断
}
ailiaSpeechSetIntermediateCallback(net, &intermediate_callback, NULL);

VAD

無音検知を使用する場合、ailiaSpeechCreate APIの後にailiaSpeechOpenVAD APIを呼び出します。

ポストプロセス

音声認識結果に対して、音声認識誤り訂正や、翻訳などの後処理を適用する場合、ailiaSpeechCreate APIの後にailiaSpeechOpenPostProcessFile APIを呼び出し、ailiaSpeechTranscribeの後に、ailiaSpeechPostProcess APIを呼び出します。

音声認識誤り訂正を使用する場合

ailiaSpeechOpenPostProcessFileA(net, "t5_whisper_medical-encoder.obf.onnx", "t5_whisper_medical-decoder-with-lm-head.obf.onnx", "spiece.model", NULL, "医療用語の訂正: ", AILIA_SPEECH_POST_PROCESS_TYPE_T5);

翻訳を使用する場合

英語から日本語

ailiaSpeechOpenPostProcessFileA(net, "fugumt_en_ja_seq2seq-lm-with-past.onnx", NULL, "fugumt_en_ja_source.spm", "fugumt_en_ja_target.spm", NULL, AILIA_SPEECH_POST_PROCESS_TYPE_FUGUMT_EN_JA);

日本語から英語

ailiaSpeechOpenPostProcessFileA(net, "fugumt_ja_en_encoder_model.onnx", "fugumt_ja_en_decoder_model.onnx", "fugumt_ja_en_source.spm", "fugumt_ja_en_target.spm", NULL, AILIA_SPEECH_POST_PROCESS_TYPE_FUGUMT_JA_EN);

共通処理

GPUの使用

GPUを使用するには、ailiaSpeechCreateのenv_id引数にGPUのenv_idを指定します。 デフォルトでは、AILIA_ENVIRONMENT_ID_AUTOが指定されており、CPUで推論が行われます。 GPUのenv_idを取得する方法は、ailia_speech_sample.cppを参照してください。

APIの呼び出しフロー

各APIの関係図は下記となります。

音声認識

flowchart A(Microphone or File)-->B B[ailiaSpeechPushInputData API]-->C C[ailiaSpeechBuffered API]-->D C-->B D[ailiaSpeechTranscribe API]-->E E[ailiaSpeechGetTextCount API]-->F F[ailiaSpeechGetText API]-->K K[ailiaSpeechComplete API] --> B

音声認識(ポストプロセス付き)

flowchart A(Microphone or File)-->B B[ailiaSpeechPushInputData API]-->C C[ailiaSpeechBuffered API]-->D C-->B D[ailiaSpeechTranscribe API]-->E E[ailiaSpeechGetTextCount API]-->F F[ailiaSpeechGetText API]-->K F-->G G[ailiaSpeechPostProcess API]-->H H[ailiaSpeechGetTextCount API]-->I I[ailiaSpeechGetText API]-->K K[ailiaSpeechComplete API] --> B

ポストプロセスのみ

flowchart F[ailiaSpeechSetText API]-->G G[ailiaSpeechPostProcess API]-->I I[ailiaSpeechGetText API]

ailiaSpeechDestroy
void AILIA_API ailiaSpeechDestroy(struct AILIASpeech *net)
ネットワークオブジェクトを破棄します。
ailiaSpeechPushInputData
int AILIA_API ailiaSpeechPushInputData(struct AILIASpeech *net, const float *src, unsigned int channels, unsigned int samples, unsigned int sampling_rate)
音声をキューに投入します。
AILIA_SPEECH_POST_PROCESS_TYPE_FUGUMT_JA_EN
#define AILIA_SPEECH_POST_PROCESS_TYPE_FUGUMT_JA_EN
FuguMT JA EN
Definition: ailia_speech.h:251
AILIA_SPEECH_TEXT_VERSION
#define AILIA_SPEECH_TEXT_VERSION
構造体バージョン
Definition: ailia_speech.h:387
_AILIASpeechText::text
const char * text
Definition: ailia_speech.h:390
ailiaSpeechComplete
int AILIA_API ailiaSpeechComplete(struct AILIASpeech *net, unsigned int *complete)
全てのデータの処理が完了したかどうかを判定します。
ailiaSpeechPostProcess
int AILIA_API ailiaSpeechPostProcess(struct AILIASpeech *net)
後処理を行います。
_AILIASpeechApiCallback
Definition: ailia_speech.h:316
ailiaSpeechSetLanguage
int AILIA_API ailiaSpeechSetLanguage(struct AILIASpeech *net, const char *language)
言語設定を行います。
ailiaSpeechOpenModelFileA
int AILIA_API ailiaSpeechOpenModelFileA(struct AILIASpeech *net, const char *encoder_path, const char *decoder_path, int model_type)
モデルを指定します。(MBSC)
_AILIASpeechText::time_stamp_begin
float time_stamp_begin
Definition: ailia_speech.h:391
AILIA_SPEECH_API_CALLBACK_VERSION
#define AILIA_SPEECH_API_CALLBACK_VERSION
構造体バージョン
Definition: ailia_speech.h:313
ailiaSpeechCreate
int AILIA_API ailiaSpeechCreate(struct AILIASpeech **net, int env_id, int num_thread, int memory_mode, int task, int flags, AILIASpeechApiCallback callback, int version)
ネットワークオブジェクトを作成します。
AILIA_SPEECH_VAD_TYPE_SILERO
#define AILIA_SPEECH_VAD_TYPE_SILERO
SileroVAD
Definition: ailia_speech.h:191
ailiaSpeechSetIntermediateCallback
int AILIA_API ailiaSpeechSetIntermediateCallback(struct AILIASpeech *net, AILIA_SPEECH_USER_API_INTERMEDIATE_CALLBACK callback, void *handle)
認識の途中結果を取得するコールバックを設定します。
AILIA_SPEECH_POST_PROCESS_TYPE_T5
#define AILIA_SPEECH_POST_PROCESS_TYPE_T5
T5
Definition: ailia_speech.h:221
AILIA_SPEECH_FLAG_LIVE
#define AILIA_SPEECH_FLAG_LIVE
ライブ変換モードを有効にします
Definition: ailia_speech.h:176
ailiaSpeechTranscribe
int AILIA_API ailiaSpeechTranscribe(struct AILIASpeech *net)
音声認識を行います。
AILIA_SPEECH_FLAG_NONE
#define AILIA_SPEECH_FLAG_NONE
フラグを設定しません
Definition: ailia_speech.h:165
ailiaSpeechBuffered
int AILIA_API ailiaSpeechBuffered(struct AILIASpeech *net, unsigned int *buffered)
音声認識を行うために十分なデータが存在するかどうかを判定します。
_AILIASpeechText
Definition: ailia_speech.h:389
AILIA_SPEECH_TASK_TRANSCRIBE
#define AILIA_SPEECH_TASK_TRANSCRIBE
音声のテキスト化を行います
Definition: ailia_speech.h:113
ailia_speech.h
ailia Speech AI音声認識 ライブラリ
ailiaSpeechGetTextCount
int AILIA_API ailiaSpeechGetTextCount(struct AILIASpeech *net, unsigned int *count)
認識したテキストの数を取得します。
AILIA_SPEECH_MODEL_TYPE_WHISPER_MULTILINGUAL_SMALL
#define AILIA_SPEECH_MODEL_TYPE_WHISPER_MULTILINGUAL_SMALL
Whisper Small model
Definition: ailia_speech.h:65
AILIA_SPEECH_POST_PROCESS_TYPE_FUGUMT_EN_JA
#define AILIA_SPEECH_POST_PROCESS_TYPE_FUGUMT_EN_JA
FuguMT EN JA
Definition: ailia_speech.h:236
ailiaSpeechOpenVadFileA
int AILIA_API ailiaSpeechOpenVadFileA(struct AILIASpeech *net, const char *vad_path, int vad_type)
無音検知に適用するVADモデルを指定します。(MBSC)
ailiaSpeechGetText
int AILIA_API ailiaSpeechGetText(struct AILIASpeech *net, AILIASpeechText *text, unsigned int version, unsigned int idx)
認識したテキストを取得します。
ailiaSpeechOpenPostProcessFileA
int AILIA_API ailiaSpeechOpenPostProcessFileA(struct AILIASpeech *net, const char *encoder_path, const char *decoder_path, const char *source_path, const char *target_path, const char *prefix, int post_process_type)
後処理知に適用するAIモデルを指定します。(MBSC)
_AILIASpeechText::time_stamp_end
float time_stamp_end
Definition: ailia_speech.h:392