前言
收到了Azure的邮件,没想到学生认证还真能续期,这样我又可以把网站放到上面苟延残喘一会儿了。
You have 30 days left on your subscription.
We hope you’re enjoying Azure for Students.
Your 12-month subscription is due for renewal within the next 30 days. If you’re currently a student, renew now to receive an additional USD100 in Azure credit plus access to more than 25 professional developer products for 12 months and free learning resources to help you advance your skills.
最近的实习中,有遇到做类似会议纪要的工作,我在想是不是可以先把语音转换成文本,这样我就不会那么手忙脚乱。国内的做的最好的中文语言识别也许是讯飞听见,价格也不贵,新用户免费30分钟,之后每小时20元,调用api的话,好像可以免费50小时,不过需要上传身份证来实名认证。
所以我索性使用了Azure的语音转文本服务,免费账户每个月可以使用5小时,付费账户每小时1美元,可以从学生优惠赠送额度里扣除,免费账户可以随时转换成付费账户。
如果你还没有学生优惠的话,可以参考这里:利用学生邮箱申请微软Azure100美元额度,可用一年vps
正文开始
1 新建服务
访问官网链接:https://azure.microsoft.com/zh-cn/services/cognitive-services/speech-to-text/
选择“已在使用Azure,立即免费试用此服务”
登录你的微软账号,然后:
随便填一个名称; 选择你的学生订阅,或者别的什么订阅; 选择位置,我一般选东亚(香港),速度快一点; 选择定价层,免费或者付费都可以; 选择资源组,或者新建资源组。
等待资源部署完成,点击“转到资源”。
2 开始使用
2.1 点击“密钥和终结点”
2.2 复制并记下你的密钥和位置,有两个密钥,随便记下哪一个都可以
推荐读者按照微软的官方文档 来使用语音转文本服务,接下来的步骤只是官网中QuickStart的改编版本,请读者仔细甄别!
2.3 准备好你的录音/音频文件
根据微软官方文档,支持的音频流格式为 WAV(16 KHz 或 8 kHz,16 位,单声道 PCM),所以一般手机录音的m4a格式不能直接处理,需要通过GStreamer处理。当然,也可以去这里转换:https://www.aconvert.com/cn/audio/m4a-to-wav/
需要设定的地方有四个:
选取文件; 设定目标格式:wav; 设定比特率:64k或32k; 设定采样率:11025。
点击转换并下载转换后的wav文件。
2.4 运行下列Python代码
代码粗糙,仅作示例用
import azure.cognitiveservices.speech as speechsdk
import time, logging
from easygui import fileopenbox
from easygui import filesavebox
# 日志存储在当前目录的speech_to_text.log中
logging.basicConfig(filename='speech_to_text.log', level='DEBUG')
sub_key = input('输入你的订阅密钥:')
region = input('输入你的地区:')
filename = fileopenbox(msg='选择要转换的音频文件', title='选择要转换的音频文件', filetypes=['\*.wav'])
save_as = filesavebox(msg='设定存储到的文本文件', title='设定存储到的文本文件', default='result.txt', filetypes=['\*.txt'])
speech_config = speechsdk.SpeechConfig(subscription=sub_key, region=region)
def work(filename):
speech_config.speech_recognition_language = 'zh-cn'
audio_config = speechsdk.audio.AudioConfig(filename=filename)
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)
done = False
def stop_cb(evt):
logging.debug('CLOSING on {}'.format(evt))
speech_recognizer.stop_continuous_recognition()
nonlocal done
done = True
def write(evt):
with open(save_as, 'a+') as file:
file.writelines(evt.result.text)
file.writelines('\n\n')
file.close()
speech_recognizer.recognized.connect(write)
speech_recognizer.session_started.connect(lambda evt: logging.debug('SESSION STARTED: {}'.format(evt)))
speech_recognizer.session_stopped.connect(lambda evt: logging.debug('SESSION STOPPED {}'.format(evt)))
speech_recognizer.canceled.connect(lambda evt: logging.debug('CANCELED {}'.format(evt)))
speech_recognizer.session_stopped.connect(stop_cb)
speech_recognizer.canceled.connect(stop_cb)
speech_recognizer.start_continuous_recognition()
while not done:
time.sleep(0.5)
work(filename)
等待完成即可。
虽说识别的精度还可以,不过那样也得演讲人好好说话才可以。遇到一句话重复很多次,还有嗯嗯啊啊的语气词,那样我也没辙了。
Comments | NOTHING