使用 FunASR 工具包实现音频文件的语音识别

使用 FunASR 工具包实现音频文件的语音识别,并将识别结果保存为文本文件,支持单文件处理和批量处理。电脑环境需要配置,我使用的PyTorch版本: 2.4.1+cu121,CUDA可用: True。

FunASR 是一个功能强大、性能卓越、面向工业应用的语音识别开源项目。​​ 它凭借其非自回归的 Paraformer 模型提供了极快的推理速度。如果您正在寻找一个能够进行高性能、低延迟、离线部署的中文(也支持英文和多语言)语音识别解决方案,FunASR 是一个非常好的选择。

主要流程

  • 1、创建识别器实例,加载预训练的语音识别模型,并自动选择运行设备(GPU 优先)。
class FunASRRecognizer:def __init__(self):# 打印环境信息print(f"PyTorch版本: {torch.__version__}")print(f"CUDA可用: {torch.cuda.is_available()}")# 加载模型(指定预训练模型和运行设备)self.model = AutoModel(model="iic/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch",device="cuda" if torch.cuda.is_available() else "cpu")
  • 2、接收音频文件路径,调用模型进行语音识别,返回识别结果。
def recognize_audio(self, audio_path):try:# 调用模型生成识别结果(核心识别逻辑)result = self.model.generate(input=audio_path)return resultexcept Exception as e:print(f"识别错误: {e}")return None
  • 3、将识别结果提取为文本,保存到指定目录的 TXT 文件中(文件名与音频文件对应)。
def save_result_to_txt(self, audio_path, result):# 提取音频文件名(不含扩展名)audio_name = Path(audio_path).stemtxt_path = f"res2/{audio_name}.txt"  # 保存路径# 提取文本内容(处理模型返回的结果格式)if isinstance(result, list) and len(result) > 0:text = result[0].get('text', '')else:text = str(result)# 写入文件with open(txt_path, 'w', encoding='utf-8') as f:f.write(text)return txt_path
  • 4、整合 “识别” 与 “保存” 步骤,检查文件存在性,输出处理状态。
def process_single_audio(self, audio_path):# 检查文件是否存在if not os.path.exists(audio_path):print(f"音频文件不存在: {audio_path}")return False# 调用识别方法result = self.recognize_audio(audio_path)# 若识别成功,保存结果并打印if result:self.save_result_to_txt(audio_path, result)print(f"识别文本: {result[0].get('text', '')}")return Trueelse:print("识别失败")return False
  • 5、批量文件处理,扫描指定文件夹中的所有音频文件(支持多种格式),逐个调用单文件处理逻辑。
def process_multiple_audios(self, audio_folder, extensions=['.mp3', '.wav', '.flac', '.m4a']):# 检查文件夹存在性if not os.path.exists(audio_folder):print(f"文件夹不存在: {audio_folder}")return# 收集所有指定格式的音频文件(含大小写扩展名)audio_files = []for ext in extensions:audio_files.extend(Path(audio_folder).glob(f"*{ext}"))audio_files.extend(Path(audio_folder).glob(f"*{ext.upper()}"))# 逐个处理音频文件并统计成功数量success_count = 0for audio_file in audio_files:if self.process_single_audio(str(audio_file)):success_count += 1print(f"处理完成!成功: {success_count}/{len(audio_files)}")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/95626.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【STM32】定时器编码器接口

【STM32】定时器编码器接口一、编码器接口1.1 正交编码器1.2 编码器接口基本结构1.3 工作模式二、编码器接口测速一、编码器接口 编码器接口可接收增量(正交)编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT的自增或…

浪潮科技Java开发面试题及参考答案(120道题-中)

请介绍一下 SpringMVC 的运行流程?从用户发送请求到响应返回的完整步骤是什么?SpringMVC 是基于MVC架构的Web框架,其运行流程围绕“前端控制器(DispatcherServlet)”展开,通过多个组件协同工作,…

k8s初始化常见问题

执行初始化:kubeadm init --apiserver-advertise-address192.168.88.110 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr10.244.0.0/16 --control-plane-endpointweb01报错信息:age-repository registry.aliyuncs.com/…

Python学习笔记--使用Django修改和删除数据

