快速使用MASR V3版不能語音識別框架

前言

本文章主要介紹如何快速使用MASR語音識別框架訓練和推理,本文將致力于最簡單的方式去介紹使用,如果使用更進階功能,還需要從源碼去看文檔。僅需三行代碼即可實現訓練和推理。

源碼地址:https://github.com/yeyupiaoling/MASR

安裝環境

使用Anaconda,并創建了Python3.11的虛擬環境。

  • 首先安裝的是Pytorch 2.5.1 的GPU版本,如果已經安裝過了,請跳過。
conda install pytorch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1  pytorch-cuda=11.8 -c pytorch -c nvidia
  • 使用pip安裝MASR庫,命令如下:
python -m pip install masr -U -i https://pypi.tuna.tsinghua.edu.cn/simple

準備數據集

執行下面代碼即可自動完成下載數據,和制作數據列表。默認下載可能會比較慢,可以復制下載地址用迅雷等工具下載,并指定filepath為下載好的文件路徑,可以快速完成制作數據列表。

import argparse
import os
import functools
from utility import download, unpack
from utility import add_arguments, print_argumentsDATA_URL = 'https://openslr.trmal.net/resources/33/data_aishell.tgz'
MD5_DATA = '2f494334227864a8a8fec932999db9d8'parser = argparse.ArgumentParser(description=__doc__)
add_arg = functools.partial(add_arguments, argparser=parser)
add_arg("target_dir", default="dataset/audio/", type=str, help="存放音頻文件的目錄")
add_arg("annotation_text", default="dataset/annotation/", type=str, help="存放音頻標注文件的目錄")
add_arg("filepath", default=None, type=str, help="提前下載好的數據集壓縮文件")
args = parser.parse_args()def create_annotation_text(data_dir, annotation_path):print('Create Aishell annotation text ...')if not os.path.exists(annotation_path):os.makedirs(annotation_path)f_train = open(os.path.join(annotation_path, 'aishell.txt'), 'w', encoding='utf-8')if not os.path.exists(os.path.join(annotation_path, 'test.txt')):f_test = open(os.path.join(annotation_path, 'test.txt'), 'w', encoding='utf-8')else:f_test = open(os.path.join(annotation_path, 'test.txt'), 'a', encoding='utf-8')transcript_path = os.path.join(data_dir, 'transcript', 'aishell_transcript_v0.8.txt')transcript_dict = {}for line in open(transcript_path, 'r', encoding='utf-8'):line = line.strip()if line == '': continueaudio_id, text = line.split(' ', 1)# remove spacetext = ''.join(text.split())transcript_dict[audio_id] = textdata_types = ['train', 'dev']for type in data_types:audio_dir = os.path.join(data_dir, 'wav', type)for subfolder, _, filelist in sorted(os.walk(audio_dir)):for fname in filelist:audio_path = os.path.join(subfolder, fname).replace('\\', '/')audio_id = fname[:-4]# if no transcription for audio then skippedif audio_id not in transcript_dict:continuetext = transcript_dict[audio_id]f_train.write(audio_path.replace('../', '') + '\t' + text + '\n')audio_dir = os.path.join(data_dir, 'wav', 'test')for subfolder, _, filelist in sorted(os.walk(audio_dir)):for fname in filelist:audio_path = os.path.join(subfolder, fname).replace('\\', '/')audio_id = fname[:-4]# if no transcription for audio then skippedif audio_id not in transcript_dict:continuetext = transcript_dict[audio_id]f_test.write(audio_path.replace('../', '') + '\t' + text + '\n')f_test.close()f_train.close()def prepare_dataset(url, md5sum, target_dir, annotation_path):"""Download, unpack and create manifest file."""data_dir = os.path.join(target_dir, 'data_aishell')if not os.path.exists(data_dir):if args.filepath is None:filepath = download(url, md5sum, target_dir)else:filepath = args.filepathunpack(filepath, target_dir)# unpack all audio tar filesaudio_dir = os.path.join(data_dir, 'wav')for subfolder, _, filelist in sorted(os.walk(audio_dir)):for ftar in filelist:unpack(os.path.join(subfolder, ftar), subfolder, True)os.remove(filepath)else:print("Skip downloading and unpacking. Aishell data already exists in %s." % target_dir)create_annotation_text(data_dir, annotation_path)def main():print_arguments(args)if args.target_dir.startswith('~'):args.target_dir = os.path.expanduser(args.target_dir)prepare_dataset(url=DATA_URL,md5sum=MD5_DATA,target_dir=args.target_dir,annotation_path=args.annotation_text)if __name__ == '__main__':main()

