当前位置: 首页 > news >正文

基于sherpa-onnx 安卓语音识别尝鲜

sherpa-onnx简介

Sherpa:是一个由 K2-FSA 团队 开发的 开源语音处理框架,旨在解决传统语音识别工具(如 Kaldi)在模型部署和跨平台适配中的复杂性问题。它通过整合现代深度学习技术和高效推理引擎,提供了从语音识别、合成到说话人识别的一站式解决方案,尤其在实时性、低资源消耗和跨平台兼容性方面表现突出。

ONNX(Open Neural Network Exchange):即开放神经网络交换格式,是一种用于表示深度学习模型的开放标准文件格式。它由微软、Facebook 和亚马逊等科技公司联合推出,旨在打破不同深度学习框架之间的壁垒,让模型能够在不同的工具和硬件平台之间更便捷地迁移和部署。

所以Sherpa-onnx是一款基于开放神经网络交换格式的实时语音识别引擎。

sherpa-onnx尝鲜

由于笔者主要从事Android开发,所以本次尝鲜也就仅带大家将官方Demo跑起来并看到效果。

1.下载sharpa-onnx源码

下载地址:https://github.com/k2-fsa/sherpa-onnx

或者执行:

git clone https://github.com/k2-fsa/sherpa-onnx

2.导入Demo工程到Android Studio

完成上一步下载源码之后,解压源码,然后进入源码中的:sherpa-onnx-master\sherpa-onnx-master\android目录

内容如下:
在这里插入图片描述

这个里面这些目录基本上都是sharpa-onnx在Android上面的示例,我们本次指导示例使用的是SherpaOnnx,SherpaOnnx的功能是语音转文字(ASR),其余的在成功跑起SherpaOnnx后,可自行了解,配置方式基本上都差不多。 SherpaOnnx导入Android Studio之。

3.更换工程中的类文件

因为SherpaOnnx中默认除MainActivity.kt外其他都是伪类,因此需要找到真的类文件进行替换,好的一点是官方在每个类中标明了使用的类文件的具体位置,有些同学可能看不明白,没关系,跟我操作即可。

sherpa-onnx-master\sherpa-onnx\kotlin-api目录内拷贝下图中红框标记的文件:

在这里插入图片描述

复制到Android Studio中替换demo中当前同名的类文件。

4.下载并导入依赖

官方只提供了macOS和linux下的依赖编译,windows下的没提供,而笔者和大部分小伙伴应该都是windows吧,所以我们也就不费那劲了,直接下载官方已经编译好的依赖文件导入即可,如果有小伙伴对于依赖编译有想法的可以参看官方文档,或者留言我后续再出一遍依赖编译的指导文档。

下载路径:https://github.com/k2-fsa/sherpa-onnx/releases

在这里插入图片描述

我们这里下载sherpa-onnx-v1.11.3-android.tar.bz2,下载完成后可以看到里面有一个jniLibs目录,将这个目录拷贝,复制并替换工程中已经存在的JniLibs目录,当然如果觉得依赖比较大的话,可以自行根据调试平台删除掉不需要的库,如果搞不明白,就直接全部拷到工程即可。

自此,工程的配置就算全部完成了,下面我们看下如何下载模型并导入到工程。

5.下载模型并导入

可能是考虑到sherpa-onnx源码大小,所以demo中既没有上传依赖,也没有上传模型,所以这些都得我们自己下载自行导入,好的一点是官方又很贴心,提供了很多预训练模型供大家下载。

在下载之前我们需要知道要下载那个模型,所以我们的先从demo中查找它加载的是那个模型,因此让我们打开MainActivity。

在这里插入图片描述

在205行也就是我红框标记的这里,通过名称不难看出是获取模型配置,在获取配置时传入一个type参数,这个参数的值为0,大家要记住这个值,待会有用,我们继续看下getModelConfig函数是怎么加载模型配置的。

在这里插入图片描述