一、修改方式一:模型类的对象.属性 更改的属性值,模型类的对象.save()返回值:编辑的模型类的对象。def update_book(request):book models.Book.objects.filter(pk1).first()book.price "169"book.save()return HttpResponse(bo…

如何评价2025年数学建模国赛?

2025年全国大学生数学建模竞赛将于9月4日正式举行! 有些第一次参加数学竞赛的同学可能觉得自己还没准备好,临近比赛感到紧张很正常,但需调整心态——数学建模比赛本就是学习过程,遇到不会的知识及时搜索、现学现用即可&#xff0…

uniapp [全端兼容] - 实现全景图Vr 720°全景效果查看预览功能,3D全景图流畅不卡顿渲染+手势拖拽+悬浮工具按钮,uniAPP实现vr看720度全景效果示例代码(H5小程序APP全兼容)

前言 如果您需要 Vue 版本,请访问 这篇文章。 在 uni-app 全平台兼容(H5网页网站、支付宝/微信小程序、安卓App、苹果App、nvue)开发中,详细实现全景图Vr 720全景查看+用户可流畅拖动预览+自定义工具栏/按钮元素等,uniApp如何实现在线观看720度全景图,适用于全景图VR看房…

51单片机-实现串口模块教程

本章概述思维导图:51单片机实现串口模块教程通信基本概念通信,至少是需要两个对象,一个收一个发数据。根据数据通信的传输时序协调方式,可分为:同步通信和异步通信;根据数据通信的传输线路可分为&#xff1…

Linux echo 命令使用说明

echo 命令使用说明(Linux) 适用环境 Bash/Zsh 等常见 Shell(echo 通常为内建命令)也可能存在外部 /bin/echo(行为与内建略有差异) 基本语法 echo [选项] [字符串...]常用选项 -n: 结尾不输出换行-e: 解析反…

Java搭建高效后端,Vue打造友好前端,联合构建电子采购管理系统,实现采购流程电子化、自动化,涵盖采购全周期管理,功能完备,附详细可运行源码

前言:在当今数字化浪潮席卷的时代,企业的采购管理面临着前所未有的挑战与机遇。传统采购模式因流程繁琐、效率低下、信息不透明等问题,已难以满足企业快速发展的需求。电子采购管理系统作为一种创新的采购解决方案,借助先进的信息…

应用开发使用缓存

在 Java 开发的典型架构(结合前端、后端、MyBatis、MySQL 及缓存机制)中,缓存层次可以从前端到后端再到数据库进行划分,通常涉及以下多层缓存:1. 前端缓存浏览器缓存:浏览器自带的缓存机制(如 H…

leetcode算法刷题的第二十六天

今天主要是要用贪心算法来解决重置区间的问题。 1.leetcode 452.用最少数量的箭引爆气球 题目链接 class Solution { public:static bool cmp(const vector<int>& a,const vector<int>& b){return a[0]<b[0];}int findMinArrowShots(vector<vecto…

BlueZ 学习之GATT Server开发

Linux下&#xff0c;使用C语言开发一个简单的GATT Server&#xff0c;我的Ubuntu上跑的BlueZ版本是5.79&#xff0c;使用的GLib库版本是2.85.2&#xff0c;这里我直接使用GLib里的D‑Bus来实现与BlueZ通信。BlueZ 官方推荐通过 D-Bus 进行通信和控制&#xff0c;如果是要使用原…

【Linux基础】Linux文件系统深度解析:EXT4与XFS技术详解与应用

目录 引言 1 Linux文件系统概述 1.1 文件系统的基本概念 1.2 日志文件系统的概念 2 EXT4文件系统详解 2.1 EXT4概述 2.2 EXT4的磁盘结构 2.3 EXT4的inode结构 2.4 EXT4的新特性 2.4.1 Extents 2.4.2 延迟分配 2.4.3 快速文件系统检查 2.5 EXT4的性能特点 3 XFS文…

埃文科技荣获2025年“数据要素×”大赛河南分赛二等奖

2025年8月19日&#xff0c;2025年“数据要素”大赛河南分赛决赛在郑州举行&#xff0c;本届河南分赛聚焦数据价值赋能。郑州埃文科技有限公司&#xff08;以下简称“埃文科技”&#xff09;凭借其前沿成果“IP地址高精度地理定位及应用场景划分数据集”&#xff0c;从500多支参…

链上迷局:区块链技术的法律暗礁与合规导航

高鹏律师首席数据官&#xff0c;数字经济团队创作AI辅助区块链&#xff0c;这个被誉为“信任机器”的技术&#xff0c;正以颠覆性的力量重塑数字经济的底层逻辑。从比特币的横空出世到NFT的全民狂欢&#xff0c;从DeFi的金融革命到DAO的组织重构&#xff0c;技术永不眠&#xf…

线性代数基础 | 基底 / 矩阵 / 行列式 / 秩 / 线性方程组

注&#xff1a;本文为 “线性代数基础 ” 相关合辑。 略作重排&#xff0c;未作全校。 如有内容异常&#xff0c;请看原文。 线性代数的本质&#xff08;1&#xff09;——基底、向量、线性变换、逆阵、行列式 野指针小李于 2020-08-13 16:34:45 发布 零、基底 在展开后续内…

GORM.io详细指南

GORM.io 详细指南 GORM&#xff08;全称 Go ORM&#xff09;是一个功能丰富的 ORM&#xff08;Object-Relational Mapping&#xff09;库&#xff0c;用于 Go 语言。它简化了数据库操作&#xff0c;将 SQL 查询映射到 Go 结构体&#xff0c;支持多种数据库后端。GORM 的设计理念…

【Flask】测试平台开发,应用管理模块实现-第十一篇

概述通过Element UI抽屉和表单校验&增改接口合并实现应用管理Drawer 抽屉之前产品修改和添加是使用Dialog组件实现的&#xff0c;但这个组件有时候并不满足我们的需求, 比如表单很长, 亦或是你需要临时展示一些文档, Drawer 是可以从侧面弹出的一个层&#xff0c;可以容纳更…

Elasticsearch 深分页限制与解决方案

最近在准备面试&#xff0c;正把平时积累的笔记、项目中遇到的问题与解决方案、对核心原理的理解&#xff0c;以及高频业务场景的应对策略系统梳理一遍&#xff0c;既能加深记忆&#xff0c;也能让知识体系更扎实&#xff0c;供大家参考&#xff0c;欢迎讨论。在项目中遇到一个…

基于偏最小二乘法PLS多输入单输出的回归预测【MATLAB】

基于偏最小二乘法&#xff08;PLS&#xff09;多输入单输出的回归预测【MATLAB】 在科学研究和工程实践中&#xff0c;我们常常需要根据多个相关变量来预测一个关键结果。例如&#xff0c;根据气温、湿度、风速等多个气象因素预测空气质量指数&#xff0c;或根据多种原材料成分…