訓練

使用MASR框架訓練非常簡單,核心代碼就3行,如下,configs參數可以指定使用的默認配置文件。

from masr.trainer import MASRTrainertrainer = MASRTrainer(configs="conformer", use_gpu=True)trainer.train(save_model_path="models/")

輸出類似如下:

2025-03-08 11:04:57.884 | INFO     | masr.optimizer:build_optimizer:16 - 成功創建優化方法:Adam,參數為:{'lr': 0.001, 'weight_decay': 1e-06}
2025-03-08 11:04:57.884 | INFO     | masr.optimizer:build_lr_scheduler:31 - 成功創建學習率衰減:WarmupLR,參數為:{'warmup_steps': 25000, 'min_lr': 1e-05}
2025-03-08 11:04:57.885 | INFO     | masr.trainer:train:541 - 詞匯表大小:5561
2025-03-08 11:04:57.885 | INFO     | masr.trainer:train:542 - 訓練數據:13382
2025-03-08 11:04:57.885 | INFO     | masr.trainer:train:543 - 評估數據:27
2025-03-08 11:04:58.642 | INFO     | masr.trainer:__train_epoch:414 - Train epoch: [1/200], batch: [0/836], loss: 51.60880, learning_rate: 0.00000008, reader_cost: 0.1062, batch_cost: 0.6486, ips: 21.1991 speech/sec, eta: 1 day, 11:03:13

導出模型

訓練完成之后還需要導出模型才能進行推理,導出模型也非常簡單。需要三行代碼,如下:

from masr.trainer import MASRTrainer# 獲取訓練器
trainer = MASRTrainer(configs="conformer", use_gpu=True)# 導出預測模型
trainer.export(save_model_path='models/',resume_model='models/ConformerModel_fbank/best_model/')

推理

推理也相當簡單,只需要下面三行代碼即可完成語音識別。

from masr.predict import MASRPredictorpredictor = MASRPredictor(model_dir="models/ConformerModel_fbank/inference_model/", use_gpu=True)audio_path = "dataset/test.wav"
result = predictor.predict(audio_data=audio_path)
print(f"識別結果: {result}")

輸出如下:

2025-03-08 11:21:52.100 | INFO     | masr.infer_utils.inference_predictor:__init__:38 - 已加載模型:models/ConformerModel_fbank/inference_model/inference.pth
2025-03-08 11:21:52.147 | INFO     | masr.predict:__init__:117 - 流式VAD模型已加載完成
2025-03-08 11:21:52.147 | INFO     | masr.predict:__init__:119 - 開始預熱預測器...
2025-03-08 11:22:01.366 | INFO     | masr.predict:reset_predictor:471 - 重置預測器
2025-03-08 11:22:01.366 | INFO     | masr.predict:__init__:128 - 預測器已準備完成!
識別結果: {'text': '近幾年不但我用書給女兒壓歲也勸說親朋不要給女兒壓歲錢而改送壓歲書', 'sentences': [{'text': '近幾年不但我用書給女兒壓歲也勸說親朋不要給女兒壓歲錢而改送壓歲書', 'start': 0, 'end': 8.39}]}

結語

