【代码记录0929】python语音转文字,可视化操作初步版本。结果会存在txt里。

本代码应该是CSDN上最稳妥的代码转译示例了。
因为虽然百度给的示例只需要十几行代码就能转译。但是真正用起来,真的是要吐槽死了。所以本文的代码段,才加了好多代码。唯一需要你改的就是你要自己创建百度账号(通用),然后获得自己的密钥。

百度智能云说明:

#填写百度控制台中相关开通了“音频文件转写”接口的应用的的API_KEY及SECRET_KEY
这些需要自己在百度智能云中开通 免费用半年
百度智能云相关链接https://console.bce.baidu.com/ai/#/ai/speech/overview/index
下面只是示例:请去百度创建自己的 ,然后在代码中改成自己的,不然用不了。领取免费资源后 创建一个应用就有了

APP_ID = ‘24919015’
API_KEY = ‘LXGs4gvpc81lSrzp94k4MIwm’
SECRET_KEY = ‘H2Xzh2ltiQcedKsilcbI2apTZQppO4yw’
【代码记录0929】python语音转文字,可视化操作初步版本。结果会存在txt里。_第1张图片
【代码记录0929】python语音转文字,可视化操作初步版本。结果会存在txt里。_第2张图片

运行环境说明:

PYTHON3
需要安装的库 :baidu-aip 和 pydub
需要安装的音频辅助工具文件 ffmpeg安装教程
一些音频相关的其他操作也在里面了

代码流程说明:

1、选择需要转文字的音频文件 电脑上双击能播放的都支持
2、将音频文件按固定时长分割 代码中是每30秒分割出一个wav文件 并保存
3、将分割出来的许多音频 再次利用ffmpeg挨个转化成pcm格式的文件
4、向百度发送pcm格式文件 获得转译的结果
5、将结果写入本地txt文件

(之所以这么复杂,非得转成pcm再转译,是因为其他格式文件 总是翻译成阴间结果)

完整代码:

from aip import AipSpeech
from pydub import AudioSegment
from pydub.utils import make_chunks
import os
import tkinter
from tkinter import filedialog

'''程序会打开选择文件夹对话框 手动选中要解压的文件'''
root = tkinter.Tk()
root.withdraw()
# 获得选择好的文件
Filepath = filedialog.askopenfilename(title='请选择要转译的音频文件 并选择打开')

print('因为点击了取消,并没有拿到文件,请重新选择文件')  if Filepath == '' else print(
    f'文件选择成功=> {Filepath} \n')

APP_ID = '24919015'
#填写百度控制台中相关开通了“音频文件转写”接口的应用的的API_KEY及SECRET_KEY
API_KEY = 'LXGs4gvpc81lSrzp94k4MIwm'
SECRET_KEY = 'H2Xzh2ltiQcedKsilcbI2apTZQppO4y'
# 百度AI库获取的参数
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
# 构造读取语音文件函数
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()

"""将本地文件按固定时长分割 然后转为pcm格式再转译"""

# 载入本地文件
local_audio = AudioSegment.from_file(Filepath, Filepath.split(".")[-1])
size = 30*1000  # 设置每块按多少毫秒分割  1秒 = 1000毫秒
chunks = make_chunks(local_audio, size)  # 将文件按 size 毫秒一块 进行切割
wav_file_name = []
pcm_file_name = []
orial_dir_address = os.path.dirname(Filepath)
print("orial_dir_address",orial_dir_address)
file_sep0 = '\\' if '\\' in Filepath else '/'
save_file_name = os.path.splitext(Filepath)[0].split(file_sep0)[-1]

save_file_path = orial_dir_address + file_sep0 + save_file_name
if not os.path.exists(save_file_path):
    print(f"创建{save_file_path}文件夹,今后音频文件都存在这里")
    os.mkdir(save_file_path)
else:
    print(save_file_path,"已存在")

print("原文件正在被分割成wav格式")
for i, chunk in enumerate(chunks):
    # i是索引,chunk是切割好的文件
    chunk_name = f"_chuank{i}.wav"
    # 保存文件
    # 文件路径
    file_path = save_file_path + file_sep0 + chunk_name
    chunk.export(file_path, format="wav")
    wav_file_name.append(file_path)
    pcm_file_name.append(file_path.split(".")[0]+".pcm")
print("所有的wav_file_name",wav_file_name)
print("所有的pcm_file_name",pcm_file_name)
print("分割完毕 开始转换成pcm格式")

for x in range(len(wav_file_name)):
    os.system(f"ffmpeg -y -i {wav_file_name[x]} -acodec pcm_s16le -f s16le -ac 1 -ar 16000 {pcm_file_name[x]} -loglevel quiet")
    print(f"{x+1}/{len(wav_file_name)}_pcm转化成功",pcm_file_name[x])
print("pcm转化完毕,开始向百度发送转译请求")
# 识别本地文件
content = []
error_content = []
for index,path in enumerate(pcm_file_name):
    try:
        results = client.asr(get_file_content(path), 'pcm', 16000, { 'dev_pid': 1537,})
        print(f"{index+1}/{len(pcm_file_name)}",results["result"])
        content.append("".join(results["result"]))
    except Exception as e:
        print(path,"这里有过报错!!!!!!!!!!!!!")
        error_content.append(path)
        print(e)
print("百度转译完毕,开始写入本地文件")
with open(f"{save_file_path}_转译结果.txt",'w') as f:
    for con in content:
        f.write(con+'\n')
    print(f"您的转译结果存储在当前目录下的:{save_file_path}_转译结果.txt 文件中")
if len(error_content) > 0 :
    print("这个音频没有翻译好,请手动补充",error_content)

运行结果展示

开始 直接可视化选择音频文件即可 告别每次更换文件名的烦恼 然后静静等待结果
【代码记录0929】python语音转文字,可视化操作初步版本。结果会存在txt里。_第3张图片
结果
【代码记录0929】python语音转文字,可视化操作初步版本。结果会存在txt里。_第4张图片

你可能感兴趣的:(代码篇,python,语音识别,人工智能)