【超简单】之基于PaddleSpeech搭建个人语音听写服务

article/2025/8/20 21:12:15

一、【超简单】之基于PaddleSpeech搭建个人语音听写服务

1.需求分析

  • 亲们,你们要写会议纪要嘛?
  • 亲们,你们要写会议纪要嘛?
  • 亲们,你们要写会议纪要嘛?

当您面对成吨的会议录音,着急写会议纪要而不得不愚公移山、人海战术?听的头晕眼花,听的漏洞百出,听的怀疑人生,那么你是否想到了自动听写服务?

想想也是,百度一看,好家伙,收费不菲啊!请看下图

在这里插入图片描述

在这里插入图片描述

2.需求再分析

亲密,能花钱解决的都不是事,刚刚看到听写服务,很贵的,大致1400大洋,还是打折完毕的,而且还是云服务形式的,那么对于某些会议,比如保密会议,需要离线的,那么完全办不到,该怎么办呢?
下面就有请我们的PaddleSpeech出场来解决问题。

3.解决思路

【超简单】之基于PaddleSpeech搭建个人语音听写服务,顾名思义,是通过PaddleSpeech来搭建语音听写服务的,主要思路如下。

  • 1.录音长度切分
  • 2.录音听写
  • 3.录音文本加标点

二、环境搭建

1.PaddleSpeech简介

PaddleSpeech 是基于飞桨 PaddlePaddle 的语音方向的开源模型库,用于语音和音频中的各种关键任务的开发,包含大量基于深度学习前沿和有影响力的模型,一些典型的应用如下:

  • 语音识别
  • 语音翻译
  • 语音合成

2.PaddleSpeech安装

pip install paddlespeech

2.1相关依赖

  • gcc >= 4.8.5
  • paddlepaddle >= 2.3.1
  • python >= 3.7
  • linux(推荐), mac, windows

2.2 win安装注意事项

  • 1.win必须安装 Microsoft C++ 生成工具 - Visual Studio
    https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/ 工具,原因是 安装非纯 Python 包或编译 Cython 或 Pyrex 文件

  • 2.参考: WindowsCompilers - Python Wiki
    https://wiki.python.org/moin/WindowsCompilers

!pip install paddlespeech >log.log

2.3 快速试用

!wget -c https://paddlespeech.bj.bcebos.com/PaddleAudio/zh.wav
--2022-07-27 00:31:57--  https://paddlespeech.bj.bcebos.com/PaddleAudio/zh.wav
Resolving paddlespeech.bj.bcebos.com (paddlespeech.bj.bcebos.com)... 182.61.200.195, 182.61.200.229, 2409:8c04:1001:1002:0:ff:b001:368a
Connecting to paddlespeech.bj.bcebos.com (paddlespeech.bj.bcebos.com)|182.61.200.195|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 159942 (156K) [audio/wav]
Saving to: ‘zh.wav’zh.wav              100%[===================>] 156.19K  --.-KB/s    in 0.03s   2022-07-27 00:31:57 (5.52 MB/s) - ‘zh.wav’ saved [159942/159942]

2.3.1 API调用

from paddlespeech.cli.asr.infer import ASRExecutorasr = ASRExecutor()
result = asr(audio_file="zh.wav")
[2022-07-27 00:33:02,175] [    INFO] - checking the audio file format......
print(result)
我认为跑步最重要的就是给我带来了身体健康

2.3.2 命令行调用

