跳到正文

FunASR Prebuilt SDK (fanasr-onnx)

fanasr-onnx 是为 AI Voice Platform 自研构建的 FunASR C++ 预编译运行时 SDK 资产仓库(对标 onnx-platform/sherpa-onnx)。


1. 架构目标

在构建基于 FunASR 的上层应用(如 fanasr-asr-offline-serverfanasr-asr-online-server)时,无需在每次编译中重新解析与编译复杂的 OpenFST 模板、Kaldi Fbankyaml-cppglogjieba 源码。

通过将核心推理引擎预先编译为平台专属的动态库(funasr.dll / libfunasr.so)与导入库,两端服务端可在全新 Clean Build 下实现 3~4 秒极速构建,单文件增量编译仅需 1 秒


2. 目录结构

onnx-platform/fanasr-onnx/
├── win_x64/
│   ├── include/                    # C++ 头文件
│   │   ├── funasrruntime.h         # 顶层 C/C++ API (FunASR/FunOffline/FunTpass)
│   │   ├── model.h                 # 模型抽象基类
│   │   ├── vad-model.h             # VAD 模型抽象
│   │   ├── punc-model.h            # 标点模型抽象
│   │   ├── tpass-stream.h          # 2-pass 双流引擎声明
│   │   └── com-define.h            # 常量与枚举定义
│   └── lib/                        # 动态库与导入库
│       ├── funasr.lib / funasr.dll # 核心推理引擎
│       ├── onnxruntime.lib / .dll  # ONNX Runtime 运行时
│       ├── yaml-cpp.dll
│       ├── glog.dll
│       └── gflags_nothreads_static.lib
└── linux_x64/                      # Linux x86_64 预编译包

3. CMakeLists.txt 自动探测与降级规范

上层服务工程的 CMakeLists.txt 统一采用以下探测逻辑:

cmake
# 1. 优先检测 fanasr-onnx 预编译 SDK
find_path(FANASR_ONNX_INCLUDE_DIR NAMES funasrruntime.h
  PATHS "${FANASR_ONNX_ROOT}/include"
  NO_DEFAULT_PATH
)

if (FANASR_ONNX_INCLUDE_DIR)
  # Prebuilt SDK Mode (极速构建模式)
  message(STATUS "Found prebuilt fanasr-onnx SDK at ${FANASR_ONNX_ROOT}")
  target_include_directories(my_service PRIVATE ${FANASR_ONNX_INCLUDE_DIR})
  target_link_libraries(my_service PRIVATE ${FANASR_LIB} ${ONNXRUNTIME_LIB})
else()
  # Fallback to Source Mode (源码降级编译模式)
  message(STATUS "Prebuilt SDK not found, falling back to fanasr-runtime source")
  add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/../fanasr-runtime" fanasr_runtime_build)
endif()

文档与代码在同一仓库维护,现有 Markdown 是唯一内容源。