基于PaddleSpeech搭建语音转文字服务

分割、转换wav语音文件

首先从手机中导出录音文件,一般是wav或者m4a格式,所以可以通过我之前写的文章利用FFmpeg提取、转换、分割wav文件来分割、转换文件格式。

ffmpeg -i input.wav -f segment -segment_time 49 -c copy -ac 2 -ar 16000 out%03d.wav

上面的意思是:

  1. input.wav 为wav格式的输入音频文件
  2. -segment_time 49 将文件分割为49秒一个
  3. -ac 2 双声道
  4. -ar 16000 转换为16khz 的采样率

音频转文本

1.PaddleSpeech简介

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

github: https://github.com/PaddlePaddle/PaddleSpeech

PaddleSpeech安装

pip install paddlespeech

我是在windows10 的wls2上安装成功的,反而在mac上失败,暂时没有去研究处理。

实现代码

from paddlespeech.cli.asr.infer import ASRExecutor
import csv
import os
import paddle
import csv
import warnings
warnings.filterwarnings('ignore')

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

# 保存
def txt2csv(name, txt_all):
    with open(f'{name}.csv', 'w', encoding='utf-8') as f:
        f_csv = csv.writer(f)
        for row in txt_all:
            f_csv.writerow([row])

path = "分割后的音频文件目录地址"
# 音频转文本  需要GPU
txt_all = audio2txt(path)
# 存入csv
txt2csv(path, txt_all)

参考:

阅读量: | 柯西君_BingWong | 2023-02-16