来源:so.csdn.net
发布时间:Nov 26, 2020, 4:50:08 AM
原地址:https://blog.csdn.net/zkw_1998/article/details/110128093
由于我的测试经常需要对音频文件内容标注(根据语音的内容用拼音标注),一个一个人工标注很费时费力!那有没有简单点的方法,答案是有!!!一起学习吧~
1.在百度AI开发平台获取AppID、API Key、Secret Key,可以看我这篇博客
2.语音识别脚本如下:
# -*- coding: utf-8 -*-
import os
import requests
import base64
from pypinyin import lazy_pinyin
filepath = 'E:\\untitled1\\audio\\test.wav'
outpath = 'E:\\untitled1\\audio\\'
base_url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=%s&client_secret=%s"
APP_ID = ' ' # 填写之前在ai平台上获得的参数
API_KEY = ' ' # 填写之前在ai平台上获得的参数
SECRET_KEY = ' ' #填写之前在ai平台上获得的参数
HOST = base_url % (API_KEY, SECRET_KEY )
def getToken(host):
res = requests.post(host)
return res.json()['access_token']
def get_audio(file):
with open(file, 'rb') as f:
data = f.read()
return data
def speech2text(speech_data, token, dev_pid=1537):
FORMAT = 'wav'
RATE = '16000'
CHANNEL = 1
CUID = '*******'
SPEECH = base64.b64encode(speech_data).decode('utf-8')
data = {
'format': FORMAT,
'rate': RATE,
'channel': CHANNEL,
'cuid': CUID,
'len': len(speech_data),
'speech': SPEECH,
'token': token,
'dev_pid': dev_pid
}
url = 'https://vop.baidu.com/server_api'
headers = {'Content-Type': 'application/json'}
r = requests.post(url, json=data, headers=headers)
Null = r.json()
if 'result' in Null:
return Null['result'][0]
else:
return Null
if __name__ == '__main__':
TOKEN = getToken(HOST)
speech = get_audio(filepath)
result = speech2text(speech, TOKEN)
print(result) #打印中文识别结果 '打开吹风。'
#############将中文识别结果转为拼音#############
name1 = lazy_pinyin(result)
NAME = ''.join(name1)
new_name1 = NAME.split("。")
new_name2 = new_name1[0]
print(new_name2) #打印识别结果的拼音 'dakaichuifeng'
os.rename(filepath, outpath+new_name2 + '.wav') #标注文件,对文件重命名
运行上面的脚本可以把test.wav音频文件的内容识别并打印出来,并把文件用拼音标注。
2.效果图:
但是一个音频运行一次脚本,也太费时间了吧,所以做个批处理的操作吧~
3.批处理标注文件脚本如下:
# -*- coding: utf-8 -*-
import base64
import os
import requests
from pypinyin import lazy_pinyin
filepath = 'E:\\untitled1\\audio\\' # 文件夹路径
base_url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=%s&client_secret=%s"
APP_ID = ' ' # 填写之前在ai平台上获得的参数
API_KEY = ' ' # 填写之前在ai平台上获得的参数
SECRET_KEY = ' ' #填写之前在ai平台上获得的参数
HOST = base_url % (API_KEY, SECRET_KEY)
def getToken(host):
res = requests.post(host)
return res.json()['access_token']
def get_audio(file):
with open(file, 'rb') as f:
data = f.read()
return data
def speech2text(speech_data, token, dev_pid=1537):
FORMAT = 'wav'
RATE = '16000'
CHANNEL = 1
CUID = '*******'
SPEECH = base64.b64encode(speech_data).decode('utf-8')
data = {
'format': FORMAT,
'rate': RATE,
'channel': CHANNEL,
'cuid': CUID,
'len': len(speech_data),
'speech': SPEECH,
'token': token,
'dev_pid': dev_pid
}
url = 'https://vop.baidu.com/server_api'
headers = {'Content-Type': 'application/json'}
r = requests.post(url, json=data, headers=headers)
Null = r.json()
if 'result' in Null:
return Null['result'][0]
else:
return Null
#########批量重命名文件#############
for file in os.listdir(filepath):
filename = file.split('-')[0]
if os.path.isfile(os.path.join(filepath, file)) == True:
TOKEN = getToken(HOST)
speech = get_audio(filepath + file)
result = speech2text(speech, TOKEN)
print(result)
name1 = lazy_pinyin(result) # 将识别结果转换为拼音
NAME = ''.join(name1) # 换行
new_name1 = NAME.split("。")
new_name2 = new_name1[0]
print(new_name2)
os.rename(filepath + file, filepath + new_name2 + '.wav')
4.脚本运行前,文件名如图:
5.脚本运行后,文件名如图:
哈哈哈哈哈,还挺准确的~
6.语音识别更名器
把它搞成了一个小软件,没学过python做界面有点简陋…将就用吧~
下载地址:https://pan.baidu.com/s/1UuL-PgIyfaq0Cy0Ts-QfRw
提取码:1998
使用方法:
- 选择要进行语音识别更名的文件夹;
- 点击运行就ok了~
7.界面演示:
运行前:
运行后:
如果觉得对你有帮助,记得给我点个赞哟~