使用阿里云服务进行语音转文字

阿里云语音转文本

一、安装ffmpeg

跟随ffmpeg教程完成安装和配置环境变量

二、使用ffmpeg批处理录音

因为阿里云语音转文字模型只支持16k或8k的采样率,因此需要对录音进行重采样

  • 使用如下代码创建bat文件,处理录音
@echo off
title 正在转换
if not exist wav mkdir wav
for /f %%i in ('dir /b *.m4a') do ffmpeg -i %%i -acodec pcm_s16le -ac 1 -ar 16000 wav\%%~ni.wav -y
pause

此文件放在自己的音频文件夹中,会自动识别后缀为m4a的文件,将其转换为采样率为16k的wav文件保存在同级目录中

三、安装所需的python库

使用如下代码安装阿里云配套库

pip install aliyun-python-sdk-core==2.13.3

同时还需要的库有jsontime,不过都是自带库无需安装

四、将音频文件上传至OSS

下载阿里云推荐的oss界面化软件,使用自己的阿里云AccessKey登录

  • 下图为获取自己的AccessKey

image-20230411105229997

  • 下图为OSS界面化软件创建Bucket

image-20230411105552882

  • 再在Bucket里上传转采样率之后的音频即可

五、开通阿里云语音转文字服务

阿里云智能语音交互服务
image-20230411111812606
获得appkey

六、python 语音转文字

  • 通过如下代码转文字
# -*- coding: utf8 -*-
import json
import time
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest


def fileTrans(akId, akSecret, appKey, fileLink):
    # 地域ID,固定值。
    REGION_ID = "cn-shanghai"
    PRODUCT = "nls-filetrans"
    DOMAIN = "filetrans.cn-shanghai.aliyuncs.com"
    API_VERSION = "2018-08-17"
    POST_REQUEST_ACTION = "SubmitTask"
    GET_REQUEST_ACTION = "GetTaskResult"
    # 请求参数
    KEY_APP_KEY = "appkey"
    KEY_FILE_LINK = "file_link"
    KEY_VERSION = "version"
    KEY_ENABLE_WORDS = "enable_words"
    # 是否开启智能分轨
    KEY_AUTO_SPLIT = "auto_split"
    # 响应参数
    KEY_TASK = "Task"
    KEY_TASK_ID = "TaskId"
    KEY_STATUS_TEXT = "StatusText"
    KEY_RESULT = "Result"
    # 状态值
    STATUS_SUCCESS = "SUCCESS"
    STATUS_RUNNING = "RUNNING"
    STATUS_QUEUEING = "QUEUEING"
    # 创建AcsClient实例
    client = AcsClient(akId, akSecret, REGION_ID)
    # 提交录音文件识别请求
    postRequest = CommonRequest()
    postRequest.set_domain(DOMAIN)
    postRequest.set_version(API_VERSION)
    postRequest.set_product(PRODUCT)
    postRequest.set_action_name(POST_REQUEST_ACTION)
    postRequest.set_method('POST')
    # 新接入请使用4.0版本,已接入(默认2.0)如需维持现状,请注释掉该参数设置。
    # 设置是否输出词信息,默认为false,开启时需要设置version为4.0。
    task = {KEY_APP_KEY: appKey, KEY_FILE_LINK: fileLink, KEY_VERSION: "4.0", KEY_ENABLE_WORDS: False}
    # 开启智能分轨,如果开启智能分轨,task中设置KEY_AUTO_SPLIT为True。
    # task = {KEY_APP_KEY : appKey, KEY_FILE_LINK : fileLink, KEY_VERSION : "4.0", KEY_ENABLE_WORDS : False, KEY_AUTO_SPLIT : True}
    task = json.dumps(task)
    print(task)
    postRequest.add_body_params(KEY_TASK, task)
    taskId = ""
    try:
        postResponse = client.do_action_with_exception(postRequest)
        postResponse = json.loads(postResponse)
        print(postResponse)
        statusText = postResponse[KEY_STATUS_TEXT]
        if statusText == STATUS_SUCCESS:
            print("录音文件识别请求成功响应!")
            taskId = postResponse[KEY_TASK_ID]
        else:
            print("录音文件识别请求失败!")
            return
    except ServerException as e:
        print(e)
    except ClientException as e:
        print(e)
    # 创建CommonRequest,设置任务ID。
    getRequest = CommonRequest()
    getRequest.set_domain(DOMAIN)
    getRequest.set_version(API_VERSION)
    getRequest.set_product(PRODUCT)
    getRequest.set_action_name(GET_REQUEST_ACTION)
    getRequest.set_method('GET')
    getRequest.add_query_param(KEY_TASK_ID, taskId)
    # 提交录音文件识别结果查询请求
    # 以轮询的方式进行识别结果的查询,直到服务端返回的状态描述符为"SUCCESS"、"SUCCESS_WITH_NO_VALID_FRAGMENT",
    # 或者为错误描述,则结束轮询。
    statusText = ""
    while True:
        try:
            getResponse = client.do_action_with_exception(getRequest)
            getResponse = json.loads(getResponse)
            print(getResponse)
            statusText = getResponse[KEY_STATUS_TEXT]
            if statusText == STATUS_RUNNING or statusText == STATUS_QUEUEING:
                # 继续轮询
                time.sleep(10)
            else:
                # 退出轮询
                break
        except ServerException as e:
            print(e)
        except ClientException as e:
            print(e)
    if statusText == STATUS_SUCCESS:
        print("录音文件识别成功!")
    else:
        print("录音文件识别失败!")
    return getResponse['Result']['Sentences']