!paddlespeech asr --lang zh --input zh.wav
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/nltk/decorators.py:68: DeprecationWarning: `formatargspec` is deprecated since Python 3.5. Use `signature` and the `Signature` object directlyregargs, varargs, varkwargs, defaults, formatvalue=lambda value: ""
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/nltk/lm/counter.py:15: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop workingfrom collections import Sequence, defaultdict
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/nltk/lm/vocabulary.py:13: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop workingfrom collections import Counter, Iterable
[nltk_data] Downloading package averaged_perceptron_tagger to
[nltk_data]     /home/aistudio/nltk_data...
[nltk_data]   Unzipping taggers/averaged_perceptron_tagger.zip.
[nltk_data] Downloading package cmudict to /home/aistudio/nltk_data...
[nltk_data]   Unzipping corpora/cmudict.zip.
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/__init__.py:107: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop workingfrom collections import MutableMapping
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/rcsetup.py:20: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop workingfrom collections import Iterable, Mapping
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/colors.py:53: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop workingfrom collections import Sized
W0727 00:38:55.935500  2181 gpu_resources.cc:61] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 11.2, Runtime API Version: 10.1
W0727 00:38:55.940197  2181 gpu_resources.cc:91] device: 0, cuDNN Version: 7.6.
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/h5py/__init__.py:36: DeprecationWarning: `np.typeDict` is a deprecated alias for `np.sctypeDict`.from ._conv import register_converters as _register_converters
我认为跑步最重要的就是给我带来了身体健康

会自动下载一堆东西有点慢,可以不用这个。

[nltk_data] Downloading package averaged_perceptron_tagger to
[nltk_data]     /home/aistudio/nltk_data...
[nltk_data]   Unzipping taggers/averaged_perceptron_tagger.zip.
[nltk_data] Downloading package cmudict to /home/aistudio/nltk_data...

2.3.3 常见错误

如遇到以下错误

[2022-07-26 21:13:28,589] [    INFO] - checking the audio file format......
[2022-07-26 21:13:28,594] [   ERROR] - Please input audio file less then 50 seconds.

报错很明显,提示一个是音频格式问题,一个是小于50s问题,如果遇到这个问题后面解决。

  • 1.音频必须为wav格式

  • 2.音频大小必须小于50s

音频格式为wav格式,这个可通过录音笔设置(一般默认),或python代码转换,或者格式工厂进行转换。

3.音频切分

此处使用auditok库

