mirror of
https://github.com/k2-fsa/sherpa-onnx.git
synced 2026-11-10 21:11:03 +08:00
3.8 KiB
3.8 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
What this is
sherpa-onnx: offline/streaming ASR, TTS, VAD, speaker diarization/ID, KWS, punctuation, speech enhancement, etc., running on ONNX Runtime (plus RKNN/QNN/Axera/Ascend/etc. backends). The core is C++; every other language binding wraps it.
Build
CMake project; the root CMakeLists.txt options are SHERPA_ONNX_* (e.g. SHERPA_ONNX_ENABLE_TESTS, SHERPA_ONNX_ENABLE_PYTHON, SHERPA_ONNX_ENABLE_GPU, SHERPA_ONNX_ENABLE_TTS, SHERPA_ONNX_ENABLE_SPEAKER_DIARIZATION, BUILD_SHARED_LIBS). build/ is the local build dir (tests and Python are OFF in it by default).
mkdir -p build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DSHERPA_ONNX_ENABLE_TESTS=ON ..
make -j$(nproc)
- Cross-compile / platform builds are the top-level
build-*.shscripts (android, ios, wasm, aarch64, riscv64, rknn, ...). - Python wheel:
python setup.py install(orpip install .);SHERPA_ONNX_CMAKE_ARGSpasses extra cmake flags. - Tests are GoogleTest, built only with
SHERPA_ONNX_ENABLE_TESTS=ON. Each*-test.ccbecomes its own executable named after the file, registered with ctest. Add new test files tosherpa_onnx_test_srcsinsherpa-onnx/csrc/CMakeLists.txt.cd build && ctest -R circular-buffer-test --output-on-failure # single test ./bin/circular-buffer-test --gtest_filter='Suite.Case' # single case (check build/bin or build/sherpa-onnx/csrc) - Python tests:
sherpa-onnx/python/tests/(pytest style; some need downloaded models). - Lint: cpplint 2.0.2 via
./scripts/check_style_cpplint.sh(no arg = last commit,1= uncommitted changes,2= whole repo). Config inCPPLINT.cfg; CI is.github/workflows/style_check.yaml. Headers useSHERPA_ONNX_CSRC_<NAME>_H_guards and a// sherpa-onnx/csrc/<file>+ copyright header comment.
Architecture
sherpa-onnx/csrc/— all core C++ (~600 files), plus the CLI executables (sherpa-onnx.cc,sherpa-onnx-offline.cc,*-microphone*.cc, websocket servers, ...).csrc/README.mdlists the binaries.- Language bindings are thin layers over core, and a new config field/feature usually has to be mirrored in each:
sherpa-onnx/c-api(C API +cxx-api),sherpa-onnx/python/csrc(pybind11) andpython/sherpa_onnx,sherpa-onnx/jni+java-api+kotlin-api,rust,pascal-api, and the wrappers inswift-api-examples,dotnet-examples,go-api-examples,nodejs-addon-examples,flutter,dart-api-examples,harmony-os,wasm. Each language has a*-examplesdir that CI tests. - Model-dispatch pattern: public facades (
OnlineRecognizer,OfflineRecognizer,OfflineTts, ...) hold a*Implcreated by*Impl::Create(config)in*-impl.cc, which inspects the config / model metadata to pick a concrete implementation (offline-recognizer-<model>-impl.h,online-recognizer-{transducer,ctc,paraformer}-impl.h). Each model family has its own*-model.{h,cc},*-model-config.{h,cc}and*-model-meta-data.h. Adding a model = new model + config + impl + registration in the dispatcher +sourcesincsrc/CMakeLists.txt+Configplumbing in every binding. - Configs are structs with
Register(ParseOptions*),Validate(),ToString(); CLI flags come fromRegister, and bindings expose the same fields. - VAD:
VadModel(silero-vad-model,ten-vad-model) behindVoiceActivityDetector, which segments speech using aCircularBuffer. cmake/holds per-dependency fetch scripts (onnxruntime, kaldi-native-fbank, etc.); dependencies are downloaded at configure time.scripts/contains per-model export/conversion scripts (not part of the build);.github/workflows/has the large CI matrix (per-platform builds, per-language tests, model export).