Refactor Java API (#806)
This commit is contained in:
1
java-api-examples/.gitignore
vendored
1
java-api-examples/.gitignore
vendored
@@ -1,2 +1,3 @@
|
||||
lib
|
||||
hs_err*
|
||||
!run-streaming*.sh
|
||||
|
||||
@@ -1,101 +0,0 @@
|
||||
ENTRY_POINT = ./
|
||||
|
||||
LIB_SRC_DIR := ../sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx
|
||||
|
||||
LIB_FILES = \
|
||||
$(LIB_SRC_DIR)/EndpointRule.java \
|
||||
$(LIB_SRC_DIR)/EndpointConfig.java \
|
||||
$(LIB_SRC_DIR)/FeatureConfig.java \
|
||||
$(LIB_SRC_DIR)/OnlineLMConfig.java \
|
||||
$(LIB_SRC_DIR)/OnlineTransducerModelConfig.java \
|
||||
$(LIB_SRC_DIR)/OnlineParaformerModelConfig.java \
|
||||
$(LIB_SRC_DIR)/OnlineZipformer2CtcModelConfig.java \
|
||||
$(LIB_SRC_DIR)/OnlineModelConfig.java \
|
||||
$(LIB_SRC_DIR)/OnlineRecognizerConfig.java \
|
||||
$(LIB_SRC_DIR)/OnlineStream.java \
|
||||
$(LIB_SRC_DIR)/OnlineRecognizer.java
|
||||
|
||||
WEBSOCKET_DIR:= ./src/websocketsrv
|
||||
WEBSOCKET_FILES = \
|
||||
$(WEBSOCKET_DIR)/ConnectionData.java \
|
||||
$(WEBSOCKET_DIR)/DecoderThreadHandler.java \
|
||||
$(WEBSOCKET_DIR)/StreamThreadHandler.java \
|
||||
$(WEBSOCKET_DIR)/AsrWebsocketServer.java \
|
||||
$(WEBSOCKET_DIR)/AsrWebsocketClient.java \
|
||||
|
||||
|
||||
LIB_BUILD_DIR = ./lib
|
||||
|
||||
|
||||
EXAMPLE_FILE = DecodeFile.java
|
||||
|
||||
EXAMPLE_Mic = DecodeMic.java
|
||||
|
||||
JAVAC = javac
|
||||
|
||||
BUILD_DIR = build
|
||||
|
||||
|
||||
RUNJFLAGS = -Dfile.encoding=utf-8
|
||||
|
||||
vpath %.class $(BUILD_DIR)
|
||||
vpath %.java src
|
||||
|
||||
|
||||
buildfile:
|
||||
$(JAVAC) -cp lib/sherpaonnx.jar -d $(BUILD_DIR) -encoding UTF-8 src/$(EXAMPLE_FILE)
|
||||
|
||||
buildmic:
|
||||
$(JAVAC) -cp lib/sherpaonnx.jar -d $(BUILD_DIR) -encoding UTF-8 src/$(EXAMPLE_Mic)
|
||||
|
||||
rebuild: clean all
|
||||
|
||||
.PHONY: clean run downjar
|
||||
|
||||
downjar:
|
||||
wget https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar -P ./lib/
|
||||
wget https://repo1.maven.org/maven2/org/slf4j/slf4j-simple/1.7.25/slf4j-simple-1.7.25.jar -P ./lib/
|
||||
wget https://github.com/TooTallNate/Java-WebSocket/releases/download/v1.5.3/Java-WebSocket-1.5.3.jar -P ./lib/
|
||||
|
||||
|
||||
clean:
|
||||
rm -frv $(BUILD_DIR)/*
|
||||
rm -frv $(LIB_BUILD_DIR)/*
|
||||
mkdir -p $(BUILD_DIR)
|
||||
mkdir -p ./lib
|
||||
|
||||
runfile: packjar buildfile
|
||||
java -cp ./lib/sherpaonnx.jar:build $(RUNJFLAGS) DecodeFile test.wav
|
||||
|
||||
runhotwords:
|
||||
java -cp ./lib/sherpaonnx.jar:build $(RUNJFLAGS) DecodeFile hotwords.wav
|
||||
|
||||
runmic:
|
||||
java -cp ./lib/sherpaonnx.jar:build $(RUNJFLAGS) DecodeMic
|
||||
|
||||
runsrv:
|
||||
java -cp $(BUILD_DIR):lib/Java-WebSocket-1.5.3.jar:lib/slf4j-simple-1.7.25.jar:lib/slf4j-api-1.7.25.jar:../lib/sherpaonnx.jar $(RUNJFLAGS) websocketsrv.AsrWebsocketServer $(shell pwd)/../build/lib/libsherpa-onnx-jni.so ./modeltest.cfg
|
||||
|
||||
runclient:
|
||||
java -cp $(BUILD_DIR):lib/Java-WebSocket-1.5.3.jar:lib/slf4j-simple-1.7.25.jar:lib/slf4j-api-1.7.25.jar:../lib/sherpaonnx.jar $(RUNJFLAGS) websocketsrv.AsrWebsocketClient $(shell pwd)/../build/lib/libsherpa-onnx-jni.so 127.0.0.1 8890 ./test.wav 32
|
||||
|
||||
runclienthotwords:
|
||||
java -cp $(BUILD_DIR):lib/Java-WebSocket-1.5.3.jar:lib/slf4j-simple-1.7.25.jar:lib/slf4j-api-1.7.25.jar:../lib/sherpaonnx.jar $(RUNJFLAGS) websocketsrv.AsrWebsocketClient $(shell pwd)/../build/lib/libsherpa-onnx-jni.so 127.0.0.1 8890 ./hotwords.wav 32
|
||||
|
||||
buildlib: $(LIB_FILES:.java=.class)
|
||||
|
||||
|
||||
%.class: %.java
|
||||
$(JAVAC) -cp $(BUILD_DIR) -d $(BUILD_DIR) -encoding UTF-8 $<
|
||||
|
||||
buildwebsocket: $(WEBSOCKET_FILES:.java=.class)
|
||||
|
||||
|
||||
%.class: %.java
|
||||
|
||||
$(JAVAC) -cp $(BUILD_DIR):lib/slf4j-simple-1.7.25.jar:lib/slf4j-api-1.7.25.jar:lib/Java-WebSocket-1.5.3.jar:../lib/sherpaonnx.jar -d $(BUILD_DIR) -encoding UTF-8 $<
|
||||
|
||||
packjar: buildlib
|
||||
jar cvfe lib/sherpaonnx.jar . -C $(BUILD_DIR) .
|
||||
|
||||
all: clean buildlib packjar buildfile buildmic downjar buildwebsocket
|
||||
@@ -1,193 +1,11 @@
|
||||
0.Introduction
|
||||
--------------
|
||||
# Introduction
|
||||
|
||||
Java wrapper `com.k2fsa.sherpa.onnx.OnlineRecognizer` for `sherpa-onnx`. Java is a cross-platform language; you can build jni .so lib according to your system, and then use the same java api for all your platform.
|
||||
now support multiple threads for websocket server
|
||||
This directory contains examples for the JAVA API of sherpa-onnx.
|
||||
|
||||
# Usage
|
||||
|
||||
```xml
|
||||
Depend on:
|
||||
Openjdk 1.8
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
1.Compile libsherpa-onnx-jni.so
|
||||
-------------------------------
|
||||
|
||||
Compile sherpa-onnx/jni/jni.cc according to your system.
|
||||
Example for Ubuntu 18.04 LTS, Openjdk 1.8.0_362:
|
||||
|
||||
```xml
|
||||
git clone https://github.com/k2-fsa/sherpa-onnx
|
||||
cd sherpa-onnx
|
||||
mkdir build
|
||||
cd build
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DSHERPA_ONNX_ENABLE_JNI=ON ..
|
||||
make -j6
|
||||
./run-streaming-decode-file-ctc.sh
|
||||
./run-streaming-decode-file-paraformer.sh
|
||||
./run-streaming-decode-file-transducer.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
2.Download asr model files
|
||||
--------------------------
|
||||
|
||||
[click here for more detail](https://k2-fsa.github.io/sherpa/onnx/pretrained_models/index.html)
|
||||
--------------------------
|
||||
|
||||
3.Config model config.cfg
|
||||
-------------------------
|
||||
/**change model path in config.cfg according to your env**/
|
||||
```xml
|
||||
#model config
|
||||
sample_rate=16000
|
||||
feature_dim=80
|
||||
rule1_min_trailing_silence=2.4
|
||||
rule2_min_trailing_silence=1.2
|
||||
rule3_min_utterance_length=20
|
||||
encoder=/sherpa-onnx/build/bin/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/encoder-epoch-99-avg-1.onnx
|
||||
decoder=/sherpa-onnx/build/bin/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/decoder-epoch-99-avg-1.onnx
|
||||
joiner=/sherpa-onnx/build/bin/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/joiner-epoch-99-avg-1.onnx
|
||||
tokens=/sherpa-onnx/build/bin/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/tokens.txt
|
||||
num_threads=4
|
||||
enable_endpoint_detection=false
|
||||
decoding_method=greedy_search
|
||||
max_active_paths=4
|
||||
|
||||
#websocket server config
|
||||
port=8890
|
||||
#number of threads pool for network io
|
||||
connection_thread_num=16
|
||||
#number of threads pool for stream
|
||||
stream_thread_num=16
|
||||
#number of threads pool for decoder
|
||||
decoder_thread_num=16
|
||||
#size of streams for parallel decoding
|
||||
parallel_decoder_num=16
|
||||
#time(ms) idle for decoder thread when no job
|
||||
decoder_time_idle=10
|
||||
#time(ms) out for connection data
|
||||
deocder_time_out=3000
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
4.A simple java example
|
||||
-----------------------
|
||||
|
||||
refer to [java_api_example](https://github.com/k2-fsa/sherpa-onnx/blob/master/java-api-examples/src/DecodeFile.java) for more detail.
|
||||
|
||||
```java
|
||||
import com.k2fsa.sherpa.onnx.OnlineRecognizer;
|
||||
import com.k2fsa.sherpa.onnx.OnlineStream;
|
||||
String cfgpath=appdir+"/modelconfig.cfg";
|
||||
OnlineRecognizer.setSoPath(soPath); //set so lib path
|
||||
|
||||
OnlineRecognizer rcgOjb = new OnlineRecognizer(); //create a recognizer
|
||||
rcgOjb = new OnlineRecognizer(cfgFile); //set model config file
|
||||
CreateStream streamObj=rcgOjb.CreateStream(); //create a stream for read wav data
|
||||
float[] buffer = rcgOjb.readWavFile(wavfilename); // read data from file
|
||||
streamObj.acceptWaveform(buffer); // feed stream with data
|
||||
streamObj.inputFinished(); // tell engine you done with all data
|
||||
OnlineStream ssObj[] = new OnlineStream[1];
|
||||
while (rcgOjb.isReady(streamObj)) { // engine is ready for unprocessed data
|
||||
ssObj[0] = streamObj;
|
||||
rcgOjb.decodeStreams(ssObj); // decode for multiple stream
|
||||
// rcgOjb.DecodeStream(streamObj); // decode for single stream
|
||||
}
|
||||
|
||||
String recText = "simple:" + rcgOjb.getResult(streamObj) + "\n";
|
||||
byte[] utf8Data = recText.getBytes(StandardCharsets.UTF_8);
|
||||
System.out.println(new String(utf8Data));
|
||||
rcgOjb.reSet(streamObj);
|
||||
rcgOjb.releaseStream(streamObj); // release stream
|
||||
rcgOjb.release(); // release recognizer
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
5.Makefile
|
||||
----------
|
||||
|
||||
OS Ubuntu 18.04 LTS
|
||||
Build package path: /sherpa-onnx/java-api-examples/lib/sherpaonnx.jar
|
||||
|
||||
5.1 Build
|
||||
|
||||
```bash
|
||||
cd sherpa-onnx/java-api-examples
|
||||
make all
|
||||
```
|
||||
|
||||
5.2 Run DecodeFile example
|
||||
|
||||
```bash
|
||||
make runfile
|
||||
```
|
||||
|
||||
5.3 Run DecodeMic example
|
||||
|
||||
```bash
|
||||
make runmic
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
6.WebSocket Server
|
||||
----------
|
||||
|
||||
support multiple threads for websocket server
|
||||
6.0 Protocol for communication
|
||||
1) client connect to server
|
||||
```shell
|
||||
ws client -> srv ws address
|
||||
ws address example: ws://127.0.0.1:8889/
|
||||
```
|
||||
2) client send 16k pcm_s16le binary stream data to server
|
||||
```shell
|
||||
PCM sampleRate 16000
|
||||
single channel
|
||||
sampleSize 16bit
|
||||
little endian
|
||||
type short
|
||||
```
|
||||
3) client send "Done" text to server when all data is sent
|
||||
```shell
|
||||
ws_socket.send("Done")
|
||||
```
|
||||
4) client will receive json message from server whenever asr engine decoded new text
|
||||
```shell
|
||||
json example: {"text":"甚至出现交易几乎停滞的情况","eof":false"}
|
||||
```
|
||||
|
||||
|
||||
6.1 Build
|
||||
|
||||
```bash
|
||||
cd sherpa-onnx/java-api-examples
|
||||
make all
|
||||
```
|
||||
|
||||
6.2 Run srv example
|
||||
|
||||
usage: AsrWebsocketServer soPath modelCfgPath
|
||||
|
||||
```bash
|
||||
make runsrv /**change path in Makefile according to your env**/
|
||||
```
|
||||
|
||||
6.3 Run multiple threads client example
|
||||
|
||||
usage: AsrWebsocketClient soPath srvIp srvPort wavPath numThreads
|
||||
|
||||
json result example: {"text":"甚至出现交易几乎停滞的情况","eof":"true"}
|
||||
|
||||
```bash
|
||||
make runclient /**change path in Makefile according to your env**/
|
||||
```
|
||||
|
||||
7 runtest
|
||||
this script will download model, compile codes and run test
|
||||
```bash
|
||||
cd sherpa-onnx/java-api-examples
|
||||
runtest.sh
|
||||
```
|
||||
57
java-api-examples/StreamingDecodeFileCtc.java
Normal file
57
java-api-examples/StreamingDecodeFileCtc.java
Normal file
@@ -0,0 +1,57 @@
|
||||
// Copyright 2022-2023 by zhaoming
|
||||
// Copyright 2024 Xiaomi Corporation
|
||||
|
||||
// This file shows how to use an online CTC model, i.e., streaming CTC model,
|
||||
// to decode files.
|
||||
import com.k2fsa.sherpa.onnx.*;
|
||||
|
||||
public class StreamingDecodeFileCtc {
|
||||
public static void main(String[] args) {
|
||||
// please refer to
|
||||
// https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-streaming-zipformer-ctc-small-2024-03-18.tar.bz2
|
||||
// to download model files
|
||||
String model =
|
||||
"./sherpa-onnx-streaming-zipformer-ctc-small-2024-03-18/ctc-epoch-30-avg-3-chunk-16-left-128.int8.onnx";
|
||||
String tokens = "./sherpa-onnx-streaming-zipformer-ctc-small-2024-03-18/tokens.txt";
|
||||
String waveFilename = "./sherpa-onnx-streaming-zipformer-ctc-small-2024-03-18/test_wavs/8k.wav";
|
||||
|
||||
WaveReader reader = new WaveReader(waveFilename);
|
||||
System.out.println(reader.getSampleRate());
|
||||
System.out.println(reader.getSamples().length);
|
||||
|
||||
OnlineZipformer2CtcModelConfig ctc =
|
||||
OnlineZipformer2CtcModelConfig.builder().setModel(model).build();
|
||||
|
||||
OnlineModelConfig modelConfig =
|
||||
OnlineModelConfig.builder()
|
||||
.setZipformer2Ctc(ctc)
|
||||
.setTokens(tokens)
|
||||
.setNumThreads(1)
|
||||
.setDebug(true)
|
||||
.build();
|
||||
|
||||
OnlineRecognizerConfig config =
|
||||
OnlineRecognizerConfig.builder()
|
||||
.setOnlineModelConfig(modelConfig)
|
||||
.setDecodingMethod("greedy_search")
|
||||
.build();
|
||||
|
||||
OnlineRecognizer recognizer = new OnlineRecognizer(config);
|
||||
OnlineStream stream = recognizer.createStream();
|
||||
stream.acceptWaveform(reader.getSamples(), reader.getSampleRate());
|
||||
|
||||
float[] tailPaddings = new float[(int) (0.3 * reader.getSampleRate())];
|
||||
stream.acceptWaveform(tailPaddings, reader.getSampleRate());
|
||||
|
||||
while (recognizer.isReady(stream)) {
|
||||
recognizer.decode(stream);
|
||||
}
|
||||
|
||||
String text = recognizer.getResult(stream).getText();
|
||||
|
||||
System.out.printf("filename:%s\nresult:%s\n", waveFilename, text);
|
||||
|
||||
stream.release();
|
||||
recognizer.release();
|
||||
}
|
||||
}
|
||||
57
java-api-examples/StreamingDecodeFileParaformer.java
Normal file
57
java-api-examples/StreamingDecodeFileParaformer.java
Normal file
@@ -0,0 +1,57 @@
|
||||
// Copyright 2022-2023 by zhaoming
|
||||
// Copyright 2024 Xiaomi Corporation
|
||||
|
||||
// This file shows how to use an online paraformer, i.e., streaming paraformer,
|
||||
// to decode files.
|
||||
import com.k2fsa.sherpa.onnx.*;
|
||||
|
||||
public class StreamingDecodeFileParaformer {
|
||||
public static void main(String[] args) {
|
||||
// please refer to
|
||||
// https://k2-fsa.github.io/sherpa/onnx/pretrained_models/online-paraformer/paraformer-models.html#csukuangfj-sherpa-onnx-streaming-paraformer-bilingual-zh-en-chinese-english
|
||||
// to download model files
|
||||
String encoder = "./sherpa-onnx-streaming-paraformer-bilingual-zh-en/encoder.int8.onnx";
|
||||
String decoder = "./sherpa-onnx-streaming-paraformer-bilingual-zh-en/decoder.int8.onnx";
|
||||
String tokens = "./sherpa-onnx-streaming-paraformer-bilingual-zh-en/tokens.txt";
|
||||
String waveFilename = "./sherpa-onnx-streaming-paraformer-bilingual-zh-en/test_wavs/2.wav";
|
||||
|
||||
WaveReader reader = new WaveReader(waveFilename);
|
||||
System.out.println(reader.getSampleRate());
|
||||
System.out.println(reader.getSamples().length);
|
||||
|
||||
OnlineParaformerModelConfig paraformer =
|
||||
OnlineParaformerModelConfig.builder().setEncoder(encoder).setDecoder(decoder).build();
|
||||
|
||||
OnlineModelConfig modelConfig =
|
||||
OnlineModelConfig.builder()
|
||||
.setParaformer(paraformer)
|
||||
.setTokens(tokens)
|
||||
.setNumThreads(1)
|
||||
.setDebug(true)
|
||||
.build();
|
||||
|
||||
OnlineRecognizerConfig config =
|
||||
OnlineRecognizerConfig.builder()
|
||||
.setOnlineModelConfig(modelConfig)
|
||||
.setDecodingMethod("greedy_search")
|
||||
.build();
|
||||
|
||||
OnlineRecognizer recognizer = new OnlineRecognizer(config);
|
||||
OnlineStream stream = recognizer.createStream();
|
||||
stream.acceptWaveform(reader.getSamples(), reader.getSampleRate());
|
||||
|
||||
float[] tailPaddings = new float[(int) (0.8 * reader.getSampleRate())];
|
||||
stream.acceptWaveform(tailPaddings, reader.getSampleRate());
|
||||
|
||||
while (recognizer.isReady(stream)) {
|
||||
recognizer.decode(stream);
|
||||
}
|
||||
|
||||
String text = recognizer.getResult(stream).getText();
|
||||
|
||||
System.out.printf("filename:%s\nresult:%s\n", waveFilename, text);
|
||||
|
||||
stream.release();
|
||||
recognizer.release();
|
||||
}
|
||||
}
|
||||
67
java-api-examples/StreamingDecodeFileTransducer.java
Normal file
67
java-api-examples/StreamingDecodeFileTransducer.java
Normal file
@@ -0,0 +1,67 @@
|
||||
// Copyright 2022-2023 by zhaoming
|
||||
// Copyright 2024 Xiaomi Corporation
|
||||
|
||||
// This file shows how to use an online transducer, i.e., streaming transducer,
|
||||
// to decode files.
|
||||
import com.k2fsa.sherpa.onnx.*;
|
||||
|
||||
public class StreamingDecodeFileTransducer {
|
||||
public static void main(String[] args) {
|
||||
// please refer to
|
||||
// https://k2-fsa.github.io/sherpa/onnx/pretrained_models/online-transducer/zipformer-transducer-models.html#csukuangfj-sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20-bilingual-chinese-english
|
||||
// to download model files
|
||||
String encoder =
|
||||
"./sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/encoder-epoch-99-avg-1.int8.onnx";
|
||||
String decoder =
|
||||
"./sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/decoder-epoch-99-avg-1.onnx";
|
||||
String joiner =
|
||||
"./sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/joiner-epoch-99-avg-1.onnx";
|
||||
String tokens = "./sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/tokens.txt";
|
||||
|
||||
String waveFilename =
|
||||
"./sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/test_wavs/0.wav";
|
||||
|
||||
WaveReader reader = new WaveReader(waveFilename);
|
||||
System.out.println(reader.getSampleRate());
|
||||
System.out.println(reader.getSamples().length);
|
||||
|
||||
OnlineTransducerModelConfig transducer =
|
||||
OnlineTransducerModelConfig.builder()
|
||||
.setEncoder(encoder)
|
||||
.setDecoder(decoder)
|
||||
.setJoiner(joiner)
|
||||
.build();
|
||||
|
||||
OnlineModelConfig modelConfig =
|
||||
OnlineModelConfig.builder()
|
||||
.setTransducer(transducer)
|
||||
.setTokens(tokens)
|
||||
.setNumThreads(1)
|
||||
.setDebug(true)
|
||||
.build();
|
||||
|
||||
OnlineRecognizerConfig config =
|
||||
OnlineRecognizerConfig.builder()
|
||||
.setOnlineModelConfig(modelConfig)
|
||||
.setDecodingMethod("greedy_search")
|
||||
.build();
|
||||
|
||||
OnlineRecognizer recognizer = new OnlineRecognizer(config);
|
||||
OnlineStream stream = recognizer.createStream();
|
||||
stream.acceptWaveform(reader.getSamples(), reader.getSampleRate());
|
||||
|
||||
float[] tailPaddings = new float[(int) (0.8 * reader.getSampleRate())];
|
||||
stream.acceptWaveform(tailPaddings, reader.getSampleRate());
|
||||
|
||||
while (recognizer.isReady(stream)) {
|
||||
recognizer.decode(stream);
|
||||
}
|
||||
|
||||
String text = recognizer.getResult(stream).getText();
|
||||
|
||||
System.out.printf("filename:%s\nresult:%s\n", waveFilename, text);
|
||||
|
||||
stream.release();
|
||||
recognizer.release();
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
#model config
|
||||
sample_rate=16000
|
||||
feature_dim=80
|
||||
rule1_min_trailing_silence=2.4
|
||||
rule2_min_trailing_silence=1.2
|
||||
rule3_min_utterance_length=20
|
||||
encoder=/sherpa/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/encoder-epoch-99-avg-1.onnx
|
||||
decoder=/sherpa/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/decoder-epoch-99-avg-1.onnx
|
||||
joiner=/sherpa/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/joiner-epoch-99-avg-1.onnx
|
||||
tokens=/sherpa/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/tokens.txt
|
||||
num_threads=4
|
||||
enable_endpoint_detection=true
|
||||
decoding_method=modified_beam_search
|
||||
max_active_paths=4
|
||||
hotwords_file=
|
||||
hotwords_score=1.5
|
||||
lm_model=
|
||||
lm_scale=0.5
|
||||
model_type=zipformer
|
||||
|
||||
#websocket server config
|
||||
port=8890
|
||||
connection_thread_num=16
|
||||
stream_thread_num=16
|
||||
decoder_thread_num=16
|
||||
parallel_decoder_num=16
|
||||
decoder_time_idle=200
|
||||
deocder_time_out=30000
|
||||
36
java-api-examples/run-streaming-decode-file-ctc.sh
Executable file
36
java-api-examples/run-streaming-decode-file-ctc.sh
Executable file
@@ -0,0 +1,36 @@
|
||||
#!/usr/bin/env bash
|
||||
set -ex
|
||||
|
||||
if [[ ! -f ../build/lib/libsherpa-onnx-jni.dylib && ! -f ../build/lib/libsherpa-onnx-jni.so ]]; then
|
||||
mkdir -p ../build
|
||||
pushd ../build
|
||||
cmake \
|
||||
-DSHERPA_ONNX_ENABLE_PYTHON=OFF \
|
||||
-DSHERPA_ONNX_ENABLE_TESTS=OFF \
|
||||
-DSHERPA_ONNX_ENABLE_CHECK=OFF \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
-DSHERPA_ONNX_ENABLE_PORTAUDIO=OFF \
|
||||
-DSHERPA_ONNX_ENABLE_JNI=ON \
|
||||
..
|
||||
|
||||
make -j4
|
||||
ls -lh lib
|
||||
popd
|
||||
fi
|
||||
|
||||
if [ ! -f ../sherpa-onnx/java-api/build/sherpa-onnx.jar ]; then
|
||||
pushd ../sherpa-onnx/java-api
|
||||
make
|
||||
popd
|
||||
fi
|
||||
|
||||
if [ ! -f ./sherpa-onnx-streaming-zipformer-ctc-small-2024-03-18/tokens.txt ]; then
|
||||
curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-streaming-zipformer-ctc-small-2024-03-18.tar.bz2
|
||||
tar xvf sherpa-onnx-streaming-zipformer-ctc-small-2024-03-18.tar.bz2
|
||||
rm sherpa-onnx-streaming-zipformer-ctc-small-2024-03-18.tar.bz2
|
||||
fi
|
||||
|
||||
java \
|
||||
-Djava.library.path=$PWD/../build/lib \
|
||||
-cp ../sherpa-onnx/java-api/build/sherpa-onnx.jar \
|
||||
StreamingDecodeFileCtc.java
|
||||
36
java-api-examples/run-streaming-decode-file-paraformer.sh
Executable file
36
java-api-examples/run-streaming-decode-file-paraformer.sh
Executable file
@@ -0,0 +1,36 @@
|
||||
#!/usr/bin/env bash
|
||||
set -ex
|
||||
|
||||
if [[ ! -f ../build/lib/libsherpa-onnx-jni.dylib && ! -f ../build/lib/libsherpa-onnx-jni.so ]]; then
|
||||
mkdir -p ../build
|
||||
pushd ../build
|
||||
cmake \
|
||||
-DSHERPA_ONNX_ENABLE_PYTHON=OFF \
|
||||
-DSHERPA_ONNX_ENABLE_TESTS=OFF \
|
||||
-DSHERPA_ONNX_ENABLE_CHECK=OFF \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
-DSHERPA_ONNX_ENABLE_PORTAUDIO=OFF \
|
||||
-DSHERPA_ONNX_ENABLE_JNI=ON \
|
||||
..
|
||||
|
||||
make -j4
|
||||
ls -lh lib
|
||||
popd
|
||||
fi
|
||||
|
||||
if [ ! -f ../sherpa-onnx/java-api/build/sherpa-onnx.jar ]; then
|
||||
pushd ../sherpa-onnx/java-api
|
||||
make
|
||||
popd
|
||||
fi
|
||||
|
||||
if [ ! -f ./sherpa-onnx-streaming-paraformer-bilingual-zh-en/tokens.txt ]; then
|
||||
curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-streaming-paraformer-bilingual-zh-en.tar.bz2
|
||||
tar xvf sherpa-onnx-streaming-paraformer-bilingual-zh-en.tar.bz2
|
||||
rm sherpa-onnx-streaming-paraformer-bilingual-zh-en.tar.bz2
|
||||
fi
|
||||
|
||||
java \
|
||||
-Djava.library.path=$PWD/../build/lib \
|
||||
-cp ../sherpa-onnx/java-api/build/sherpa-onnx.jar \
|
||||
StreamingDecodeFileParaformer.java
|
||||
51
java-api-examples/run-streaming-decode-file-transducer.sh
Executable file
51
java-api-examples/run-streaming-decode-file-transducer.sh
Executable file
@@ -0,0 +1,51 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -ex
|
||||
|
||||
if [[ ! -f ../build/lib/libsherpa-onnx-jni.dylib && ! -f ../build/lib/libsherpa-onnx-jni.so ]]; then
|
||||
mkdir -p ../build
|
||||
pushd ../build
|
||||
cmake \
|
||||
-DSHERPA_ONNX_ENABLE_PYTHON=OFF \
|
||||
-DSHERPA_ONNX_ENABLE_TESTS=OFF \
|
||||
-DSHERPA_ONNX_ENABLE_CHECK=OFF \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
-DSHERPA_ONNX_ENABLE_PORTAUDIO=OFF \
|
||||
-DSHERPA_ONNX_ENABLE_JNI=ON \
|
||||
..
|
||||
|
||||
make -j4
|
||||
ls -lh lib
|
||||
popd
|
||||
fi
|
||||
|
||||
if [ ! -f ../sherpa-onnx/java-api/build/sherpa-onnx.jar ]; then
|
||||
pushd ../sherpa-onnx/java-api
|
||||
make
|
||||
popd
|
||||
fi
|
||||
|
||||
if [[ ! -f ../build/lib/libsherpa-onnx-jni.dylib && ! -f ../build/lib/libsherpa-onnx-jni.so ]]; then
|
||||
cmake \
|
||||
-DSHERPA_ONNX_ENABLE_PYTHON=OFF \
|
||||
-DSHERPA_ONNX_ENABLE_TESTS=OFF \
|
||||
-DSHERPA_ONNX_ENABLE_CHECK=OFF \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
-DSHERPA_ONNX_ENABLE_PORTAUDIO=OFF \
|
||||
-DSHERPA_ONNX_ENABLE_JNI=ON \
|
||||
..
|
||||
|
||||
make -j4
|
||||
ls -lh lib
|
||||
fi
|
||||
|
||||
if [ ! -f ./sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/tokens.txt ]; then
|
||||
curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20.tar.bz2
|
||||
tar xvf sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20.tar.bz2
|
||||
rm sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20.tar.bz2
|
||||
fi
|
||||
|
||||
java \
|
||||
-Djava.library.path=$PWD/../build/lib \
|
||||
-cp ../sherpa-onnx/java-api/build/sherpa-onnx.jar \
|
||||
StreamingDecodeFileTransducer.java
|
||||
@@ -1,74 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# This scripts shows how to test java for sherpa-onnx
|
||||
# Note: This scripts runs only on Linux and macOS
|
||||
|
||||
set -e
|
||||
|
||||
log() {
|
||||
# This function is from espnet
|
||||
local fname=${BASH_SOURCE[1]##*/}
|
||||
echo -e "$(date '+%Y-%m-%d %H:%M:%S') (${fname}:${BASH_LINENO[0]}:${FUNCNAME[1]}) $*"
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
echo "PATH: $PATH"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
log "------------------------------------------------------------"
|
||||
log "Run download model"
|
||||
log "------------------------------------------------------------"
|
||||
|
||||
repo_url=https://huggingface.co/csukuangfj/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20
|
||||
log "Start testing ${repo_url}"
|
||||
repo=$(basename $repo_url)
|
||||
log "download dir is $(basename $repo_url)"
|
||||
if [ ! -d $repo ];then
|
||||
log "Download pretrained model and test-data from $repo_url"
|
||||
|
||||
GIT_LFS_SKIP_SMUDGE=1 git clone $repo_url
|
||||
pushd $repo
|
||||
git lfs pull --include "*.onnx"
|
||||
ls -lh *.onnx
|
||||
popd
|
||||
ln -s $repo/test_wavs/0.wav hotwords.wav
|
||||
|
||||
fi
|
||||
|
||||
log $(pwd)
|
||||
|
||||
sed -e 's?/sherpa/?'$(pwd)'/?g' modelconfig.cfg > modeltest.cfg
|
||||
|
||||
log "display model cfg"
|
||||
cat modeltest.cfg
|
||||
|
||||
cd ..
|
||||
|
||||
export JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")
|
||||
|
||||
mkdir -p build
|
||||
cd build
|
||||
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DSHERPA_ONNX_ENABLE_JNI=ON ..
|
||||
|
||||
make -j4
|
||||
ls -lh lib
|
||||
|
||||
export LD_LIBRARY_PATH=$PWD/build/lib:$LD_LIBRARY_PATH
|
||||
|
||||
cd ../java-api-examples
|
||||
|
||||
make all
|
||||
|
||||
make runfile
|
||||
|
||||
echo "礼 拜 二" > hotwords.txt
|
||||
|
||||
sed -i 's/hotwords_file=/hotwords_file=hotwords.txt/g' modeltest.cfg
|
||||
|
||||
make runhotwords
|
||||
Binary file not shown.
Reference in New Issue
Block a user