!pip install auditok
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting auditokDownloading https://pypi.tuna.tsinghua.edu.cn/packages/49/3a/8b5579063cfb7ae3e89d40d495f4eff6e9cdefa14096ec0654d6aac52617/auditok-0.2.0-py3-none-any.whl (1.5 MB)l     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/1.5 MB ? eta -:--:--━━━━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.4/1.5 MB 14.2 MB/s eta 0:00:01━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸━━━━━━ 1.3/1.5 MB 19.7 MB/s eta 0:00:01━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 15.4 MB/s eta 0:00:00
[?25hInstalling collected packages: auditok
Successfully installed auditok-0.2.0[notice] A new release of pip available: 22.1.2 -> 22.2
[notice] To update, run: pip install --upgrade pip

三、音频切分

切分原因上面交代过,因为PaddleSpeech识别最长语音为50s,故需要切分,这里直接调用好了。

from paddlespeech.cli.asr.infer import ASRExecutor
import csv
import moviepy.editor as mp
import auditok
import os
import paddle
from paddlespeech.cli import ASRExecutor, TextExecutor
import soundfile
import librosa
import warningswarnings.filterwarnings('ignore')
# 引入auditok库
import auditok
# 输入类别为audio
def qiefen(path, ty='audio', mmin_dur=1, mmax_dur=100000, mmax_silence=1, menergy_threshold=55):audio_file = pathaudio, audio_sample_rate = soundfile.read(audio_file, dtype="int16", always_2d=True)audio_regions = auditok.split(audio_file,min_dur=mmin_dur,  # minimum duration of a valid audio event in secondsmax_dur=mmax_dur,  # maximum duration of an event# maximum duration of tolerated continuous silence within an eventmax_silence=mmax_silence,energy_threshold=menergy_threshold  # threshold of detection)for i, r in enumerate(audio_regions):# Regions returned by `split` have 'start' and 'end' metadata fieldsprint("Region {i}: {r.meta.start:.3f}s -- {r.meta.end:.3f}s".format(i=i, r=r))epath = ''file_pre = str(epath.join(audio_file.split('.')[0].split('/')[-1]))mk = 'change'if (os.path.exists(mk) == False):os.mkdir(mk)if (os.path.exists(mk + '/' + ty) == False):os.mkdir(mk + '/' + ty)if (os.path.exists(mk + '/' + ty + '/' + file_pre) == False):os.mkdir(mk + '/' + ty + '/' + file_pre)num = i# 为了取前三位数字排序s = '000000' + str(num)file_save = mk + '/' + ty + '/' + file_pre + '/' + \s[-3:] + '-' + '{meta.start:.3f}-{meta.end:.3f}' + '.wav'filename = r.save(file_save)print("region saved as: {}".format(filename))return mk + '/' + ty + '/' + file_pre

四、语音转文本

直接调用ASRExecutor进行语音到文本转换。

需要注意的是,此处 force_yes=True, 即强行进行音频频率转换,PaddleSpeech使用16000hz频率。如force_yes=False,则需要手动确认。。。。。

# 语音转文本
asr_executor = ASRExecutor()def audio2txt(path):# 返回path下所有文件构成的一个list列表print(f"path: {path}")filelist = os.listdir(path)# 保证读取按照文件的顺序filelist.sort(key=lambda x: int(os.path.splitext(x)[0][:3]))# 遍历输出每一个文件的名字和类型words = []for file in filelist:print(path + '/' + file)text = asr_executor(audio_file=path + '/' + file,device=paddle.get_device(), force_yes=True) # force_yes参数需要注意words.append(text)return words
# 保存
import csvdef txt2csv(txt_all):with open('result.csv', 'w', encoding='utf-8') as f:f_csv = csv.writer(f)for row in txt_all:f_csv.writerow([row])

五、标点符号修正

直接调用 TextExecutor 进行修正,简单粗暴。

下面上传一段录音来试试吧。

1.语音内容

在这里插入图片描述

2.语音识别并修正标点

!unzip -qoa 录音.zip
!mv ┬╝╥Ї.wav 录音.wav
from paddlespeech.cli.asr.infer import ASRExecutor
import csv
import moviepy.editor as mp
import auditok
import os
import paddle
from paddlespeech.cli import ASRExecutor, TextExecutor
import soundfile
import librosa
import warningswarnings.filterwarnings('ignore')
# 可替换成自身的录音文件
source_path = '录音.wav'
# 划分音频
path = qiefen(path=source_path, ty='audio',mmin_dur=0.5, mmax_dur=100000, mmax_silence=0.5, menergy_threshold=55)
# 音频转文本  需要GPU
txt_all = audio2txt(path)
# 存入csv
txt2csv(txt_all)
!head result.csv
# 拿到新生成的音频的路径
texts = ''
source_path = 'result.csv'
with open(source_path, 'r') as f:text = f.readlines()
for i in range(len(text)):text[i] = text[i].replace('\n', '')texts = texts + text[i]
print(texts)
text_executor = TextExecutor()
if text:result = text_executor(text=texts,task='punc',model='ernie_linear_p3_wudao',device=paddle.get_device(),# force_yes=True)
print(result)
with open("final_result.txt", 'w') as f:
e=paddle.get_device(),# force_yes=True)
print(result)
with open("final_result.txt", 'w') as f:f.writelines(result)
!head final_result.txt
为推动教育部教育数字化战略行动,更好落实教育部办公厅关于启动部分重点领域教学资源建设工作的通知,促进高校共建共享人工智能领域优质教小资源,协助教师搭建个性化课程,服务专业教学活动,提升惨教融合协同育人成效,上海交通大学北京航空航天大学联合百度公司主办各邀请教育部重点领域教学资源建设向专家组有关专家麦克谢谢。

3.识别结果

为推动,教育部。教育数字化战略行动。更好落实教育部办公厅关于启动部分重点领域。教学资源建设工作的通知。促进高校共建共享人工智能领域优质教小资源。协助教师搭建个性化课程。服务专业教学活动,提升惨教融合协同育人成效。上海交通大学,北京航空航天大学联合百度公司主办。各邀请教育部重点领域教学资源建设。向专家组。有关专家。麦克。谢谢

4.修正标点结果

为推动教育部教育数字化战略行动,更好落实教育部办公厅关于启动部分重点领域教学资源建设工作的通知,促进高校共建共享人工智能领域优质教小资源,协助教师搭建个性化课程,服务专业教学活动,提升惨教融合协同育人成效,上海交通大学北京航空航天大学联合百度公司主办各邀请教育部重点领域教学资源建设向专家组有关专家麦克谢谢。

六、后续计划

目前测试效果不错,计划后续GUI部署使用。

此文仅为搬运,原作链接:https://aistudio.baidu.com/aistudio/projectdetail/4379979


http://chatgpt.dhexx.cn/article/OgCotQfN.shtml

相关文章

遥感技术及高分遥感影像在地震中的应用及高分二号获取

长期以来,地震预报监测、灾害调查、灾情信息获取主要依靠实地勘测手段,其获取的数据精度和置信度虽然较高,但存在工作量大、效率低、费用高和信息不直观等缺点。遥感技术手段可在一定程度上克服传统实地勘测手段的缺点,并具有其他…

高分一号(GF-1)-中国高分辨率对地观测系统的第一颗卫星

2013年4月26日12时13分04秒由长征二号丁运载火箭成功发射,开启了中国对地观测的新时代。卫星全色分辨率是2米,多光谱分辨率为8米。高分一号卫星的宽幅多光谱相机幅宽达到了800公里。 “高分一号”的特点是增加了高分辨率多光谱相机,该相机的性…

历年(2017-2022)国产陆地观测卫星(高分1号2号6号等)外场绝对辐射定标系数

国产卫星绝对辐射定标系数(2008——2022) 2017年 参考博文:高分一号/二号/六号定标系数_desertsTsung的博客-CSDN博客

第059篇:高分二号遥感影像预处理流程(ENVI5.3.1平台+ENVI App Store中最新的中国国产卫星支持工具)

今天被袁老的新闻刷屏,湖南衡水县水稻基地传出好消息: 袁隆平团队第三代杂交水稻测产,测得晚稻平均亩产为911.7公斤 早稻晚稻实现亩产3061斤 伟大,除了伟大,不知道还能用什么词概括袁老的不凡成就! 说到这…

envi5.3处理高分二号影像数据详细过程记录

目录 一、多光谱影像处理 1. 辐射定标 2.大气校正 1. 需要准备一些数据: 2.大气校正过程 3、正射校正 二、全色影像处理 1. 辐射定标 2. 正射校正 三、图像融合 1.几何配准 2.图像融合 高分二号处理流程 envi5.3的安装教程: ENVI5.3安装 安装完ENVI5.3后…

我国高分系列卫星遥感影像介绍

继上一篇介绍《遥感图像处理》的文章之后,本篇文章对我国的高分系列卫星遥感影像进行简单的整理。 高分系列卫星是在高分专项的支持下,也就是高分辨率对地观测系统重大专项,由国防科技工业局牵头,组织实施建设的一系列高分辨率对…

高分辨率遥感卫星影像在交通方面的应用及高分二号影像获取

高分辨率遥感影像在城市交通领域具有广泛的应用前景:如遥感交通调查、遥感影像地图与电子地图制作、道路工程地质遥感解译、交通安全与知道抗灾救灾、交通事故现场快速勘察、交通需求预测、车辆与车牌视频识别等等。高分辨率影像比如高分二号卫星、高分一号卫星&…

中国高分系列卫星介绍

中国高分系列卫星 中国高分系列卫星是"高分专项"所规划的高分辨率对地观测的系列卫星。它是《国家中长期科学和技术发展规划纲要(2006~2020年)》所确定的16个重大专项之一。由于课程汇报,所以作了一个PPT,在…

高分二号(GF-2)号卫星数据的查询下载地址和方法

高分二号卫星是我国自主研制的首颗空间分辨优于1米的民用光学遥感卫星可在平台中查询到,搭载有两台高分辨率1米全色、4米多光谱相机,具有亚米级空间分辨率、高定位精度和快速姿态机动能力等特点,有效地提升了卫星综合观测效能,达到…

遥感科普|中国高分系列卫星综述(2020版)

遥感科普|中国高分系列卫星综述(2020版) 文章来源:卫星遥感大数据公众号 高分系列卫星概述 中国高分系列卫星是"高分专项"所规划的高分辨率对地观测的系列卫星。它是《国家中长期科学和技术发展规划纲要(2006~2020年&#xff09…

国产高分系列卫星平台介绍

目录 高分专项 高分一号(GF-1) 高分二号(GF-2) 高分三号(GF-3) 高分四号(GF-4) 高分五号(GF-5) 高分六号(GF-6) 高分七号(GF-7) 高分八…

高分三号卫星介绍

博主现在要用到高分三号卫星,但是因为高三2016年8月才发射,目前网上相关资料较少,便总结了一些相关信息,希望能为大家提供帮助~ 传感器 高分三号卫星搭载的传感器是C频段多极化合成孔径雷达,是迄今为止世界上成像模式…

法国Pleiades高分卫星/遥感影像/卫星影像/高分二号影像

引言 Pliades高分辨率卫星星座由2颗完全相同的卫星Pliades 1和Pliades 2组成。Pliades 1已于2011 年 12 月17 日成功发射并开始商业运营, Pliades2 于2012年12月1日成功发射并已成功获取第一幅影像。双星配合可实现全球任意地区的每日重访,最快速满足客户…

c语言中d1的分辨率是,高分一号(GF-1)、高分一号B、C、D星 卫星介绍

原标题:高分一号(GF-1)、高分一号B、C、D星 卫星介绍 高分一号卫星全色分辨率2米,多光谱分辨率8米。高分一号是国家高分辨率对地观测系统重大专项天基系统中的首发星,其主要目的是突破高空间分辨率、多光谱与高时间分辨率结合的光学遥感技术&…

使用ERDAS对国产卫星影像进行控制点正射校正—以高分二号卫星(GF2)为例

** 使用ERDAS对国产卫星影像进行控制点正射校正—以高分二号卫星(GF2)为例 ** 一、研究区影像: 1.1.高分二号原始影像 影像为山西介休市的一景获取时间为2019.01.22的GF2影像: 1.2.参考影像 参考影像为往期的该区域的DOM成果: 二、高分二号全色数据正射校正: 首…

天津市高分二号卫星影像获取/高分一号卫星影像

天津,简称津,地处太平洋西岸,华北平原东北部,海河流域下游,东临渤海,北依燕山,西靠首都北京,中华人民共和国直辖市,截止2021年1月27日天津市土地总面积11966.45平方公里&…

内蒙古自治区高分二号卫星影像获取/高分一号卫星影像

内蒙古自治区(简称“内蒙古”),位于祖国北部边疆,横跨东北、华北、西北地区,内与黑龙江、吉林、辽宁、河北、山西、陕西、宁夏、甘肃8省区相邻,外与俄罗斯、蒙古国接壤,是中华人民共和国省级行政…

QPSK调制解调原理(IQ调制)

QPSK调制解调原理(IQ调制) QPSK调制过程 QPSK调制星座图 参考链接:https://www.zhihu.com/question/23107539/answer/72521819?utm_sourcewechat_session&utm_mediumsocial&utm_oi736516591579037696

IQ调制

IQ调制 IQ调制定义 数字调制的过程就是将原始数据比特流按照一定的规则映射至IQ坐标系的过程。映射完成后将得到数字I和Q信号,再分别由DAC转换为模拟I和Q信号,最后经IQ调制器上变频至射频频段。 IQ定义 reference: 知乎.

相位调制器,强度调制器和IQ调制器的原理和传递函数介绍

1、前言 相位调制器,强度调制器和IQ调制器都是光通信系统中常用的外部调制器,主要作用就是将各种调制格式的调制信号加载到光波上。 2、相位调制器 相位调制器(Phase Modulator(PM))的基本结构如下图所示,相位调制器的…