# lavalphone_asr_demo **Repository Path**: MIKECODE/lavalphone_asr_demo ## Basic Information - **Project Name**: lavalphone_asr_demo - **Description**: 开发者手机ASR应用Demo - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 4 - **Created**: 2025-03-11 - **Last Updated**: 2025-12-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ASR应用 ## 介绍 ASR应用是参考开源项目[https://github.com/k2-fsa/sherpa-onnx](https://github.com/k2-fsa/sherpa-onnx)实现的语音转文本应用,通过onnx运行时运行推理模型获取输出,最后在屏幕显示结果。 源项目不支持开发者手机OH4.1版本,所以本项目基于原项目做了部分改造,目前能在开发者手机一代OH4.1,开发者手机二代的OH4.1和OH5.0版本运行。 ## 效果预览 视频地址:待更新 | 麦克风识别页-模型加载中 | 麦克风识别页-模型加载完成 | 麦克风识别页-实时推理 | 麦克风识别页-停止推理 | | ------------------------------------------------------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | | ![Screenshot_20250311112434368](assets/Screenshot_20250311112434368-20250311112526-pnjg1w9.jpeg) | ![image](assets/image-20250311112539-3nntokl.png) | ![image](assets/image-20250311112549-o7knmw5.png) | ![image](assets/image-20250311112710-jm7nisy.png) | | 文件识别页-模型加载完成 | 文件识别页-选择文件 | 文件识别页-推理中 | 文件识别页-推理完成 | | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | | ![image](assets/image-20250311112956-6z5vgh7.png) | ![image](assets/image-20250311112901-s4w7aag.png) | ![image](assets/image-20250311113104-h7vghrx.png) | ![image](assets/image-20250311112914-se0dbn4.png) | 使用说明 1. 首先打开应用,等待模型初始化。 2. 页面默认停留在麦克风识别页,点击Start,开始实时语音识别 3. 点击Stop停止语音识别 4. 再点击Save recorded audio,可以选择文件保存路径,文件名以.wav结尾。 5. 点击下方From file,切换到从文件识别页,点击`Select .wav file (16kHz),` 6. 选择需要进行语音识别的wav格式音频文件,点击右上角的确认 7. 会返回页面并进行推理 8. 等待推理完成, ## 具体实现 1. **应用启动与初始化**: * 用户启动应用后,主线程调用 `aboutToAppear` 方法,创建工作线程实例并发送 `init-streaming-asr` 消息请求初始化 ASR 模型。 * 同时,主线程调用 `initMic` 方法初始化麦克风,会检查并请求麦克风权限,若权限获取成功则创建音频捕获器并监听 `readData` 事件。 * 工作线程接收到 `init-streaming-asr` 消息后,调用 `initStreamingAsr` 方法初始化识别器,完成后向主线程发送 `init-streaming-asr-done` 消息,主线程更新按钮状态和提示信息。 2. **从文件进行语音识别**: * 用户点击 “Select .wav file (16kHz)” 按钮,主线程通过文件选择器让用户选择文件。 * 主线程将文件信息通过 `streaming-asr-decode-file` 消息发送给工作线程。 * 工作线程接收到消息后调用 `decodeFile` 方法进行文件解码,完成后将结果通过 `streaming-asr-decode-file-done` 消息发送给主线程,主线程更新识别结果和提示信息。 3. **从麦克风进行语音识别**: * 用户点击 “Start” 按钮,主线程向工作线程发送 `streaming-asr-decode-mic-start` 消息,同时启动音频捕获器。 * 音频捕获器触发 `readData` 事件,主线程调用 `micCallback` 方法处理音频数据,并将数据通过 `streaming-asr-decode-mic-samples` 消息发送给工作线程。 * 工作线程接收并处理音频数据,将识别结果通过 `streaming-asr-decode-mic-result` 消息发送给主线程,主线程更新识别结果。 * 用户点击 “Stop” 按钮,主线程向工作线程发送 `streaming-asr-decode-mic-stop` 消息,停止音频捕获器,并启用保存按钮。 4. **保存录制音频**: * 用户点击 “Save recorded audio” 按钮,主线程通过文件选择器让用户选择保存路径,然后将录制的音频数据保存为 WAV 文件。 ## 工程目录 ```cmd └───entry └───src │ sherpa_onnx.har //onnx神经网络运行时 │ oh-package.json5 //依赖配置 └───main │ module.json5 //模块配置 ├───ets │ ├───entryability │ │ EntryAbility.ets //入口类 │ ├───pages │ │ Index.ets //首页 │ │ Permission.ets //申请权限工具类 │ └───workers │ StreamingAsrWorker.ets //Worker线程操作 └───resources ├───base ├───en_US │───zh_CN └───rawfile └───sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20 //onnx神经网络模型文件 ``` ## 相关权限 允许应用使用麦克风:ohos.permission.MICROPHONE 允许保存文件到Dolwnload文件夹:ohos.permission.FILE_ACCESS_MANAGER ## 依赖 依赖sherpa_onnx.har ## 约束与限制 1. 本示例仅支持标准系统上运行,支持设备:开发者手机一代,开发者手机二代; 2. 本示例为stage模型,已适配API version 11版本SDK,SDK版本号(API Version 11 Release),镜像版本号(4.1.9.2)。 3. 本示例需要使用DevEco Studio 版本号(4.1 Release)才可编译运行。 ## 下载 下载代码请复制以下命令到终端执行 ``` git clone https://gitee.com/MIKECODE/lavalphone_asr_demo.git ```