該框架支持多個語音識別模型,包含deepspeech2conformersqueezeformerefficient_conformer等,每個模型都支持流式識別和非流式識別,以及多種解碼器,包含ctc_greedy_searchctc_prefix_beam_searchattention_rescoringctc_beam_search等。更多功能等你發現。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/897302.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897302.shtml
英文地址,請注明出處:http://en.pswp.cn/news/897302.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言_數據結構總結5:順序棧

純C語言代碼,不涉及C 想了解鏈式棧的實現,歡迎查看這篇文章:C語言_數據結構總結6:鏈式棧-CSDN博客 這里分享插入一下個人覺得很有用的習慣: 1. 就是遇到代碼哪里不理解的,你就問豆包,C知道&a…

2021 年 6 月青少年軟編等考 C 語言六級真題解析

目錄 T1. 波蘭表達式T2. 多項式相加思路分析T3. 撲克牌排序思路分析T4. 表達式求值思路分析T1. 波蘭表達式 題目鏈接:SOJ D1087 此題為 2023 年 12 月三級第三題原題,見 2023 年 12 月青少年軟編等考 C 語言三級真題解析中的 T3。 T2. 多項式相加 題目鏈接:SOJ D1088 我…

AI數字人| Fay開源項目、UE5數字人、本地大模型

數字人實踐教程 本教程主要是講如何在本地UE部署Fay數字人的開源框架。 最終效果可以與人進行自然語言的對話,花了大概10個h的時間到,踩了很多坑,同樣想實現的朋友可以作為參考 參考文檔:Fay 數字人開源框架 - 飛書云文檔 官方的教…

網絡版漢譯英服務(muduo)

