diff --git a/.github/workflows/test-go.yaml b/.github/workflows/test-go.yaml index 569ba578..ffffa9d9 100644 --- a/.github/workflows/test-go.yaml +++ b/.github/workflows/test-go.yaml @@ -160,6 +160,10 @@ jobs: go build ls -lh + echo "Test FireRedAsr" + ./run-fire-red-asr.sh + rm -rf sherpa-onnx-fire-red-asr-* + echo "Test Moonshine" ./run-moonshine.sh rm -rf sherpa-onnx-* diff --git a/go-api-examples/non-streaming-decode-files/main.go b/go-api-examples/non-streaming-decode-files/main.go index 92b23dc1..ccfbbb80 100644 --- a/go-api-examples/non-streaming-decode-files/main.go +++ b/go-api-examples/non-streaming-decode-files/main.go @@ -28,6 +28,9 @@ func main() { flag.StringVar(&config.ModelConfig.NemoCTC.Model, "nemo-ctc", "", "Path to the NeMo CTC model") + flag.StringVar(&config.ModelConfig.FireRedAsr.Encoder, "fire-red-asr-encoder", "", "Path to the FireRedAsr encoder model") + flag.StringVar(&config.ModelConfig.FireRedAsr.Decoder, "fire-red-asr-decoder", "", "Path to the FireRedAsr decoder model") + flag.StringVar(&config.ModelConfig.Whisper.Encoder, "whisper-encoder", "", "Path to the whisper encoder model") flag.StringVar(&config.ModelConfig.Whisper.Decoder, "whisper-decoder", "", "Path to the whisper decoder model") flag.StringVar(&config.ModelConfig.Whisper.Language, "whisper-language", "", "Language of the input wave. You can leave it empty ") diff --git a/go-api-examples/non-streaming-decode-files/run-fire-red-asr.sh b/go-api-examples/non-streaming-decode-files/run-fire-red-asr.sh new file mode 100755 index 00000000..4c827f10 --- /dev/null +++ b/go-api-examples/non-streaming-decode-files/run-fire-red-asr.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +set -ex + +if [ ! -f ./sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16/encoder.int8.onnx ]; then + curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16.tar.bz2 + tar xvf sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16.tar.bz2 + rm sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16.tar.bz2 + ls -lh sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16 +fi + +go mod tidy +go build + +./non-streaming-decode-files \ + --fire-red-asr-encoder=./sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16/encoder.int8.onnx \ + --fire-red-asr-decoder=./sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16/decoder.int8.onnx \ + --tokens=./sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16/tokens.txt \ + ./sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16/test_wavs/0.wav + diff --git a/scripts/go/_internal/non-streaming-decode-files/run-fire-red-asr.sh b/scripts/go/_internal/non-streaming-decode-files/run-fire-red-asr.sh new file mode 120000 index 00000000..608187d9 --- /dev/null +++ b/scripts/go/_internal/non-streaming-decode-files/run-fire-red-asr.sh @@ -0,0 +1 @@ +../../../../go-api-examples/non-streaming-decode-files/run-fire-red-asr.sh \ No newline at end of file diff --git a/scripts/go/sherpa_onnx.go b/scripts/go/sherpa_onnx.go index c15358c7..a392e079 100644 --- a/scripts/go/sherpa_onnx.go +++ b/scripts/go/sherpa_onnx.go @@ -385,6 +385,11 @@ type OfflineWhisperModelConfig struct { TailPaddings int } +type OfflineFireRedAsrModelConfig struct { + Encoder string + Decoder string +} + type OfflineMoonshineModelConfig struct { Preprocessor string Encoder string @@ -416,6 +421,7 @@ type OfflineModelConfig struct { Tdnn OfflineTdnnModelConfig SenseVoice OfflineSenseVoiceModelConfig Moonshine OfflineMoonshineModelConfig + FireRedAsr OfflineFireRedAsrModelConfig Tokens string // Path to tokens.txt // Number of threads to use for neural network computation @@ -538,6 +544,12 @@ func NewOfflineRecognizer(config *OfflineRecognizerConfig) *OfflineRecognizer { c.model_config.moonshine.cached_decoder = C.CString(config.ModelConfig.Moonshine.CachedDecoder) defer C.free(unsafe.Pointer(c.model_config.moonshine.cached_decoder)) + c.model_config.fire_red_asr.encoder = C.CString(config.ModelConfig.FireRedAsr.Encoder) + defer C.free(unsafe.Pointer(c.model_config.fire_red_asr.encoder)) + + c.model_config.fire_red_asr.decoder = C.CString(config.ModelConfig.FireRedAsr.Decoder) + defer C.free(unsafe.Pointer(c.model_config.fire_red_asr.decoder)) + c.model_config.tokens = C.CString(config.ModelConfig.Tokens) defer C.free(unsafe.Pointer(c.model_config.tokens))