accessKeyId = "你的accessKey"
accessKeySecret = "你的accessKeySecret"
appKey = "你的appKey"
fileLink = "你的文件地址"
# 执行录音文件识别
r=fileTrans(accessKeyId, accessKeySecret, appKey, fileLink)
print(r)
temp=[]
for sentence in r:
    temp.append(sentence["Text"])
e=''.join(temp)
filename="要保存的文件名"
with open(filename,'w', encoding='utf-8') as f:
    f.write(e)

对这四个部分进行修改即可

accessKeyId = "你的accessKey"
accessKeySecret = "你的accessKeySecret"
appKey = "你的appKey"
filename="要保存的文件名"
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您可以使用阿里云语音合成服务来实现Java文字语音的功能。以下是基本步骤: 1. 登录阿里云控制台,进入语音合成服务页面,创建一个语音合成应用,获取accessKeyId和accessKeySecret。 2. 下载并引入阿里云提供的Java SDK,配置accessKeyId和accessKeySecret。 3. 调用SDK提供的方法,设置需要换的文本内容和音频格式等参数,调用语音合成接口,获取语音文件。 4. 播放语音文件或保存语音文件到本地。 以下是一个简单的示例代码: ``` import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.green.model.v20170112.VoiceIdentityCheckRequest; import com.aliyuncs.green.model.v20170112.VoiceIdentityCheckResponse; import com.aliyuncs.green.model.v20170112.VoiceIdentityUnbindRequest; import com.aliyuncs.green.model.v20170112.VoiceIdentityUnbindResponse; import com.aliyuncs.green.model.v20170112.VoiceStartCheckRequest; import com.aliyuncs.green.model.v20170112.VoiceStartCheckResponse; import com.aliyuncs.green.model.v20170112.VoiceStartRegisterRequest; import com.aliyuncs.green.model.v20170112.VoiceStartRegisterResponse; import com.aliyuncs.green.model.v20170112.VoiceSubmitRequest; import com.aliyuncs.green.model.v20170112.VoiceSubmitResponse; import com.aliyuncs.http.MethodType; public class AliyunVoiceSDKSample { /** * accessKeyId和accessKeySecret是阿里云账号的访问密钥,可以在阿里云控制台的AccessKey管理页面创建和查看。 * 访问密钥信息需要严格保密,只有获得者才能访问阿里云资源和API,请勿泄露。 */ private static final String ACCESS_KEY_ID = "<your_access_key_id>"; private static final String ACCESS_KEY_SECRET = "<your_access_key_secret>"; public static void main(String[] args) { // 创建DefaultAcsClient实例并配置Endpoint DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", ACCESS_KEY_ID, ACCESS_KEY_SECRET); DefaultAcsClient client = new DefaultAcsClient(profile); // 创建VoiceStartRegisterRequest并设置参数 VoiceStartRegisterRequest request = new VoiceStartRegisterRequest(); request.setMethod(MethodType.POST); request.setIdentityType(1); // 设置身份类型,1为手机号码 request.setIdentity("13800000000"); // 设置手机号码 request.setBizType("default"); // 设置业务类型 request.setSource("default"); // 设置注册来源 try { // 调用VoiceStartRegister接口进行语音验证码注册 VoiceStartRegisterResponse response = client.getAcsResponse(request); String registerId = response.getRegisterId(); // 获取注册ID // 创建VoiceStartCheckRequest并设置参数 VoiceStartCheckRequest checkRequest = new VoiceStartCheckRequest(); checkRequest.setMethod(MethodType.POST); checkRequest.setIdentityType(1); // 设置身份类型,1为手机号码 checkRequest.setIdentity("13800000000"); // 设置手机号码 checkRequest.setBizType("default"); // 设置业务类型 checkRequest.setSource("default"); // 设置注册来源 checkRequest.setRegisterId(registerId); // 设置注册ID // 调用VoiceStartCheck接口进行语音验证 VoiceStartCheckResponse checkResponse = client.getAcsResponse(checkRequest); String checkCode = checkResponse.getCheckCode(); // 获取语音验证码 // 提交语音验证码 VoiceSubmitRequest submitRequest = new VoiceSubmitRequest(); submitRequest.setMethod(MethodType.POST); submitRequest.setIdentityType(1); // 设置身份类型,1为手机号码 submitRequest.setIdentity("13800000000"); // 设置手机号码 submitRequest.setCheckCode(checkCode); // 设置语音验证码 submitRequest.setBizType("default"); // 设置业务类型 submitRequest.setSource("default"); // 设置注册来源 // 调用VoiceSubmit接口提交语音验证码 VoiceSubmitResponse submitResponse = client.getAcsResponse(submitRequest); boolean success = submitResponse.getSuccess(); // 获取提交结果 if (success) { System.out.println("语音验证码验证成功!"); } else { System.out.println("语音验证码验证失败!"); } } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { e.printStackTrace(); } } } ``` 注意:以上示例代码仅为演示语音验证码注册和验证的流程,具体的文字语音功能实现需要参考阿里云语音合成服务的API文档,并按照文档说明调用相关接口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值