- 新增 SenseVoiceEngine: 专用 SenseVoice ONNX 模型推理引擎 - 新增 SenseVoiceFeatures: Fbank 特征提取 + LFR 拼接 + CMVN 归一化 - 80-dim Mel 滤波器组 + 对数压缩 - LFR (Low Frame Rate): window_size=7, window_shift=6 → 560-dim - CMVN: neg_mean / inv_stddev 从模型元数据自动提取 - 新增 SenseVoiceTokenizer: 加载 tokens.txt 词表,BPE 解码 - 新增 CTC 贪婪解码: 去除重复 token 和空白符 - 配置页面新增词表路径选择 - STT 测试页面和文件转写页面切换至 SenseVoiceEngine - 更新 CMakeLists.txt 包含所有新增源文件 - 模型: /home/alvin/Documents/SenseVoice-Small/sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17/model.onnx - 语言支持: 中文/英语/日语/韩语/粤语 自动检测 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
163 lines
4.3 KiB
CMake
163 lines
4.3 KiB
CMake
cmake_minimum_required(VERSION 3.20)
|
|
project(impress_voice_input
|
|
VERSION 0.1.0
|
|
LANGUAGES CXX
|
|
DESCRIPTION "基于 ONNX 的实时语音转文本输入法"
|
|
)
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
|
|
# 默认使用 Release 带调试信息
|
|
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
|
set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Build type" FORCE)
|
|
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
|
|
"Debug" "Release" "RelWithDebInfo" "MinSizeRel")
|
|
endif()
|
|
|
|
set(CMAKE_AUTOMOC ON)
|
|
set(CMAKE_AUTORCC ON)
|
|
set(CMAKE_AUTOUIC ON)
|
|
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
|
|
# ============================================================================
|
|
# 依赖查找
|
|
# ============================================================================
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
|
|
|
# Qt 6
|
|
find_package(Qt6 REQUIRED COMPONENTS Core Widgets Concurrent Network)
|
|
qt_standard_project_setup()
|
|
|
|
# ONNX Runtime
|
|
include(dependencies)
|
|
|
|
# ============================================================================
|
|
# 源文件
|
|
# ============================================================================
|
|
set(SOURCES
|
|
src/main.cpp
|
|
|
|
# App
|
|
src/app/application.cpp
|
|
src/app/config_manager.cpp
|
|
|
|
# Core
|
|
src/core/stt_engine.cpp
|
|
src/core/sense_voice_engine.cpp
|
|
src/core/sense_voice_features.cpp
|
|
src/core/sense_voice_tokenizer.cpp
|
|
src/core/mel_spectrogram.cpp
|
|
src/core/whisper_tokenizer.cpp
|
|
src/core/audio_processor.cpp
|
|
src/core/vad.cpp
|
|
|
|
# Audio
|
|
src/audio/audio_capture.cpp
|
|
src/audio/audio_decoder.cpp
|
|
src/audio/audio_ring_buffer.cpp
|
|
|
|
# UI
|
|
src/ui/main_window.cpp
|
|
src/ui/stt_test_page.cpp
|
|
src/ui/file_transcribe_page.cpp
|
|
src/ui/settings_page.cpp
|
|
src/ui/widgets/audio_waveform.cpp
|
|
src/ui/widgets/text_output.cpp
|
|
src/ui/widgets/progress_panel.cpp
|
|
|
|
# Utils
|
|
src/utils/logger.cpp
|
|
src/utils/timer.cpp
|
|
src/utils/string_utils.cpp
|
|
)
|
|
|
|
set(HEADERS
|
|
src/app/application.h
|
|
src/app/config_manager.h
|
|
|
|
src/core/stt_engine.h
|
|
src/core/sense_voice_engine.h
|
|
src/core/sense_voice_features.h
|
|
src/core/sense_voice_tokenizer.h
|
|
src/core/sense_voice_cmvn.h
|
|
src/core/mel_spectrogram.h
|
|
src/core/whisper_tokenizer.h
|
|
src/core/audio_processor.h
|
|
src/core/vad.h
|
|
|
|
src/audio/audio_capture.h
|
|
src/audio/audio_decoder.h
|
|
src/audio/audio_ring_buffer.h
|
|
|
|
src/ui/main_window.h
|
|
src/ui/stt_test_page.h
|
|
src/ui/file_transcribe_page.h
|
|
src/ui/settings_page.h
|
|
src/ui/widgets/audio_waveform.h
|
|
src/ui/widgets/text_output.h
|
|
src/ui/widgets/progress_panel.h
|
|
|
|
src/utils/logger.h
|
|
src/utils/timer.h
|
|
src/utils/string_utils.h
|
|
)
|
|
|
|
# ============================================================================
|
|
# 可执行文件
|
|
# ============================================================================
|
|
add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS})
|
|
|
|
target_include_directories(${PROJECT_NAME} PRIVATE
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src
|
|
${CMAKE_CURRENT_SOURCE_DIR}/third_party
|
|
${ONNXRUNTIME_INCLUDE_DIRS}
|
|
${PORTAUDIO_INCLUDE_DIRS}
|
|
${DR_LIBS_INCLUDE_DIR}
|
|
${NLOHMANN_JSON_INCLUDE_DIR}
|
|
)
|
|
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE
|
|
Qt6::Core
|
|
Qt6::Widgets
|
|
Qt6::Concurrent
|
|
Qt6::Network
|
|
${ONNXRUNTIME_LIBRARIES}
|
|
${PORTAUDIO_LIBRARIES}
|
|
pthread
|
|
)
|
|
|
|
target_compile_options(${PROJECT_NAME} PRIVATE
|
|
$<$<CXX_COMPILER_ID:GNU,Clang>:-Wall -Wextra -Wpedantic>
|
|
$<$<CXX_COMPILER_ID:MSVC>:/W4>
|
|
)
|
|
|
|
# ============================================================================
|
|
# 资源文件
|
|
# ============================================================================
|
|
# 样式表
|
|
qt_add_resources(${PROJECT_NAME} "styles"
|
|
PREFIX "/"
|
|
FILES
|
|
src/ui/resources/styles/main.qss
|
|
)
|
|
|
|
# ============================================================================
|
|
# 安装
|
|
# ============================================================================
|
|
install(TARGETS ${PROJECT_NAME}
|
|
RUNTIME DESTINATION bin
|
|
BUNDLE DESTINATION .
|
|
)
|
|
|
|
# ============================================================================
|
|
# 测试
|
|
# ============================================================================
|
|
option(BUILD_TESTS "构建单元测试" OFF)
|
|
if(BUILD_TESTS)
|
|
enable_testing()
|
|
add_subdirectory(tests)
|
|
endif()
|