1. 前言
在语音识别领域,腾讯云提供了语音识别和语音唤醒的服务。其中,语音识别服务支持实时语音转写、一句话识别和录音文件识别等功能。本文主要介绍如何使用Python与腾讯云接口对接,实现实时语音转写功能。
2. 创建腾讯云账号并开通语音识别服务
2.1 创建腾讯云账号
如果您还没有腾讯云账号,请前往 腾讯云官网 注册。
2.2 开通语音识别服务
在腾讯云管理控制台中,搜索并进入“语音识别” 服务,点击“立即开通”。
重点提示:语音识别的试用期是7天。开通后,可以先试用一下功能,熟悉服务和接口。
3. 安装Python SDK for Tencent Cloud
3.1 安装Python SDK
安装腾讯云Python SDK,可以通过pip安装。在命令行输入以下命令:
pip install tencentcloud-sdk-python==3.0.224
3.2 设置SecretId和SecretKey
在使用Python SDK调用腾讯云API之前,需要先设置腾讯云账户的 SecretId 和 SecretKey。 SecretId 和 SecretKey 相当于腾讯云的账户和密码,需要保护好。
在腾讯云控制台中,点击 左上角 的“账户”下的“访问管理”进入“访问秘钥”页,单击“新建密钥”获取SecretId和SecretKey。
3.3 导入Python SDK并设置SecretId和SecretKey
将SDK导入Python文件中
from tencentcloud.common import credential
from tencentcloud.asr.v20190614 import asr_client, models
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
SecretId = "Your SecretId"
SecretKey = "Your SecretKey"
cred = credential.Credential(SecretId, SecretKey)
4. 实现实时语音转写功能
4.1 搭建框架
根据腾讯云语音识别功能接口,将实时语音转写功能放在 loop() 中,建立 main() 函数作为程序入口。
def loop():
# 实时语音识别
def main():
loop()
if __name__ == '__main__':
main()
4.2 设置参数
设置请求参数。根据您的需求,可以设置不同的请求参数。例如:语音编码、是否开启腾讯云分贝音频过滤等。
params = {
'EngineModelType': '16k_zh', # 模型类型:中文普通话16k,默认16k_zh和16k_en
'ChannelNum': 1, # 声道数
'ResTextFormat': 0, # 结果文本编码方式,0为UTF-8,1为BASE64编码
'SourceType': 1, # 语音源的存储位置,0表示腾讯云,1表示用户自有资源;
'NeedVad': 0, # 识别之前是否去除音频文件开头结尾静音部分:0-否,1-是
'VadSilenceTime': 5000, # 去除静音部分的静音长度阈值,单位为毫秒
'FilterDirty': 0, # 是否开启语音过滤:0-不开启,1-开启;
'FilterModal': 0, # 是否开启语音音量大小过滤:0-不开启,1-开启;
'FilterPunc': 0, # 是否开启语音标点符号过滤:0-不开启,1-开启;
' ConvertNumMode': 0, # 是否进行阿拉伯数字口语化处理:0 - 否,1 - 是,也就是将阿拉伯数字1, 2, 3,...10,11, 12,变为一,二,三,...十一,十二。目前仅中文普通话支持(默认为0)。
}
config = models.RecognizeConfig()
config.ChannelNum = params['ChannelNum']
config.ResTextFormat = params['ResTextFormat']
config.SourceType = params['SourceType']
config.VadSilenceTime = params['VadSilenceTime']
request = models.CreateRecTaskRequest()
request.EngineModelType = params['EngineModelType']
request.RecognizeConfig = config
request.Data = input_stream
request.NeedVad = params['NeedVad'] == 1
request.FilterDirty = params['FilterDirty']
request.FilterModal = params['FilterModal']
request.FilterPunc = params['FilterPunc']
request.ConvertNumMode = params['ConvertNumMode']
4.3 调用API
创建ASR客户端和ClientProfile,并设置它们的参数。
clientProfile = ClientProfile()
httpProfile = HttpProfile()
httpProfile.Endpoint = "asr.tencentcloudapi.com"
client = asr_client.AsrClient(cred, "ap-guangzhou", clientProfile)
client._httpProfile = httpProfile
resp = client.CreateRecTask(request)
print(resp.to_json_string(indent=2))
4.4 完整代码
以下是完整的 Python 代码:
import pyaudio
import os
import time
import wave
from threading import Thread
from tencentcloud.common import credential
from tencentcloud.asr.v20190614 import asr_client, models
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
SecretId = "Your SecretId"
SecretKey = "Your SecretKey"
cred = credential.Credential(SecretId, SecretKey)
# 实时语音识别
def asr(input_stream):
params = {
'EngineModelType': '16k_zh', # 模型类型:中文普通话16k,默认16k_zh和16k_en
'ChannelNum': 1, # 声道数
'ResTextFormat': 0, # 结果文本编码方式,0为UTF-8,1为BASE64编码
'SourceType': 1, # 语音源的存储位置,0表示腾讯云,1表示用户自有资源;
'NeedVad': 0, # 识别之前是否去除音频文件开头结尾静音部分:0-否,1-是
'VadSilenceTime': 5000, # 去除静音部分的静音长度阈值,单位为毫秒
'FilterDirty': 0, # 是否开启语音过滤:0-不开启,1-开启;
'FilterModal': 0, # 是否开启语音音量大小过滤:0-不开启,1-开启;
'FilterPunc': 0, # 是否开启语音标点符号过滤:0-不开启,1-开启;
' ConvertNumMode': 0, # 是否进行阿拉伯数字口语化处理:0 - 否,1 - 是,也就是将阿拉伯数字1, 2, 3,...10,11, 12,变为一,二,三,...十一,十二。目前仅中文普通话支持(默认为0)。
}
config = models.RecognizeConfig()
config.ChannelNum = params['ChannelNum']
config.ResTextFormat = params['ResTextFormat']
config.SourceType = params['SourceType']
config.VadSilenceTime = params['VadSilenceTime']
request = models.CreateRecTaskRequest()
request.EngineModelType = params['EngineModelType']
request.RecognizeConfig = config
request.Data = input_stream
request.NeedVad = params['NeedVad'] == 1
request.FilterDirty = params['FilterDirty']
request.FilterModal = params['FilterModal']
request.FilterPunc = params['FilterPunc']
request.ConvertNumMode = params['ConvertNumMode']
clientProfile = ClientProfile()
httpProfile = HttpProfile()
httpProfile.Endpoint = "asr.tencentcloudapi.com"
client = asr_client.AsrClient(cred, "ap-guangzhou", clientProfile)
client._httpProfile = httpProfile
resp = client.CreateRecTask(request)
print(resp.to_json_string(indent=2))
def loop():
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 16000
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
frames = []
while True:
if len(frames) > 0:
data = b''.join(frames)
frames = []
asr(data)
data = stream.read(CHUNK)
frames.append(data)
stream.stop_stream()
stream.close()
p.terminate()
def main():
loop()
if __name__ == '__main__':
main()
5. 总结
本文介绍了如何使用Python与腾讯云接口对接,实现实时语音转写功能。首先,需要在腾讯云上创建账号并开通语音识别服务;然后,较为详细地介绍了Python SDK的安装和配置;最后,给出了完整的代码实现,并介绍了一些重要的参数设置。
总的来说,使用腾讯云语音识别服务进行实时语音转写是一项不错的选择。腾讯云提供可靠的服务,同时也极大地降低了开发者的工作量,让开发者可以更加专注于实现业务逻辑。