这里跳转到了OnlineRecognizer类中,在这里可以看到传入的type就是为了区分加载那个模型,模型名称可以认为就是 “modelDir”, 因为截图有限,大家如果打开的话应该能看到,支持加载的模型很多,我们这里就还是以默认加载模型来进行调试吧。

在MainActivity中的截图中应该有小伙伴也看到了,官方亲切的将模型下载链接已经给出,不过那个链接是总的模型下载地址,当然根据大家需要可选择我下面提供的链接或者demo中的链接下载都可以。

模型下载地址:https://github.com/k2-fsa/sherpa-onnx/releases/tag/asr-models

因为模型很多,所以我们这里直接搜索

在这里插入图片描述

找到我们要下载的模型后,直接下载,根据个人网速,如果过慢的话,可能还需要科学上网,大家自行选择。

待下载完成后,解压,将整个模型目录拷贝到工程的assets根目录,结构如下:

在这里插入图片描述

这一步完成之后,那么我们整个demo的导入就算完成了,接下来就是运行看效果了。

效果截图如下:

在这里插入图片描述

简单试了下,识别速度和准确率还可以,效果还是杠杠的,至此我们sherpa-onnx安卓语音识别尝鲜就圆满结束了,感谢大家的观看。

相关文章:

基于sherpa-onnx 安卓语音识别尝鲜

sherpa-onnx简介 Sherpa:是一个由 K2-FSA 团队 开发的 开源语音处理框架,旨在解决传统语音识别工具(如 Kaldi)在模型部署和跨平台适配中的复杂性问题。它通过整合现代深度学习技术和高效推理引擎,提供了从语音识别、合…...

利用 Python 和 AI 技术创作独特的图像艺术作品

1. 项目目标 生成艺术作品:利用 AI 模型(如 Stable Diffusion)生成具有艺术风格的图像。自定义风格:通过文本提示(prompt)控制图像的艺术风格(如赛博朋克、印象派、超现实主义等)。…...

Web自动化测试的详细流程和步骤

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 Web自动化测试是软件测试中非常重要的一种测试方法,它通过编写脚本来模拟人工操作网页,从而实现对Web应用程序进行自动化测试的过程。为了保…...

记录一个坑关于STM32 ARM Compiler Version

在用 Keil 进行 STM32 开发的时候,一开始下载,下载的 ARM 编译器是 Version6,他就不兼容老的代码,就很抽象。 所以必须要更换编译器。 可以去官网下载编译器 Downloads - Arm Developer ,也可以自己找资源哈&#xff…...

TCP实现多线程远程命令执行

