New package: vosk-api-0.3.43

This commit is contained in:
John Gebbie 2022-10-28 17:57:26 +01:00 committed by Michal Vasilek
parent f2f6fceb0b
commit c3112e0bd1
10 changed files with 387 additions and 0 deletions

View File

@ -4214,3 +4214,4 @@ libtracecmd.so.1 libtracecmd-3.1.2_1
libkshark.so.2 libkshark-2.1.1_1
libcpp-hocon.so.0.3.0 cpp-hocon-0.3.0_5
libfst.so.25 openfst-1.8.2_1
libvosk.so vosk-api-0.3.43_1

View File

@ -0,0 +1,45 @@
https://github.com/alphacep/kaldi/pull/5
From 5f70761ecdf497cf55ca730187ab6ab38589ef0f Mon Sep 17 00:00:00 2001
From: John Gebbie <me@johngebbie.com>
Date: Sat, 3 Dec 2022 17:59:32 +0000
Subject: [PATCH] Add OPENBLAS_NO_F2C math library option
---
src/configure | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/src/configure b/src/configure
index ed62daa5017..1d78489d55e 100755
--- a/src/configure
+++ b/src/configure
@@ -834,7 +834,7 @@ auto_lib= # Deduced lib name, used when $MATHLIB is not set.
# Validate the (optionally) provided MATHLIB value.
case $MATHLIB in
- ''|ATLAS|CLAPACK|MKL|OPENBLAS|OPENBLAS_CLAPACK) : ;;
+ ''|ATLAS|CLAPACK|MKL|OPENBLAS|OPENBLAS_CLAPACK|OPENBLAS_NO_F2C) : ;;
*) failure "Unknown --mathlib='${MATHLIB}'. Supported libs: ATLAS CLAPACK MKL OPENBLAS" ;;
esac
@@ -1301,7 +1301,7 @@ or try another math library, e.g. --mathlib=OPENBLAS (Kaldi may be slower)."
esac >> kaldi.mk
echo "Successfully configured for Linux with OpenBLAS from $OPENBLASROOT"
- elif [ "$MATHLIB" == "OPENBLAS_CLAPACK" ]; then
+ elif [ "$MATHLIB" == "OPENBLAS_CLAPACK" ] || [ "$MATHLIB" == "OPENBLAS_NO_F2C" ]; then
if [[ ! $OPENBLASROOT ]]; then
# Either the user specified --mathlib=OPENBLAS or we've autodetected the
# system where OpenBLAS is the preferred option (the parser for
@@ -1345,7 +1345,11 @@ or try another math library, e.g. --mathlib=OPENBLAS (Kaldi may be slower)."
OPENBLASINCDIR="/usr/include"
fi
echo "Your math library seems to be OpenBLAS from $OPENBLASROOT. Configuring appropriately."
- OPENBLASLIBS="-L$OPENBLASLIBDIR -l:libopenblas.a -l:libblas.a -l:liblapack.a -l:libf2c.a"
+ if [ "$MATHLIB" == "OPENBLAS_CLAPACK" ]; then
+ OPENBLASLIBS="-L$OPENBLASLIBDIR -l:libopenblas.a -l:libblas.a -l:liblapack.a -l:libf2c.a"
+ else
+ OPENBLASLIBS="-L$OPENBLASLIBDIR -l:libopenblas.a -l:libblas.a -l:liblapack.a"
+ fi
echo "OPENBLASINC = $OPENBLASINCDIR" >> kaldi.mk
echo "OPENBLASLIBS = $OPENBLASLIBS" >> kaldi.mk
echo >> kaldi.mk

View File

@ -0,0 +1 @@
-Np1 -d kaldi

View File

