Add java websocket support (#137)

* add decode example for mic

* some changes to README.md

* add java websocket srv

* change to readwav to static

* make some changes to code comments

* little change for readme.md

* fix bug about multiple threads

* made little modification

* add protocol in readme, removed static Queue and add lmConfig

---------

Co-authored-by: root <root@localhost.localdomain>
This commit is contained in:
zhaomingwork
2023-05-18 10:35:40 +08:00
committed by GitHub
parent 655c619bf3
commit b70d40f4ab
12 changed files with 853 additions and 19 deletions

View File

@@ -0,0 +1,23 @@
/*
* // Copyright 2022-2023 by zhaoming
*/
package com.k2fsa.sherpa.onnx;
public class OnlineLMConfig {
private final String model;
private final float scale;
public OnlineLMConfig(String model, float scale) {
this.model = model;
this.scale = scale;
}
public String getModel() {
return model;
}
public float getScale() {
return scale;
}
}

View File

@@ -65,11 +65,14 @@ public class OnlineRecognizer {
false);
FeatureConfig featConfig =
new FeatureConfig(sampleRate, Integer.parseInt(proMap.get("feature_dim").trim()));
OnlineRecognizerConfig rcgCfg =
OnlineLMConfig onlineLmConfig=new OnlineLMConfig(proMap.get("lm_model").trim(),Float.parseFloat(proMap.get("lm_scale").trim()));
OnlineRecognizerConfig rcgCfg =
new OnlineRecognizerConfig(
featConfig,
modelCfg,
endCfg,
onlineLmConfig,
Boolean.parseBoolean(proMap.get("enable_endpoint_detection").trim()),
proMap.get("decoding_method").trim(),
Integer.parseInt(proMap.get("max_active_paths").trim()));
@@ -107,11 +110,15 @@ public class OnlineRecognizer {
false);
FeatureConfig featConfig =
new FeatureConfig(sampleRate, Integer.parseInt(proMap.get("feature_dim").trim()));
OnlineRecognizerConfig rcgCfg =
OnlineLMConfig onlineLmConfig=new OnlineLMConfig(proMap.get("lm_model").trim(),Float.parseFloat(proMap.get("lm_scale").trim()));
OnlineRecognizerConfig rcgCfg =
new OnlineRecognizerConfig(
featConfig,
modelCfg,
endCfg,
onlineLmConfig,
Boolean.parseBoolean(proMap.get("enable_endpoint_detection").trim()),
proMap.get("decoding_method").trim(),
Integer.parseInt(proMap.get("max_active_paths").trim()));
@@ -137,6 +144,8 @@ public class OnlineRecognizer {
float rule2MinTrailingSilence,
float rule3MinUtteranceLength,
String decodingMethod,
String lm_model,
float lm_scale,
int maxActivePaths) {
this.sampleRate = sampleRate;
EndpointRule rule1 = new EndpointRule(false, rule1MinTrailingSilence, 0.0F);
@@ -146,14 +155,10 @@ public class OnlineRecognizer {
OnlineTransducerModelConfig modelCfg =
new OnlineTransducerModelConfig(encoder, decoder, joiner, tokens, numThreads, false);
FeatureConfig featConfig = new FeatureConfig(sampleRate, featureDim);
OnlineRecognizerConfig rcgCfg =
OnlineLMConfig onlineLmConfig=new OnlineLMConfig(lm_model,lm_scale);
OnlineRecognizerConfig rcgCfg =
new OnlineRecognizerConfig(
featConfig,
modelCfg,
endCfg,
enableEndpointDetection,
decodingMethod,
maxActivePaths);
featConfig, modelCfg, endCfg, onlineLmConfig,enableEndpointDetection, decodingMethod, maxActivePaths);
// create a new Recognizer, first parameter kept for android asset_manager ANDROID_API__ >= 9
this.ptr = createOnlineRecognizer(new Object(), rcgCfg);
}
@@ -241,7 +246,7 @@ public class OnlineRecognizer {
return stream;
}
public float[] readWavFile(String fileName) {
public static float[] readWavFile(String fileName) {
// read data from the filename
Object[] wavdata = readWave(fileName);
Object data = wavdata[0]; // data[0] is float data, data[1] sample rate
@@ -281,7 +286,7 @@ public class OnlineRecognizer {
}
// JNI interface libsherpa-onnx-jni.so
private native Object[] readWave(String fileName);
private static native Object[] readWave(String fileName); // static
private native String getResult(long ptr, long streamPtr);

View File

@@ -8,25 +8,33 @@ public class OnlineRecognizerConfig {
private final FeatureConfig featConfig;
private final OnlineTransducerModelConfig modelConfig;
private final EndpointConfig endpointConfig;
private final OnlineLMConfig lmConfig;
private final boolean enableEndpoint;
private final String decodingMethod;
private final int maxActivePaths;
public OnlineRecognizerConfig(
FeatureConfig featConfig,
OnlineTransducerModelConfig modelConfig,
EndpointConfig endpointConfig,
OnlineLMConfig lmConfig,
boolean enableEndpoint,
String decodingMethod,
int maxActivePaths) {
this.featConfig = featConfig;
this.modelConfig = modelConfig;
this.endpointConfig = endpointConfig;
this.lmConfig = lmConfig;
this.enableEndpoint = enableEndpoint;
this.decodingMethod = decodingMethod;
this.maxActivePaths = maxActivePaths;
}
public OnlineLMConfig getLmConfig() {
return lmConfig;
}
public FeatureConfig getFeatConfig() {
return featConfig;
}