文章目錄 網絡版漢譯英服務(muduo)muduo庫muduo 庫是什么muduo 庫常見接口介紹muduo::net::EventLoopmuduo::net::TcpConnectionmuduo::net::TcpServermuduo::net::TcpClientmuduo::net::Buffer 漢譯英服務服務端客戶端 網絡版漢譯英服務(mud…

在ArcMap中通過Python編寫自定義工具(Python Toolbox)實現點轉線工具

文章目錄 一、需求二、實現過程2.1、創建Python工具箱(.pyt)2.2、使用catalog測試代碼2.3、在ArcMap中使用工具 三、測試 一、需求 通過插件的形式將點轉線功能嵌入ArcMap界面,如何從零開始創建一個插件,包括按鈕的添加、工具的實…

C++之序列容器(vector,list,dueqe)

1.大體對比 在軟件開發的漫長歷程中,數據結構與算法始終占據著核心地位,猶如大廈的基石,穩固支撐著整個程序的運行。在眾多編程語言中,數據的存儲與管理方式各有千秋,而 C 憑借其豐富且強大的工具集脫穎而出&#xff…

【學習筆記】【DeepSeek AI 醫生】2-2 AI家庭醫生課程內容介紹

【DeepSeek AI 醫生】2-4 項目詳細分析及DeepSeek適用場景 一、Ollama部署二、可視化UI三、構建項目環境四、搭建項目架構五、Spring Al六、SSE服務端推送事件七、數據持久化八、線上部署 一、Ollama部署 Mac部署windows 部署ollama腳本、常用命令DeepSeek 提示詞、角色、適用…

STM32 I2C驅動開發全解析:從理論到實戰 | 零基礎入門STM32第五十步

主題內容教學目的/擴展視頻I2C總線電路原理,跳線設置,I2C協議分析。驅動程序與調用。熟悉I2C總線協議,熟練調用。 師從洋桃電子,杜洋老師 📑文章目錄 引言一、I2C驅動分層架構二、I2C總線驅動代碼精析2.1 初始化配置&a…

Vercel Serverless

1. 引言 現代應用程序是為適應當前技術環境需求而設計的軟件,采用現代開發工具和實踐,針對云部署和可擴展性優化。它們由多個模塊化小組件組成,便于集成和縮放,具有高度的敏捷性和適應性,能快速響應用戶或業務需求變化…

國產操作系統之系統分區及分區的作用

國產操作系統之系統分區及分區的作用和掛載 Linux的系統分區跟Windows有著本質區別,在windows中大家知道c盤一般為系統盤,除c盤系統盤外,我們再分為D、E等文件存儲盤,而在Linux中雖然是以文件目錄著稱的系統,但思路也一樣的,比如針對系統分區中 /home、/var 和 /opt 等文…

字節碼是由什么組成的?

Java字節碼是Java程序編譯后的中間產物,它是一種二進制格式的代碼,可以在Java虛擬機(JVM)上運行。理解字節碼的組成有助于我們更好地理解Java程序的運行機制。 1. Java字節碼是什么? 定義 Java字節碼是Java源代碼經過…

微前端框架 Qiankun 的應用及問題分析

一、Qiankun 的核心應用場景與優勢 多技術棧共存與靈活集成 Qiankun 支持主應用與子應用使用不同技術棧(如 Vue、React、Angular 等),通過 HTML Entry 方式接入子應用,無需深度改造子應用即可實現集成,降低了技術遷移成…

function uuid_generate_v4()不存在(二)

說明:之前代碼里用到了postgresql內嵌函數uid_generate_v4()生成記錄的主鍵,提示該函數不存在,寫了下面這篇博客記錄了一下,今天又發現了新的問題,于是補充了這篇博客。 function uuid_generate_v4()不存在&#xff0…

6. 機器人實現遠程遙控(具身智能機器人套件)

1. 啟動控制腳本 遠程作到 Raspberry Pi 中,并運行以下腳本: conda activate lerobotpython lerobot/scripts/control_robot.py \--robot.typelekiwi \--control.typeremote_robot登錄筆記本電腦上,同時運行以下腳本: conda ac…

【簡單的C++圍棋游戲開發示例】

C圍棋游戲開發簡單示例&#xff08;控制臺版&#xff09; ?核心代碼實現? #include <iostream> #include <vector> #include <queue> using namespace std;const int SIZE 9; // 簡化棋盤為9x9?:ml-citation{ref"1" data"citationList&…

RK3568平臺(音頻篇)audio_policy_volumes_drc.xml解析

audio_policy_volumes_drc.xml 是 Android 系統中用于配置音頻策略和音量的 XML 文件。它定義了音頻流的音量曲線、動態范圍控制(DRC)參數以及音頻設備的音量設置。該文件通常位于 /vendor/etc/ 或 /system/etc/ 目錄下,是 Android 音頻框架的重要組成部分。 以下是對 audi…

如何下載安裝 PyCharm?

李升偉 整理 一、下載 PyCharm 訪問官網 打開 PyCharm 官網&#xff0c;點擊 "Download" 按鈕25。 版本選擇&#xff1a; 社區版&#xff08;Community&#xff09;&#xff1a;免費使用&#xff0c;適合個人學習和基礎開發。 專業版&#xff08;Professional&#…

leetcode day27 455+376

455 分發餅干 假設你是一位很棒的家長&#xff0c;想要給你的孩子們一些小餅干。但是&#xff0c;每個孩子最多只能給一塊餅干。 對每個孩子 i&#xff0c;都有一個胃口值 g[i]&#xff0c;這是能讓孩子們滿足胃口的餅干的最小尺寸&#xff1b;并且每塊餅干 j&#xff0c;都有…

HPC超算系列2——新手指南1

一&#xff0c;平臺簡介&#xff1a; 主要是官方手冊指南、B站視頻&#xff08;培訓視頻、軟件視頻&#xff09; 1&#xff0c;超算平臺架構&#xff1a; 和普通的家用電腦的架構不同&#xff0c; 主要區別在于&#xff1a;層次化的結構 &#xff08;1&#xff09;超算是有…

K8S單機部署

主線 :部署簡單的單節點k8s - sowler - 博客園 學習網址&#xff1a;為什么我不能獲取到鏡像&#xff0c;ImagePullBackoff | Kuboard docker鏡像源&#xff1a;https://chuxia.blog.csdn.net/article/details/145090710?spm1001.2101.3001.6650.3&utm_mediumdistribute…