@ -0,0 +1,55 @@
--- a/src/matrix/cblas-wrappers.h
+++ b/src/matrix/cblas-wrappers.h
@@ -383,10 +383,10 @@ inline void mul_elements(
// add clapack here
#if !defined(HAVE_ATLAS)
inline void clapack_Xtptri(KaldiBlasInt *num_rows, float *Mdata, KaldiBlasInt *result) {
- stptri_(const_cast<char *>("U"), const_cast<char *>("N"), num_rows, Mdata, result);
+ stptri_(const_cast<char *>("U"), const_cast<char *>("N"), num_rows, Mdata, result, 1, 1);
}
inline void clapack_Xtptri(KaldiBlasInt *num_rows, double *Mdata, KaldiBlasInt *result) {
- dtptri_(const_cast<char *>("U"), const_cast<char *>("N"), num_rows, Mdata, result);
+ dtptri_(const_cast<char *>("U"), const_cast<char *>("N"), num_rows, Mdata, result, 1, 1);
}
//
inline void clapack_Xgetrf2(KaldiBlasInt *num_rows, KaldiBlasInt *num_cols,
@@ -420,7 +420,7 @@ inline void clapack_Xgesvd(char *v, char *u, KaldiBlasInt *num_cols,
sgesvd_(v, u,
num_cols, num_rows, Mdata, stride,
sv, Vdata, vstride, Udata, ustride,
- p_work, l_work, result);
+ p_work, l_work, result, 1, 1);
}
inline void clapack_Xgesvd(char *v, char *u, KaldiBlasInt *num_cols,
KaldiBlasInt *num_rows, double *Mdata, KaldiBlasInt *stride,
@@ -430,25 +430,25 @@ inline void clapack_Xgesvd(char *v, char *u, KaldiBlasInt *num_cols,
dgesvd_(v, u,
num_cols, num_rows, Mdata, stride,
sv, Vdata, vstride, Udata, ustride,
- p_work, l_work, result);
+ p_work, l_work, result, 1, 1);
}
//
void inline clapack_Xsptri(KaldiBlasInt *num_rows, float *Mdata,
KaldiBlasInt *ipiv, float *work, KaldiBlasInt *result) {
- ssptri_(const_cast<char *>("U"), num_rows, Mdata, ipiv, work, result);
+ ssptri_(const_cast<char *>("U"), num_rows, Mdata, ipiv, work, result, 1);
}
void inline clapack_Xsptri(KaldiBlasInt *num_rows, double *Mdata,
KaldiBlasInt *ipiv, double *work, KaldiBlasInt *result) {
- dsptri_(const_cast<char *>("U"), num_rows, Mdata, ipiv, work, result);
+ dsptri_(const_cast<char *>("U"), num_rows, Mdata, ipiv, work, result, 1);
}
//
void inline clapack_Xsptrf(KaldiBlasInt *num_rows, float *Mdata,
KaldiBlasInt *ipiv, KaldiBlasInt *result) {
- ssptrf_(const_cast<char *>("U"), num_rows, Mdata, ipiv, result);
+ ssptrf_(const_cast<char *>("U"), num_rows, Mdata, ipiv, result, 1);
}
void inline clapack_Xsptrf(KaldiBlasInt *num_rows, double *Mdata,
KaldiBlasInt *ipiv, KaldiBlasInt *result) {
- dsptrf_(const_cast<char *>("U"), num_rows, Mdata, ipiv, result);
+ dsptrf_(const_cast<char *>("U"), num_rows, Mdata, ipiv, result, 1);
}
#else
inline void clapack_Xgetrf(MatrixIndexT num_rows, MatrixIndexT num_cols,

View File

@ -0,0 +1 @@
-Np1 -d kaldi

View File

@ -0,0 +1,168 @@
diff --git a/src/base/kaldi-types.h b/src/base/kaldi-types.h
index 7ebf4f853..c376604a4 100644
--- a/src/base/kaldi-types.h
+++ b/src/base/kaldi-types.h
@@ -39,24 +39,21 @@ typedef float BaseFloat;
// we find in the future lacks stdint.h
#include <stdint.h>
-// for discussion on what to do if you need compile kaldi
-// without OpenFST, see the bottom of this this file
-#include <fst/types.h>
+#include <cstdlib> // for ssize_t.
+#include <cstdint> // for ?int*_t.
-namespace kaldi {
- using ::int16;
- using ::int32;
- using ::int64;
- using ::uint16;
- using ::uint32;
- using ::uint64;
- typedef float float32;
- typedef double double64;
-} // end namespace kaldi
+using int8 = int8_t;
+using int16 = int16_t;
+using int32 = int32_t;
+using int64 = int64_t;
+
+using uint8 = uint8_t;
+using uint16 = uint16_t;
+using uint32 = uint32_t;
+using uint64 = uint64_t;
// In a theoretical case you decide compile Kaldi without the OpenFST
// comment the previous namespace statement and uncomment the following
-/*
namespace kaldi {
typedef int8_t int8;
typedef int16_t int16;
@@ -70,6 +67,5 @@ namespace kaldi {
typedef float float32;
typedef double double64;
} // end namespace kaldi
-*/
#endif // KALDI_BASE_KALDI_TYPES_H_
diff --git a/src/configure b/src/configure
index c74d67af8..84286da01 100755
--- a/src/configure
+++ b/src/configure
@@ -929,7 +929,7 @@ fi
OPENFST_VER=${OPENFST_VER:-$(grep 'PACKAGE_VERSION' $FSTROOT/Makefile | sed -e 's:.*= ::')}
OPENFST_VER_NUM=$(echo $OPENFST_VER | sed 's/\./ /g' | xargs printf "%d%02d%02d")
if [ $OPENFST_VER_NUM -lt 10600 ]; then
- failure "OpenFst-$OPENFST_VER is not supported. You need OpenFst >= 1.6.0.)"
+ :
fi
echo "OPENFSTINC = $FSTROOT/include" >> kaldi.mk
if $static_fst ; then
diff --git a/src/fstext/kaldi-fst-io-inl.h b/src/fstext/kaldi-fst-io-inl.h
index f7bb3a7c2..01047919c 100644
--- a/src/fstext/kaldi-fst-io-inl.h
+++ b/src/fstext/kaldi-fst-io-inl.h
@@ -99,7 +99,7 @@ void ReadFstKaldi(std::istream &is, bool binary,
fst->DeleteStates();
string line;
size_t nline = 0;
- string separator = FLAGS_fst_field_separator + "\r\n";
+ string separator = FST_FLAGS_fst_field_separator + "\r\n";
while (std::getline(is, line)) {
nline++;
vector<string> col;
diff --git a/src/fstext/lattice-weight.h b/src/fstext/lattice-weight.h
index 7637c4d1c..2d82c5647 100644
--- a/src/fstext/lattice-weight.h
+++ b/src/fstext/lattice-weight.h
@@ -396,8 +396,8 @@ inline bool ApproxEqual(const LatticeWeightTpl<FloatType> &w1,
template <class FloatType>
inline std::ostream &operator <<(std::ostream &strm, const LatticeWeightTpl<FloatType> &w) {
LatticeWeightTpl<FloatType>::WriteFloatType(strm, w.Value1());
- CHECK(FLAGS_fst_weight_separator.size() == 1);
- strm << FLAGS_fst_weight_separator[0]; // comma by default;
+ CHECK(FST_FLAGS_fst_weight_separator.size() == 1);
+ strm << FST_FLAGS_fst_weight_separator[0]; // comma by default;
// may or may not be settable from Kaldi programs.
LatticeWeightTpl<FloatType>::WriteFloatType(strm, w.Value2());
return strm;
@@ -405,9 +405,9 @@ inline std::ostream &operator <<(std::ostream &strm, const LatticeWeightTpl<Floa
template <class FloatType>
inline std::istream &operator >>(std::istream &strm, LatticeWeightTpl<FloatType> &w1) {
- CHECK(FLAGS_fst_weight_separator.size() == 1);
+ CHECK(FST_FLAGS_fst_weight_separator.size() == 1);
// separator defaults to ','
- return w1.ReadNoParen(strm, FLAGS_fst_weight_separator[0]);
+ return w1.ReadNoParen(strm, FST_FLAGS_fst_weight_separator[0]);
}
@@ -728,8 +728,8 @@ inline CompactLatticeWeightTpl<WeightType, IntType> Divide(const CompactLatticeW
template <class WeightType, class IntType>
inline std::ostream &operator <<(std::ostream &strm, const CompactLatticeWeightTpl<WeightType, IntType> &w) {
strm << w.Weight();
- CHECK(FLAGS_fst_weight_separator.size() == 1);
- strm << FLAGS_fst_weight_separator[0]; // comma by default.
+ CHECK(FST_FLAGS_fst_weight_separator.size() == 1);
+ strm << FST_FLAGS_fst_weight_separator[0]; // comma by default.
for(size_t i = 0; i < w.String().size(); i++) {
strm << w.String()[i];
if (i+1 < w.String().size())
@@ -745,8 +745,8 @@ inline std::istream &operator >>(std::istream &strm, CompactLatticeWeightTpl<Wei
if (strm.fail()) {
return strm;
}
- CHECK(FLAGS_fst_weight_separator.size() == 1);
- size_t pos = s.find_last_of(FLAGS_fst_weight_separator); // normally ","
+ CHECK(FST_FLAGS_fst_weight_separator.size() == 1);
+ size_t pos = s.find_last_of(FST_FLAGS_fst_weight_separator); // normally ","
if (pos == std::string::npos) {
strm.clear(std::ios::badbit);
return strm;
diff --git a/src/fstext/trivial-factor-weight.h b/src/fstext/trivial-factor-weight.h
index d1c679f7f..90bab80db 100644
--- a/src/fstext/trivial-factor-weight.h
+++ b/src/fstext/trivial-factor-weight.h
@@ -390,7 +390,7 @@ class ArcIterator< TrivialFactorWeightFst<A, F> >
template <class A, class F>
inline void TrivialFactorWeightFst<A, F>::InitStateIterator(
StateIteratorData<A> *data) const {
- data->base = fst::make_unique<StateIterator<TrivialFactorWeightFst<A, F> > >(*this);
+ data->base = std::make_unique<StateIterator<TrivialFactorWeightFst<A, F> > >(*this);
}
diff --git a/src/lat/kaldi-lattice.cc b/src/lat/kaldi-lattice.cc
index 648e67115..70fde5acf 100644
--- a/src/lat/kaldi-lattice.cc
+++ b/src/lat/kaldi-lattice.cc
@@ -114,7 +114,7 @@ class LatticeReader {
CompactLattice *cfst = new CompactLattice();
string line;
size_t nline = 0;
- string separator = FLAGS_fst_field_separator + "\r\n";
+ string separator = FST_FLAGS_fst_field_separator + "\r\n";
while (std::getline(is, line)) {
nline++;
vector<string> col;
diff --git a/src/lat/lattice-functions-transition-model.cc b/src/lat/lattice-functions-transition-model.cc
index 6172610dc..a8cd7b7e2 100644
--- a/src/lat/lattice-functions-transition-model.cc
+++ b/src/lat/lattice-functions-transition-model.cc
@@ -248,13 +248,13 @@ bool TestWordAlignedLattice(const WordAlignLatticeLexiconInfo &lexicon_info,
int32 num_paths = 5, seed = Rand(), max_path_length = -1;
BaseFloat delta = 0.2; // some lattices have large costs -> use large delta.
- FLAGS_v = GetVerboseLevel(); // set the OpenFst verbose level to the Kaldi
+ FST_FLAGS_v = GetVerboseLevel(); // set the OpenFst verbose level to the Kaldi
// verbose level.
if (!RandEquivalent(clat, aligned_clat, num_paths, delta, seed, max_path_length)) {
KALDI_WARN << "Equivalence test failed during lattice alignment.";
return false;
}
- FLAGS_v = 0;
+ FST_FLAGS_v = 0;
return (num_err == 0);
}

View File

@ -0,0 +1 @@
-Np1 -d kaldi

View File

@ -0,0 +1,41 @@
https://github.com/alphacep/vosk-api/pull/1215
From 6c28207334bb1281d98a94f799757fdfa8f6b336 Mon Sep 17 00:00:00 2001
From: John Gebbie <me@johngebbie.com>
Date: Sat, 3 Dec 2022 17:53:21 +0000
Subject: [PATCH] Add OPENBLAS_NO_F2C math library option
---
src/Makefile | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/src/Makefile b/src/Makefile
index cd697b15..97654883 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -7,6 +7,7 @@ CUDA_ROOT?=/usr/local/cuda
USE_SHARED?=0
# Math libraries
HAVE_OPENBLAS_CLAPACK?=1
+HAVE_OPENBLAS_NO_F2C?=0
HAVE_MKL?=0
HAVE_ACCELERATE=0
HAVE_CUDA?=0
@@ -80,6 +81,18 @@ ifeq ($(HAVE_OPENBLAS_CLAPACK), 1)
endif
endif
+ifeq ($(HAVE_OPENBLAS_NO_F2C), 1)
+ CFLAGS += -I$(OPENBLAS_ROOT)/include
+ ifeq ($(USE_SHARED), 0)
+ LIBS += \
+ $(OPENBLAS_ROOT)/lib/libopenblas.a \
+ $(OPENBLAS_ROOT)/lib/liblapack.a \
+ $(OPENBLAS_ROOT)/lib/libblas.a
+ else
+ LDFLAGS += -lopenblas -llapack -lblas
+ endif
+endif
+
ifeq ($(HAVE_MKL), 1)
CFLAGS += -DHAVE_MKL=1 -I$(MKL_ROOT)/include
LDFLAGS += -L$(MKL_ROOT)/lib/intel64 -Wl,-rpath=$(MKL_ROOT)/lib/intel64 -lmkl_rt -lmkl_intel_lp64 -lmkl_core -lmkl_sequential

73
srcpkgs/vosk-api/template Normal file
View File

@ -0,0 +1,73 @@
# Template file for 'vosk-api'
pkgname=vosk-api
version=0.3.43
revision=1
create_wrksrc=yes
build_wrksrc="vosk-api-${version}/src"
# Vosk is built with their own vendored version of Kaldi which has no releases
# of its own, so the commit must be determined by the date of the vosk release.
_kaldi_commit=ecb4b47159501ef0d67888633e65b8fc0c1f79d1
build_style=gnu-makefile
make_use_env=yes
make_build_args="KALDI_ROOT=../../kaldi HAVE_OPENBLAS_NO_F2C=1 HAVE_OPENBLAS_CLAPACK=0"
makedepends="blas-devel lapack-devel openblas-devel libgomp-devel openfst-devel"
short_desc="Offline speech recognition toolkit"
maintainer="John Gebbie <me@johngebbie.com>"
license="Apache-2.0"
homepage="https://alphacephei.com/vosk"
distfiles="https://github.com/alphacep/vosk-api/archive/v${version}/vosk-api-${version}.tar.gz
https://github.com/alphacep/kaldi/archive/${_kaldi_commit}.tar.gz
https://alphacephei.com/vosk/models/vosk-model-small-en-us-0.15.zip"
checksum="50fa82bfbfe3fc5be868237c84ac180eb55da0b65b1803bf022899673afda024
39cadd5a351a5513e3e4e1f71ac4b4f018a592a856a55f1d32c159e22e799f64
30f26242c4eb449f948e42cb302dd7a686cb29a3423a8367f99ff41780942498"
shlib_provides="libvosk.so"
patch_args="-Np1 -d ${pkgname}-${version}"
if [ "$XBPS_TARGET_LIBC" = musl ]; then
makedepends+=" libexecinfo-devel"
fi
post_extract() {
mv "kaldi-${_kaldi_commit}" kaldi
cd "${wrksrc}/kaldi/tools"
mkdir -p OpenBLAS/install/lib
ln -sf "${XBPS_CROSS_BASE}/usr/include/openblas" OpenBLAS/install/include
ln -sf "${XBPS_CROSS_BASE}/usr/lib/"* OpenBLAS/install/lib
mkdir -p openfst/include openfst/lib
ln -sf "${XBPS_CROSS_BASE}/usr/include/fst" openfst/include
ln -sf "${XBPS_CROSS_BASE}/usr/lib/"* openfst/lib
}
pre_build() {
cd "${wrksrc}/kaldi/src"
./configure ${CROSS_BUILD:+--host="${XBPS_CROSS_TRIPLET}"} --mathlib=OPENBLAS_NO_F2C --shared --use-cuda=no
make online2 lm rnnlm
}
do_install() {
vinstall vosk_api.h 644 usr/include
vinstall libvosk.so 644 usr/lib
vmkdir usr/share/vosk-models
mv "${wrksrc}/vosk-model-small-en-us-0.15" "${DESTDIR}/usr/share/vosk-models/small-en-us"
}
do_check() {
cd "${wrksrc}/vosk-api-${version}/c"
ln -sf "${wrksrc}/vosk-model-small-en-us-0.15" model
ln -sf ../python/example/test.wav .
ldflags="-fopenmp -L../src -lvosk -ldl -lpthread -Wl,-rpath,../src"
if [ "$XBPS_TARGET_LIBC" = musl ]; then
ldflags+=" -lexecinfo"
fi
make LDFLAGS="$ldflags"
./test_vosk | grep -q '"text" : "zero one eight zero three"'
}
vosk-model-small-en-us_package() {
short_desc="Lightweight english language model"
pkg_install() {
vmove usr/share/vosk-models
}
}

View File

@ -0,0 +1 @@
vosk-api