PaddleSpeech的GitHub项目地址
环境要求:
gcc >= 4.8.5
paddlepaddle <= 2.5.1
python >= 3.8
OS support: Linux(recommend), Windows, Mac OSX
pip下载指令:
python -m pip install paddlepaddle-gpu==2.5.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install paddlespeech==1.4.1
小模型配置代码:
from paddlespeech.cli.asr.infer import ASRExecutor
ASR_MODELS = ['conformer_wenetspeech-zh-16k', 'conformer_online_wenetspeech-zh-16k',
'conformer_u2pp_online_wenetspeech-zh-16k',
'conformer_online_multicn-zh-16k', 'conformer_aishell-zh-16k', 'conformer_online_aishell-zh-16k',
'transformer_librispeech-en-16k', 'deepspeech2online_wenetspeech-zh-16k',
'deepspeech2offline_aishell-zh-16k',
'deepspeech2online_aishell-zh-16k', 'deepspeech2offline_librispeech-en-16k',
'conformer_talcs-codeswitch_zh_en-16k']
ASR_MODEL = 'conformer_wenetspeech'
ASR_EXECUTOR = ASRExecutor()
音频文件保存代码:
import io
import os
import uuid
import soundfile as sf
# 将音频数据转换并保存为16kHz采样率、16位量化深度、单声道的WAV文件
def save_audio_file(file_path, file_content):
# 生成一个唯一的文件名
unique_filename = str(uuid.uuid4()) + ".wav"
# 确保目录存在
if not os.path.exists(file_path):
os.makedirs(file_path)
try:
# 将文件流转换为音频数据
audio_data, sample_rate = sf.read(io.BytesIO(file_content.read()))
# 构建完整的文件路径
file_path_with_file_name = os.path.join(file_path, unique_filename)
# # 重采样音频数据到16kHz,单声道,16位
if sample_rate != 16000:
from scipy.signal import resample
num_samples = int(len(audio_data) * (16000 / sample_rate))
audio_data = resample(audio_data, num_samples)
sample_rate = 16000
# 保存音频数据为16位,16kHz,单声道的WAV文件
sf.write(file_path_with_file_name, audio_data, 16000, subtype='PCM_16')
return file_path_with_file_name, sample_rate
except Exception as e:
print(f"Error saving file: {e}")
return None
获取语音识别结果代码:
import os
# 获取指定文件的语音识别结果
def get_text_with_asr(file_path_with_file_name, sample_rate):
if not os.path.exists(file_path_with_file_name):
return None
asr_result = ASR_EXECUTOR(
audio_file=file_path_with_file_name,
model=ASR_MODEL,
# sample_rate=sample_rate,
# lang='zh'
)
return asr_result
音频转文字代码:
import os
# 音频转文字(上传音频文件)
def audio_to_text(file_content, file_name):
file_path_without_file_name = '.' + STATIC_FILE_PATH + "/"
if not os.path.exists(file_path_without_file_name):
os.makedirs(file_path_without_file_name)
file_path_with_file_name, sample_rate = save_audio_file(file_path_without_file_name, file_content)
asr_result = get_text_with_asr(file_path_with_file_name, sample_rate)
return asr_result