paddle speech安装及其应用

首先conda新建环境,由于speech比较早,而且后期更新较少,因此官方的版本维护的建议使用python310,不要太新的环境

conda create -n pdspeech python=3.10

pip install paddlepaddle==2.4.1 -i https://mirror.baidu.com/pypi/simple
pip install pytest-runner
pip install paddlespeech

示例代码

from paddlespeech.cli.asr.infer import ASRExecutor
from paddlespeech.cli.text.infer import TextExecutor
from pydub import AudioSegment
import os
import time


def split_audio(audio_path, segment_length_ms):
    """
    将音频切分为指定时长的片段。
    Args:
        audio_path (str): 音频文件路径。
        segment_length_ms (int): 每个片段的长度(以毫秒为单位)。
    Returns:
        list: 切分后的音频片段列表。
    """
    audio = AudioSegment.from_file(audio_path)
    segments = [audio[i:i + segment_length_ms] for i in range(0, len(audio), segment_length_ms)]
    return segments


def save_temp_audio(segment, index):
    """
    将音频片段保存为临时文件。
    Args:
        segment (AudioSegment): 音频片段。
        index (int): 当前片段索引。
    Returns:
        str: 临时音频文件路径。
    """
    temp_audio_path = f"temp_segment_{index}.wav"
    segment.export(temp_audio_path, format="wav")
    return temp_audio_path


def save_text_to_file(text, file_path):
    """
    保存文本到文件。
    Args:
        text (str): 要保存的文本。
        file_path (str): 输出的文件路径。
    """
    with open(file_path, 'w', encoding='utf-8') as f:
        f.write(text)


def main(audio_file, output_txt_file):
    # 初始化 ASR 和文本处理器
    asr = ASRExecutor()
    text_punc = TextExecutor()

    # 切分音频(每段最长 45 秒,以适配 50 秒的限制)
    segment_length_ms = 45 * 1000  # 45 秒
    segments = split_audio(audio_file, segment_length_ms)

    result_text = []
    start_time = time.time()

    # 对每个片段进行 ASR 处理
    for idx, segment in enumerate(segments):
        temp_audio_path = save_temp_audio(segment, idx)
        print(f"Processing segment {idx + 1}/{len(segments)}...")
        try:
            # 执行语音识别
            asr_result = asr(audio_file=temp_audio_path, model='conformer_wenetspeech')

            # 检查识别结果是否有效
            if not asr_result:
                print(f"Segment {idx + 1} returned empty result.")
                continue

            # 加标点
            processed_text = text_punc(text=asr_result, model='ernie_linear_p3_wudao_fast')
            result_text.append(processed_text)
        except Exception as e:
            print(f"Error processing segment {idx + 1}: {e}")
        finally:
            # 清理临时文件
            if os.path.exists(temp_audio_path):
                os.remove(temp_audio_path)

    # 拼接所有识别结果
    final_text = " ".join(result_text)
    end_time = time.time()

    # 保存最终结果到 txt 文件
    save_text_to_file(final_text, output_txt_file)

    print(f"Final Text: {final_text}")
    print(f"Processing Time: {end_time - start_time} seconds")
    print(f"Text saved to: {output_txt_file}")
    return final_text


if __name__ == "__main__":
    input_audio_path = "example.mp3"  # 输入音频文件路径
    output_txt_path = "recognized_text.txt"  # 输出文本文件路径

    main(input_audio_path, output_txt_path)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值