1.上一篇篇代码改进 bind的绑定第一个是对象,其余的都是参数,传给一个类需要this指针,所以有&r 错误地方是智能指针的参数要加&,thread.name()要删除 2.介绍需要用到函数 popen函数 FILE *popen(const char *command, …...

【MySQL】索引特性

文章目录 👉没有索引可能会有什么问题👈👉认识磁盘👈前置知识MySQL 与磁盘磁盘定位扇区结论磁盘随机访问与连续访问MySQL 与磁盘交互基本单位 👉MySQL 的整体轮廓👈👉索引的理解👈建…...

红宝书第四十七讲:Node.js服务器框架解析:Express vs Koa 完全指南

红宝书第四十七讲:Node.js服务器框架解析:Express vs Koa 完全指南 资料取自《JavaScript高级程序设计(第5版)》。 查看总目录:红宝书学习大纲 一、框架定位:HTTP服务器的工具箱 共同功能: 快…...

SDK游戏盾ip可以破解吗

从技术实现和法律合规性角度,​​不建议也不应尝试破解SDK游戏盾的IP防护机制​​。以下是详细分析: ​​一、法律与道德风险​​ ​​违法行为​​ 破解游戏盾的IP防护属于​​非法侵入计算机信息系统​​或​​破坏网络安全​​的行为,可能…...

​​eBay东南亚爆单密码:72小时交付计划如何重构厦门仓+东南亚供应链?​

2024年东南亚电商市场规模预计突破2340亿美元,年复合增长率达18%。eBay最新战略将厦门纳入海外仓核心节点,推出“72小时交付计划”,通过“仓配转”一体化链路,助力中国卖家实现东南亚市场订单履约率提升10%,退货成本降…...

大语言模型

1.当前有哪些主流AI方向 1.1大语言模型方向 OpenAI的GPT语言模型系列,o3等推理模型系列 综合能力强 anthrotic的claude系列,推理预测混合模型 代码能力强 DeepSeek的V系列,R1推理模型 …...

深入理解Java缓冲输入输出流:性能优化的核心武器

在Java应用程序的IO操作中,频繁的磁盘读写或网络传输往往是性能瓶颈的主要来源。JDK提供的缓冲流(Buffered Streams)通过内存缓冲机制,将零碎的IO操作转化为批量处理,成为提升IO效率的关键技术。本文将从设计原理、核心机制到实战技巧,全面解析缓冲流的技术细节。 一、缓…...

AI 对话高效输入指令攻略(一):了解AI对话指令

目录 引 一.认识 AI 对话中的指令基础​ 1.运行原理​ 2.智能体在 AI 对话中的关键角色与运行机制​ 3.智能体的核心任务​ 4.对不同指令的响应差异​ 5.针对不同指令类型的处理方式​ 6.智能体在底层逻辑中的运作​ 二.高效输入指令的底层逻辑​ 1.语义匹配逻辑​ …...

AI大模型从0到1记录学习 数据结构和算法 day19

常用算法 查找算法 二分查找 算法原理 二分查找又称折半查找,适用于有序列表。其利用数据的有序性,每轮缩小一半搜索范围,直至找到目标元素或搜索区间为空为止。 代码实现 def binary_search(arr, target): left, right 0, len(arr) - 1 w…...

Python + Playwright:使用正则表达式增强自动化测试

Python + Playwright:使用正则表达式增强自动化测试 前言一、 为什么选择正则表达式?二、 Playwright 中集成正则表达式:途径与方法三、 实战应用:正则表达式解决典型测试难题场景 1:定位 ID 或 Class 包含动态部分的元素场景 2:验证包含可变数字或文本的提示信息场景 3:…...

构建用户友好的记账体验 - LedgerX交互设计与性能优化实践

构建用户友好的记账体验 - LedgerX交互设计与性能优化实践 发布日期: 2025-04-16 引言 在财务管理应用领域,技术实力固然重要,但最终决定用户留存的往往是日常使用体验。本文作为LedgerX技术博客的第二篇,将深入探讨我们如何通过精心的交互…...

AI赋能PLC(一):三菱FX-3U编程实战初级篇

前言 在工业自动化领域,三菱PLC以其高可靠性、灵活性和广泛的应用场景,成为众多工程师的首选控制设备。然而,传统的PLC编程往往需要深厚的专业知识和经验积累,开发周期长且调试复杂。随着人工智能技术的快速发展,利用…...

人工智能——梯度提升决策树算法

目录 摘要 14 梯度提升决策树 14.1 本章工作任务 14.2 本章技能目标 14.3 本章简介 14.4 编程实战 14.5 本章总结 14.6 本章作业 本章已完结! 摘要 本章实现的工作是:首先采用Python语言读取含有英语成绩、数学成绩以及学生所属类型的样本数据…...

智能家居适老化改造:让科技回归“无感服务”

在老龄化加速与科技飞速发展的当下,智能家居适老化改造成为提升老年人生活品质的关键举措。 理想的适老化智能家居,应实现 “无感服务”,即让老年人在无需刻意操作或复杂学习的情况下,自然、流畅地享受科技带来的便利&#xff0c…...

2025年最新Web安全(面试题)

活动发起人小虚竹 想对你说: 这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧&#xff01…...

【linux】命令收集

1. 系统信息 uname -m:显示处理器架构uname -r:显示内核版本arch:显示处理器架构cat /proc/cpuinfo:查看CPU信息cat /proc/meminfo:查看内存使用情况cat /proc/version:显示内核版本date:显示系…...

从零到一:网站设计新手如何快速上手?

从零到一:网站设计新手如何快速上手? 在当今数字化时代,网站已成为企业、个人展示信息、提供服务的重要窗口。对于想要涉足网站设计领域的新手而言,如何快速上手并掌握必要的技能成为首要任务。本文将从基础知识、软件工具、设计…...

API平台(API网关)的API安全保障机制

API安全保障机制是一个复杂而重要的任务,需要综合运用多种技术和策略来确保API的安全性和稳定性。 1.黑名单 将不合法的服务、API及终端加入平台黑名单,限制其访问。支持黑名单的列表展示,且可将内容从黑名单删除。按类型、内容搜索黑名单。…...

【软考】论devops在企业信息系统开发中的应用

摘要: 随着互联网的不断发展,各行各业都在建设自己的企业信息系统,而随着业务的不断升级和复杂化,系统的更新迭代速度越来越快,系统也越来越复杂。对于信息系统开发者,架构师,管理者&#xff0c…...

端、管、云一体化原生安全架构 告别外挂式防护!

面对数字化转型浪潮,企业网络安全风险日益凸显。数据泄露、黑客勒索等事件频发,合规要求加速推进。尽管企业纷纷部署了防病毒、身份认证、文件加密、入侵防护、流量监控等多种安全系统,但分散且孤立的架构非但没有有效抵御风险,反…...

每天记录一道Java面试题---day39

GC如何判断对象可以被回收了 回答重点 引用计数法: - 每个对象由一个引用计数属性,新增一个引用时计数器加1,引用释放时计数减1,计数为0时可以回收。可达性分析法: - 从GC Roots开始向下搜索,搜索所走过的…...

码界奇缘 Java 觉醒 后记 第二十五章 安全结界攻防战 - 从沙箱到模块化

第二十五章:安全结界攻防战 - 从沙箱到模块化 知识具象化场景 陆小柒站在由安全策略文件堆砌的古城墙上,眼前是千疮百孔的沙箱结界。空中漂浮着残缺的SecurityManager符石,远处java.security包化身的青铜守卫正在崩塌: 权限校验…...

【数据结构】励志大厂版·初阶(复习+刷题):线性表(顺序表)

前引:上一篇我们复习了复杂度,今天我们来通过实践回忆我们的线性表知识点,下面将讲解什么是线性表,顺序结构又是什么,知识点简洁精髓,无废话可言,小编会从每个细节讲起,包含头文件的…...

C 语言结构体中的函数指针与 Kotlin 高阶函数的对比

在学习 C 语言的过程中,很多 Java/Kotlin 背景的开发者都会对结构体中出现的“函数指针”感到陌生。特别是当看到如下代码时: struct Animal {void (*speak)(void); };void dogSpeak() {printf("Woof!\n"); }int main() {struct Animal dog;d…...

MicroK8s和K8s的区别优劣在哪?

运行ubuntu24.04后提示这么一段话: Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8sjust raised the bar for easy, resilient and secure K8s cluster deployment.https://ubuntu.com/engage/secure-kubernetes-at-the-edge 这段话…...

C++指针和引用之区别(The Difference between C++Pointers and References)

面试题:C指针和引用有什么区 C指针和引用有什么区别? 在 C 中,指针和引用都是用来访问其他变量的值的方式,但它们之间存在一些重要的区别。了解这些区别有助于更好地理解和使用这两种工具。 01 指针 指针(Pointer…...

Linux——Shell编程之正则表达式与文本处理器(笔记)

目录 基础正则表达式 1:基础正则表达式示例 (4)查找任意一个字符“.”与重新字符“*” (5)查找连续字符范围“{ }” 文本处理器 一、sed工具 二、awk工具 (1)按行输出文本 (2&#xff0…...

关于k8s的部署

一、实验目的 1、理解k8s的组件的功能; 2、理解k8s中的资源类型; 3、 熟练掌握k8s部署配置; 二、实验内容: 前置知识点: 写出k8s有哪些组件并简述作用? ①Master 组件: Master 组件提供集…...

营销自动化实战指南:如何用全渠道工作流引爆线索转化率?

在数字化浪潮席卷全球的今天,企业争夺用户注意力的战场已从单一渠道转向全渠道。然而,面对海量线索,许多团队依然深陷效率泥潭:人工处理耗时费力、高价值线索流失、跨渠道数据难以整合……如何破局?营销自动化正成为企…...

利用Global.asax在ASP.NET Web应用中实现功能

Global.asax文件&#xff08;也称为ASP.NET应用程序文件&#xff09;是ASP.NET Web应用程序中的一个重要文件&#xff0c;它允许您处理应用程序级别和会话级别的事件。下面介绍如何利用Global.asax来实现各种功能。 Global.asax基本结构 <% Application Language"C#&…...

【Linux 并发与竞争实验】

【Linux 并发与竞争实验】 之前学习了四种常用的处理并发和竞争的机制&#xff1a;原子操作、自旋锁、信号量和互斥体。本章我们就通过四个实验来学习如何在驱动中使用这四种机制。 文章目录 【Linux 并发与竞争实验】1.原子操作实验1.1 实验程序编写1.2 运行测试 2.自旋锁实验…...

数据一致性策略之延迟双删-实现

延迟双删 查询数据之前优先去查Redis的缓存数据&#xff0c;减少数据库压力&#xff1b; 如果没有缓存会去查数据库&#xff0c;通过查询数据库后缓存热点Key Cache-Aside策略 高并发场景时&#xff0c;严重生产bug&#xff1a;数据不一致 业务场景&#xff1a; 事务1&#x…...

在PyTorch中,使用不同模型的参数进行模型预热

在PyTorch中&#xff0c;使用不同模型的参数进行模型预热&#xff08;Warmstarting&#xff09;是一种常见的迁移学习和加速训练的策略。以下是结合多个参考资料总结的实现方法和注意事项&#xff1a; 1. 核心机制&#xff1a;load_state_dict()与strict参数 • 部分参数加载&…...

【AI论文】InternVL3:探索开源多模态模型的高级训练和测试时间配方

摘要&#xff1a;我们推出了InternVL3&#xff0c;这是InternVL系列的一项重大进步&#xff0c;具有本地多模态预训练范式。 InternVL3不是将纯文本的大型语言模型&#xff08;LLM&#xff09;改编成支持视觉输入的多模态大型语言模型&#xff08;MLLM&#xff09;&#xff0c;…...

基于Linux的ffmpeg python的关键帧抽取

1.FFmpeg的环境配置 首先强调&#xff0c;ffmpeg-python包与ffmpeg包不一样。 1) 创建一个虚拟环境env conda create -n yourenv python3.x conda activate yourenv2) ffmpeg-python包的安装 pip install ffmpeg-python3) 安装系统级别的 FFmpeg 工具 虽然安装了 ffmpeg-p…...

CNN:卷积到底做了什么?

卷积神经网络&#xff08;Convolutional Neural Network, CNN&#xff09; 是一种深度学习模型&#xff0c;专门用于处理具有网格结构的数据&#xff08;如图像、视频等&#xff09;。它在计算机视觉领域表现卓越&#xff0c;广泛应用于图像分类、目标检测、图像分割等任务。CN…...

C++ IO流

文章目录 C IO流流是什么C标准IO流C文件IO流c字符串流 C IO流 流是什么 在 C 中&#xff0c;“流&#xff08;Stream&#xff09;” 是一种 抽象的数据传输机制&#xff0c;它通过统一的接口实现了程序与各种输入/输出设备&#xff08;如键盘、屏幕、文件、内存等&#xff09…...

解决splice改变原数组的BUG(拷贝数据)

项目场景&#xff1a; 项目中难免遇到需要删除改变数组的方法&#xff0c;去重&#xff0c;删除不要的数据等 问题描述&#xff1a; 但是splice方法会删除掉数据改变原数组&#xff0c;返回的是改变之后的数组&#xff0c;即使你是赋值的还是会影响到原数组的数据 GoodsInfo…...

ARINC818协议(二)

ARINC818对图像数据进行帧分割 1.FC协议定了5层模型结构&#xff1a;FC-4;FC-3;FC-2;FC-1;FC-0; 2.ARINC818协议位于FC-4层&#xff1b; 3.ARINC818协议在FC-4层使用FHCP帧头控制协议进行实现数据传递&#xff1b; 4.协议中有容器&#xff0c;容器头&#xff0c;object0~object…...

【Netty篇】Future Promise 详解

目录 一、 Netty Future 与 Promise —— 异步世界的“信使”与“传话筒”&#x1f680;1、 理解 Netty Future2、 理解 Netty Promise 二、 代码案例解读&#x1f4bb;例1&#xff1a;同步处理任务成功&#x1f44d;例2&#xff1a;异步处理任务成功&#x1f4f2;例3&#xff…...

【LaTeX】Misplaced alignment tab character . ^^I

目录 公式中出现Misplaced alignment tab character &. ^^I& 解决1&#xff1a;采用&& 解决2&#xff1a; 公式中出现Misplaced alignment tab character &. ^^I& \begin{equation}J_r & \dfrac{i\hbar}{2m}\left[\psi_2 \dfrac{\partial \psi^…...

数据中台(大数据平台)之元数据管理

&#x1f449;元数据管理是数据管理的基础&#xff0c;数据中台产品要能够提供各类元数据采集的适配器&#xff0c;自动化采集技术元数据&#xff0c;并在技术元数据的基础上补充管理属性和业务属性&#xff0c;为后续的数据资源目录、数据安全管控、报表开发提供统一的口径。并…...

基于RRT的优化器:一种基于快速探索随机树算法的新型元启发式算法

受机器人路径规划中常用的快速探索随机树&#xff08;RRT&#xff09;算法的搜索机制的启发&#xff0c;我们提出了一种新颖的元启发式算法&#xff0c;称为基于RRT的优化器&#xff08;RRTO&#xff09;。这是首次将RRT算法的概念与元启发式算法相结合。RRTO的关键创新是其三种…...

设计模式每日硬核训练 Day 13:桥接模式(Bridge Pattern)完整讲解与实战应用

&#x1f504; 回顾 Day 12&#xff1a;装饰器模式小结 在 Day 12 中&#xff0c;我们学习了装饰器模式&#xff08;Decorator Pattern&#xff09;&#xff1a; 强调在不改变原类结构的前提下&#xff0c;动态为对象增强功能。通过“包装对象”实现运行时组合&#xff0c;支…...

【开发语言】悬空指针问题

悬空指针&#xff08;Dangling Pointer&#xff09;是编程中常见的内存管理问题&#xff0c;尤其在C/C这类手动管理内存的语言中。以下是详细解释&#xff1a; 什么是悬空指针&#xff1f; 悬空指针是指向已经被释放&#xff08;或失效&#xff09;内存的指针。这段内存可能已…...

深入剖析 WiFi 定位解析功能:原理、技术优势与应用场景

WiFi 定位解析功能的原理​ 信号强度与距离的关系​ WiFi 定位的核心原理基于无线信号传播过程中的一个基本特性&#xff1a;信号强度与信号发射源&#xff08;即 WiFi 接入点&#xff0c;Access Point&#xff0c;简称 AP&#xff09;和接收设备之间距离的关联。一般来说&am…...