Compare commits

...

9 Commits

Author SHA1 Message Date
Nickolay Shmyrev 5c4dd4644e Update version 2020-05-03 20:52:43 +02:00
Nickolay Shmyrev 9bbd172cfd Some more links 2020-05-02 01:37:10 +02:00
Nickolay Shmyrev dbf9de77c3 Document model training and model structure 2020-05-02 01:11:25 +02:00
Nickolay Shmyrev 8b790cd162 Better android logging 2020-05-01 20:02:46 +02:00
Nickolay Shmyrev 80219066e9 Expose verbose level in the API 2020-05-01 19:02:57 +02:00
Nickolay Shmyrev 26fa5f098f Updated link to English model 2020-04-30 15:19:13 +02:00
Nickolay Shmyrev d75bb36131 Fix model download path 2020-04-30 11:04:35 +02:00
Nickolay Shmyrev 30c5e8ca79 Link to lm library for rescoring 2020-04-30 10:52:15 +02:00
Nickolay Shmyrev c00e36fab6 Rearrange models 2020-04-30 10:47:10 +02:00
21 changed files with 200 additions and 115 deletions
+6 -6
View File
@@ -95,8 +95,8 @@ Run like this:
```
cd vosk-api/python/example
wget https://github.com/alphacep/kaldi-android-demo/releases/download/2020-01/alphacep-model-android-en-us-0.3.tar.gz
tar xf alphacep-model-android-en-us-0.3.tar.gz
wget https://alphacephei.com/kaldi/models/vosk-model-small-en-us-0.3.zip
unzip alphacep-model-android-en-us-0.3.zip
mv alphacep-model-android-en-us-0.3 model-en
python3 ./test_simple.py test.wav
```
@@ -111,8 +111,8 @@ Or Java
```
cd java && KALDI_ROOT=<KALDI_ROOT> make
wget https://github.com/alphacep/kaldi-android-demo/releases/download/2020-01/alphacep-model-android-en-us-0.3.tar.gz
tar xf alphacep-model-android-en-us-0.3.tar.gz
wget https://alphacephei.com/kaldi/models/vosk-model-small-en-us-0.3.zip
unzip alphacep-model-android-en-us-0.3.zip
mv alphacep-model-android-en-us-0.3 model
make run
```
@@ -123,8 +123,8 @@ Or C#
```
cd csharp && KALDI_ROOT=<KALDI_ROOT> make
wget https://github.com/alphacep/kaldi-android-demo/releases/download/2020-01/alphacep-model-android-en-us-0.3.tar.gz
tar xf alphacep-model-android-en-us-0.3.tar.gz
wget https://alphacephei.com/kaldi/models/vosk-model-small-en-us-0.3.zip
unzip alphacep-model-android-en-us-0.3.zip
mv alphacep-model-android-en-us-0.3 model
mono test.exe
```
+6 -6
View File
@@ -100,8 +100,8 @@ python3 setup.py install
```
cd vosk-api/python/example
wget https://github.com/alphacep/kaldi-android-demo/releases/download/2020-01/alphacep-model-android-en-us-0.3.tar.gz
tar xf alphacep-model-android-en-us-0.3.tar.gz
wget https://alphacephei.com/kaldi/models/vosk-model-small-en-us-0.3.zip
unzip alphacep-model-android-en-us-0.3.zip
mv alphacep-model-android-en-us-0.3 model-en
python3 ./test_simple.py test.wav
```
@@ -116,8 +116,8 @@ python3 ./test_simple.py test.wav
```
cd java && KALDI_ROOT=<KALDI_ROOT> make
wget https://github.com/alphacep/kaldi-android-demo/releases/download/2020-01/alphacep-model-android-en-us-0.3.tar.gz
tar xf alphacep-model-android-en-us-0.3.tar.gz
wget https://alphacephei.com/kaldi/models/vosk-model-small-en-us-0.3.zip
unzip alphacep-model-android-en-us-0.3.zip
mv alphacep-model-android-en-us-0.3 model
make run
```
@@ -128,8 +128,8 @@ make run
```
cd csharp && KALDI_ROOT=<KALDI_ROOT> make
wget https://github.com/alphacep/kaldi-android-demo/releases/download/2020-01/alphacep-model-android-en-us-0.3.tar.gz
tar xf alphacep-model-android-en-us-0.3.tar.gz
wget https://alphacephei.com/kaldi/models/vosk-model-small-en-us-0.3.zip
unzip alphacep-model-android-en-us-0.3.zip
mv alphacep-model-android-en-us-0.3 model
mono test.exe
```
+1
View File
@@ -45,6 +45,7 @@ target_link_libraries( kaldi_jni
${KALDI_ROOT}/src/tree/kaldi-tree.a
${KALDI_ROOT}/src/feat/kaldi-feat.a
${KALDI_ROOT}/src/lat/kaldi-lat.a
${KALDI_ROOT}/src/lm/kaldi-lm.a
${KALDI_ROOT}/src/hmm/kaldi-hmm.a
${KALDI_ROOT}/src/transform/kaldi-transform.a
${KALDI_ROOT}/src/cudamatrix/kaldi-cudamatrix.a
@@ -241,10 +241,6 @@ public class Assets {
if (!items.get(path).equals(externalItems.get(path))
|| !(new File(externalDir, path).exists()))
newItems.add(path);
else
Log.i(TAG,
String.format("Skipping asset %s: checksums are equal", path));
}
unusedItems.addAll(externalItems.keySet());
@@ -252,13 +248,11 @@ public class Assets {
for (String path : newItems) {
File file = copy(path);
Log.i(TAG, String.format("Copying asset %s to %s", path, file));
}
for (String path : unusedItems) {
File file = new File(externalDir, path);
file.delete();
Log.i(TAG, String.format("Removing asset %s", file));
}
updateItemList(items);
@@ -148,7 +148,6 @@ public class SpeechRecognizer {
public boolean stop() {
boolean result = stopRecognizerThread();
if (result) {
Log.i(TAG, "Stop recognition");
mainHandler.post(new ResultEvent(recognizer.Result(), true));
}
return result;
@@ -163,10 +162,6 @@ public class SpeechRecognizer {
public boolean cancel() {
boolean result = stopRecognizerThread();
recognizer.Result(); // Reset recognizer state
if (result) {
Log.i(TAG, "Cancel recognition");
}
return result;
}
@@ -207,8 +202,6 @@ public class SpeechRecognizer {
return;
}
Log.d(TAG, "Starting decoding");
short[] buffer = new short[bufferSize];
while (!interrupted()
+2 -2
View File
@@ -44,10 +44,10 @@ libkaldiwrap.so: $(VOSK_SOURCES)
$(CXX) -fpermissive $(CFLAGS) $(CPPFLAGS) -shared -o $@ $(VOSK_SOURCES) $(KALDI_LIBS)
vosk_wrap.c: ../src/vosk.i
swig -csharp -DSWIG_CSHARP_NO_EXCEPTION_HELPER -dllimport "libkaldiwrap.so" \
swig -csharp -DSWIG_CSHARP_NO_EXCEPTION_HELPER -dllimport "libkaldiwrap" \
-namespace "Kaldi" -outdir gen -o vosk_wrap.c ../src/vosk.i
run:
run: test.exe
mono test.exe
clean:
+1
View File
@@ -7,6 +7,7 @@ public class Test
public static void Main()
{
Vosk.SetLogLevel(0);
Model model = new Model("model");
KaldiRecognizer rec = new KaldiRecognizer(model, 16000.0f);
+67 -61
View File
@@ -4,72 +4,78 @@ This is the list of models compatible with Vosk-API.
To add a new model here create an issue on Github.
### English
| Model | Size | Accuracy | Notes |
|-----------------------------------------------------------------------------------------------------------|-------|------------|----------------------------------------------------------------------------------------------|
| [kaldi-en-us-aspire-0.1](http://alphacephei.com/kaldi/kaldi-en-us-aspire-0.1.tar.gz) | 363M | TBD | Trained on Fisher + more or less recent LM. Pretty outdated but still ok even even for calls |
| [alphacep-model-android-en-us-0.3](http://alphacephei.com/kaldi/alphacep-model-android-en-us-0.3.tar.gz) | 36M | TBD | Lightweight wideband model for Android and RPi |
### Chinese
| Model | Size | Accuracy | Notes |
|-----------------------------------------------------------------------------------------------------------|-------|------------|----------------------------------------------------------------------------------------------|
| [kaldi-cn-0.1.tar.gz](http://alphacephei.com/kaldi/kaldi-cn-0.1.tar.gz) | 195M | TBD | Big narrowband Chinese model for server processing |
| [alphacep-model-android-cn-0.3](http://alphacephei.com/kaldi/alphacep-model-android-cn-0.3.tar.gz) | 32M | TBD | Lightweight wideband model for Android and RPi |
### Russian
| Model | Size | Accuracy | Notes |
|-----------------------------------------------------------------------------------------------------------|-------|------------|----------------------------------------------------------------------------------------------|
| [kaldi-ru-0.10.tar.gz](http://alphacephei.com/kaldi/kaldi-ru-0.10.tar.gz) | 2.5G | TBD | Big narrowband Russian model for server processing |
| [alphacep-model-android-ru-0.3](http://alphacephei.com/kaldi/alphacep-model-android-ru-0.3.tar.gz) | 39M | TBD | Lightweight wideband model for Android and RPi |
### French
| Model | Size | Accuracy | Notes |
|-------------------------------------------------------------------------------------------------------------------------|-------|------------|----------------------------------------------------------------------------------------------|
| [alphacep-model-android-fr-pguyot-0.3](http://alphacephei.com/kaldi/alphacep-model-android-fr-pguyot-0.3.tar.gz) | 39M | TBD | Lightweight wideband model for Android and RPi trained by [Paul Guyot](https://github.com/pguyot/zamia-speech/releases) |
### German
| Model | Size | Accuracy | Notes |
|-----------------------------------------------------------------------------------------------------------|-------|------------|------------------------------------------------------------------------------------------------------|
| [tuda-de](http://ltdata1.informatik.uni-hamburg.de/kaldi_tuda_de/de_400k_nnet3chain_tdnn1f_2048_sp_bi.tar.bz2) | 566M | TBD | Wideband server model from [tuda-de](https://github.com/uhh-lt/kaldi-tuda-de) |
| [alphacep-model-android-de-zamia-0.3](http://alphacephei.com/kaldi/alphacep-model-android-de-zamia-0.3.tar.gz) | 49M | TBD | Lightweight wideband model for Android and RPi |
### Spanish
| Model | Size | Accuracy | Notes |
|-----------------------------------------------------------------------------------------------------------|-------|------------|----------------------------------------------------------------------------------------------|
| [alphacep-model-android-es-0.3](http://alphacephei.com/kaldi/alphacep-model-android-es-0.3.tar.gz) | 33M | TBD | Lightweight wideband model for Android and RPi |
### Portuguese
| Model | Size | Accuracy | Notes |
|-----------------------------------------------------------------------------------------------------------|-------|------------|----------------------------------------------------------------------------------------------|
| [alphacep-model-android-pt-0.3](http://alphacephei.com/kaldi/alphacep-model-android-pt-0.3.tar.gz) | 31M | TBD | Lightweight wideband model for Android and RPi |
### Dutch
https://github.com/opensource-spraakherkenning-nl/Kaldi_NL
### Greek
| Model | Size | Accuracy | Notes |
|-----------------------------------------------------------------------------------------------------------|-------|------------|----------------------------------------------------------------------------------------------|
| [kaldi-el-gr-0.6.tar.gz](http://alphacephei.com/kaldi/kaldi-el-gr-0.6.tar.gz) | 1.1G | TBD | Big narrowband Greek model for server processing, not extremely accurate though |
| **English** | | | |
| [vosk-model-en-us-aspire-0.2](http://alphacephei.com/kaldi/models/vosk-model-en-us-aspire-0.2.zip) | 1.4G | TBD | Trained on Fisher + more or less recent LM. Should be pretty good for generic US English transcription |
| [vosk-model-small-en-us-0.3](http://alphacephei.com/kaldi/models/vosk-model-small-en-us-0.3.zip) | 36M | TBD | Lightweight wideband model for Android and RPi |
| **Chinese** | | | |
| [vosk-model-cn-0.1.zip](http://alphacephei.com/kaldi/models/vosk-model-cn-0.1.zip) | 195M | TBD | Big narrowband Chinese model for server processing |
| [vosk-model-small-cn-0.3](http://alphacephei.com/kaldi/models/vosk-model-small-cn-0.3.zip) | 32M | TBD | Lightweight wideband model for Android and RPi |
| **Russian** | | | |
| [vosk-model-ru-0.10.zip](http://alphacephei.com/kaldi/models/vosk-model-ru-0.10.zip) | 2.5G | TBD | Big narrowband Russian model for server processing |
| [vosk-model-small-ru-0.4](http://alphacephei.com/kaldi/models/vosk-model-small-ru-0.4.zip) | 39M | TBD | Lightweight wideband model for Android and RPi |
| **French** | | | |
| [vosk-model-small-fr-pguyot-0.3](http://alphacephei.com/kaldi/models/vosk-model-small-fr-pguyot-0.3.zip) | 39M | TBD | Lightweight wideband model for Android and RPi trained by [Paul Guyot](https://github.com/pguyot/zamia-speech/releases) |
| **German** | | | |
| [tuda-de](http://ltdata1.informatik.uni-hamburg.de/kaldi_tuda_de/de_400k_nnet3chain_tdnn1f_2048_sp_bi.tar.bz2) | 566M | TBD | Wideband server model from [tuda-de](https://github.com/uhh-lt/vosk-model-tuda-de) |
| [vosk-model-small-de-zamia-0.3](http://alphacephei.com/kaldi/models/vosk-model-small-de-zamia-0.3.zip) | 49M | TBD | Lightweight wideband model for Android and RPi |
| **Spanish** | | | |
| [vosk-model-small-es-0.3](http://alphacephei.com/kaldi/models/vosk-model-small-es-0.3.zip) | 33M | TBD | Lightweight wideband model for Android and RPi |
| **Portuguese** | | | |
| [vosk-model-small-pt-0.3](http://alphacephei.com/kaldi/models/vosk-model-small-pt-0.3.zip) | 31M | TBD | Lightweight wideband model for Android and RPi |
| **Greek** | | | |
| [vosk-model-el-gr-0.6.zip](http://alphacephei.com/kaldi/models/vosk-model-el-gr-0.6.zip) | 1.1G | TBD | Big narrowband Greek model for server processing, not extremely accurate though |
| **Turkish** | | | |
| [vosk-model-small-tr-0.3](http://alphacephei.com/kaldi/models/vosk-model-small-tr-0.3.zip) | 35M | TBD | Lightweight wideband model for Android and RPi |
| **Vietnamese** | | | |
| [vosk-model-small-vn-0.3](http://alphacephei.com/kaldi/models/vosk-model-small-vn-0.3.zip) | 32M | TBD | Lightweight wideband model for Android and RPi |
| **Speaker identification model** | | | |
| [vosk-model-spk-0.3](http://alphacephei.com/kaldi/models/vosk-model-spk-0.3.zip) | 13M | TBD | Model for speaker identification, should work for all languages |
### Turkish
## Other models
| Model | Size | Accuracy | Notes |
|-----------------------------------------------------------------------------------------------------------|-------|------------|----------------------------------------------------------------------------------------------|
| [alphacep-model-android-tr-0.3](http://alphacephei.com/kaldi/alphacep-model-android-tr-0.3.tar.gz) | 35M | TBD | Lightweight wideband model for Android and RPi |
Other places where you can check for models which might be compatible:
* http://kaldi-asr.org/models.html - variety of models from Kaldi - librispeech, aspire, chinese models
* https://github.com/daanzu/kaldi-active-grammar/blob/master/docs/models.md - Big dictation models
* http://zamia-speech.org/asr/ - German and English model from Zamia
* https://github.com/pguyot/zamia-speech/releases - French models for Zamia
* https://github.com/opensource-spraakherkenning-nl/Kaldi_NL - Dutch model
* https://montreal-forced-aligner.readthedocs.io/en/latest/pretrained_models.html (GMM models, not compatible but might be still useful)
* https://github.com/goodatlas/zeroth - Korean Kaldi (just a recipe and data to train)
* https://github.com/undertheseanlp/automatic_speech_recognition - Vietnamese Kaldi project
### Vietnamese
## Training your own model
You can train your model with Kaldi toolkit. The training is pretty standard - you need tdnn nnet3 model with ivectors. You can
check mini_librispeech recipe for details. Some notes on training:
* For smaller mobile models watch number of parameters
* Train the model without pitch. It might be helpful for small amount of data, but for large database it doesn't give the advantage
but complicates the processing and increases response time.
* Train ivector of dim 30 instead of standard 100 to save memory of mobile models.
## Model structure
Once you trained the model arrange the files according to the following layout (see en-us-aspire for details):
* `am/final.mdl` - acoustic model
* `conf/mfcc.conf` - mfcc config file. Make sure you take mfcc_hires.conf version if you are using hires model (most external ones)
* `conf/model.conf` - provide default decoding beams and silence phones. you have to create this file yourself, it is not present in kaldi model
* `ivector/final.dubm` - take ivector files from ivector extractor
* `ivector/final.ie`
* `ivector/final.mat`
* `ivector/splice.conf`
* `ivector/global_cmvn.stats`
* `ivector/online_cmvn.conf`
* `graph/phones/word_boundary.int` - from the graph
* `graph/HCLG.fst` - this is the decoding graph, if you are not using lookahead
* `graph/HCLr.fst` - use Gr.fst and HCLr.fst instead of one big HCLG.fst if you want to run rescoring
* `graph/Gr.fst`
* `graph/phones.txt` - from the graph
* `graph/words.txt` - from the graph
* `rescore/G.carpa` - carpa rescoring is optional but helpful in big models. Usually located inside data/lang_test_rescore
* `rescore/G.fst` - also optional if you want to use rescoring
| Model | Size | Accuracy | Notes |
|-----------------------------------------------------------------------------------------------------------|-------|------------|----------------------------------------------------------------------------------------------|
| [alphacep-model-android-vn-0.3](http://alphacephei.com/kaldi/alphacep-model-android-vn-0.3.tar.gz) | 32M | TBD | Lightweight wideband model for Android and RPi |
+8 -8
View File
@@ -50,16 +50,16 @@ clean:
$(RM) *.so *_wrap.cc *_wrap.o test/*.class
$(RM) -r org model-en
model-en:
wget https://github.com/alphacep/kaldi-android-demo/releases/download/2020-01/alphacep-model-android-en-us-0.3.tar.gz
tar xf alphacep-model-android-en-us-0.3.tar.gz && rm alphacep-model-android-en-us-0.3.tar.gz
mv alphacep-model-android-en-us-0.3 model-en
model:
wget https://alphacephei.com/kaldi/models/vosk-model-small-en-us-0.3.zip
unzip vosk-model-small-en-us-0.3.zip && rm vosk-model-small-en-us-0.3.zip
mv vosk-model-small-en-us-0.3 model
model-spk:
wget https://github.com/alphacep/kaldi-android-demo/releases/download/2020-01/alphacep-spk-model-0.3.tar.gz
tar xf alphacep-spk-model-0.3.tar.gz && rm alphacep-spk-model-0.3.tar.gz
mv alphacep-spk-model-0.3 model-spk
wget https://alphacephei.com/kaldi/models/vosk-model-spk-0.3.zip
unzip vosk-model-spk-0.3.zip && rm vosk-model-spk-0.3.zip
mv vosk-model-spk-0.3 model-spk
run: model-en model-spk
run: model model-spk
javac test/*.java org/kaldi/*.java
java -Djava.library.path=. -cp . test.DecoderTest
+3
View File
@@ -11,6 +11,7 @@ import java.nio.*;
import org.kaldi.KaldiRecognizer;
import org.kaldi.Model;
import org.kaldi.SpkModel;
import org.kaldi.Vosk;
public class DecoderTest {
static {
@@ -18,6 +19,8 @@ public class DecoderTest {
}
public static void main(String args[]) throws IOException {
Vosk.SetLogLevel(-10);
FileInputStream ais = new FileInputStream(new File("../python/example/test.wav"));
Model model = new Model("model");
SpkModel spkModel = new SpkModel("model-spk");
+2 -2
View File
@@ -4,7 +4,7 @@ from vosk import Model, KaldiRecognizer
import os
if not os.path.exists("model"):
print ("Please download the model from https://github.com/alphacep/kaldi-android-demo/releases and unpack as 'model' in the current folder.")
print ("Please download the model from https://github.com/alphacep/vosk-api/blob/master/doc/models.md and unpack as 'model' in the current folder.")
exit (1)
import pyaudio
@@ -17,7 +17,7 @@ model = Model("model")
rec = KaldiRecognizer(model, 16000)
while True:
data = stream.read(2000)
data = stream.read(4000)
if len(data) == 0:
break
if rec.AcceptWaveform(data):
+5 -3
View File
@@ -1,12 +1,14 @@
#!/usr/bin/python3
from vosk import Model, KaldiRecognizer
from vosk import Model, KaldiRecognizer, SetLogLevel
import sys
import os
import wave
SetLogLevel(0)
if not os.path.exists("model"):
print ("Please download the model from https://github.com/alphacep/kaldi-android-demo/releases and unpack as 'model' in the current folder.")
print ("Please download the model from https://github.com/alphacep/vosk-api/blob/master/doc/models.md and unpack as 'model' in the current folder.")
exit (1)
wf = wave.open(sys.argv[1], "rb")
@@ -18,7 +20,7 @@ model = Model("model")
rec = KaldiRecognizer(model, wf.getframerate())
while True:
data = wf.readframes(1000)
data = wf.readframes(4000)
if len(data) == 0:
break
if rec.AcceptWaveform(data):
+3 -3
View File
@@ -11,11 +11,11 @@ model_path = "model"
spk_model_path = "model-spk"
if not os.path.exists(model_path):
print ("Please download the model from https://github.com/alphacep/kaldi-android-demo/releases and unpack as {} in the current folder.".format(model_path))
print ("Please download the model from https://github.com/alphacep/vosk-api/blob/master/doc/models.md and unpack as {} in the current folder.".format(model_path))
exit (1)
if not os.path.exists(spk_model_path):
print ("Please download the speaker model from https://github.com/alphacep/kaldi-android-demo/releases and unpack as {} in the current folder.".format(spk_model_path))
print ("Please download the speaker model from https://github.com/alphacep/vosk-api/blob/master/doc/models.md and unpack as {} in the current folder.".format(spk_model_path))
exit (1)
wf = wave.open(sys.argv[1], "rb")
@@ -38,7 +38,7 @@ def cosine_dist(x, y):
return 1 - np.dot(nx, ny) / np.linalg.norm(nx) / np.linalg.norm(ny)
while True:
data = wf.readframes(1000)
data = wf.readframes(4000)
if len(data) == 0:
break
if rec.AcceptWaveform(data):
+2 -2
View File
@@ -6,7 +6,7 @@ import json
import os
if not os.path.exists("model"):
print ("Please download the model from https://github.com/alphacep/kaldi-android-demo/releases and unpack as 'model' in the current folder.")
print ("Please download the model from https://github.com/alphacep/vosk-api/blob/master/doc/models.md and unpack as 'model' in the current folder.")
exit (1)
@@ -22,7 +22,7 @@ wf = open(sys.argv[1], "rb")
wf.read(44) # skip header
while True:
data = wf.read(2000)
data = wf.read(4000)
if len(data) == 0:
break
if rec.AcceptWaveform(data):
+2 -2
View File
@@ -6,7 +6,7 @@ import os
import wave
if not os.path.exists("model"):
print ("Please download the model from https://github.com/alphacep/kaldi-android-demo/releases and unpack as 'model' in the current folder.")
print ("Please download the model from https://github.com/alphacep/vosk-api/blob/master/doc/models.md and unpack as 'model' in the current folder.")
exit (1)
wf = wave.open(sys.argv[1], "rb")
@@ -19,7 +19,7 @@ model = Model("model")
rec = KaldiRecognizer(model, wf.getframerate(), "zero oh one two three four five six seven eight nine")
while True:
data = wf.readframes(1000)
data = wf.readframes(4000)
if len(data) == 0:
break
if rec.AcceptWaveform(data):
+1 -1
View File
@@ -7,7 +7,7 @@ with open("README.md", "r") as fh:
setuptools.setup(
name="vosk", # Replace with your own username
version="0.3.6",
version="0.3.7",
author="Alpha Cephei Inc",
author_email="contact@alphacephei.com",
description="API for Kaldi and Vosk",
+2 -1
View File
@@ -1 +1,2 @@
from .vosk import KaldiRecognizer, Model, SpkModel
from .vosk import KaldiRecognizer, Model, SpkModel, SetLogLevel
+69 -5
View File
@@ -45,17 +45,79 @@ static FstRegisterer<NGramFst<StdArc>> NGramFst_StdArc_registerer;
#ifdef __ANDROID__
#include <android/log.h>
static void AndroidLogHandler(const LogMessageEnvelope &env, const char *message)
static void KaldiLogHandler(const LogMessageEnvelope &env, const char *message)
{
__android_log_print(ANDROID_LOG_VERBOSE, "KaldiDemo", message, 1);
int priority;
if (env.severity > GetVerboseLevel())
return;
if (env.severity > LogMessageEnvelope::kInfo) {
priority = ANDROID_LOG_VERBOSE;
} else {
switch (env.severity) {
case LogMessageEnvelope::kInfo:
priority = ANDROID_LOG_INFO;
break;
case LogMessageEnvelope::kWarning:
priority = ANDROID_LOG_WARN;
break;
case LogMessageEnvelope::kAssertFailed:
priority = ANDROID_LOG_FATAL;
break;
case LogMessageEnvelope::kError:
default: // If not the ERROR, it still an error!
priority = ANDROID_LOG_ERROR;
break;
}
}
std::stringstream full_message;
full_message << env.func << "():" << env.file << ':'
<< env.line << ") " << message;
__android_log_print(priority, "VoskAPI", "%s", full_message.str().c_str());
}
#else
static void KaldiLogHandler(const LogMessageEnvelope &env, const char *message)
{
if (env.severity > GetVerboseLevel())
return;
// Modified default Kaldi logging so we can disable LOG messages.
std::stringstream full_message;
if (env.severity > LogMessageEnvelope::kInfo) {
full_message << "VLOG[" << env.severity << "] (";
} else {
switch (env.severity) {
case LogMessageEnvelope::kInfo:
full_message << "LOG (";
break;
case LogMessageEnvelope::kWarning:
full_message << "WARNING (";
break;
case LogMessageEnvelope::kAssertFailed:
full_message << "ASSERTION_FAILED (";
break;
case LogMessageEnvelope::kError:
default: // If not the ERROR, it still an error!
full_message << "ERROR (";
break;
}
}
// Add other info from the envelope and the message text.
full_message << "VoskAPI" << ':'
<< env.func << "():" << env.file << ':'
<< env.line << ") " << message;
// Print the complete message to stderr.
full_message << "\n";
std::cerr << full_message.str();
}
#endif
Model::Model(const char *model_path) : model_path_str_(model_path) {
#ifdef __ANDROID__
SetLogHandler(AndroidLogHandler);
#endif
SetLogHandler(KaldiLogHandler);
struct stat buffer;
string am_path = model_path_str_ + "/am/final.mdl";
@@ -87,6 +149,8 @@ void Model::ConfigureV1()
"--endpoint.rule2.min-trailing-silence=0.5",
"--endpoint.rule3.min-trailing-silence=1.0",
"--endpoint.rule4.min-trailing-silence=2.0",
"--print-args=false",
};
kaldi::ParseOptions po("");
+7
View File
@@ -1,4 +1,8 @@
#if SWIGPYTHON
%module(package="vosk", "threads"=1) vosk
#else
%module Vosk
#endif
%include <typemaps.i>
@@ -113,3 +117,6 @@ typedef struct {} KaldiRecognizer;
return vosk_recognizer_final_result($self);
}
}
%rename(SetLogLevel) vosk_set_log_level;
void vosk_set_log_level(int level);
+5
View File
@@ -90,3 +90,8 @@ void vosk_recognizer_free(VoskRecognizer *recognizer)
{
delete (KaldiRecognizer *)(recognizer);
}
void vosk_set_log_level(int log_level)
{
SetVerboseLevel(log_level);
}
+8
View File
@@ -41,6 +41,14 @@ const char *vosk_recognizer_partial_result(VoskRecognizer *recognizer);
const char *vosk_recognizer_final_result(VoskRecognizer *recognizer);
void vosk_recognizer_free(VoskRecognizer *recognizer);
/**
* Set log level for Kaldi messages
* 0 - default value to print info and error messages but no debug
* less than 0 - don't print info messages
* greather than 0 - more verbose mode
*/
void vosk_set_log_level(int log_level);
#ifdef __cplusplus
}
#endif