gpt4 book ai didi

amazon-web-services - AWS 服务使用 Java API 进行语音到文本

转载 作者:行者123 更新时间:2023-12-04 08:01:47 25 4
gpt4 key购买 nike

我想使用 AWS 服务和 AWS java-sdk 将语音转换为文本,但我在 AWS java-sdk 中找不到任何 API。是否有任何服务可以做到这一点?我使用 AWS Polly 服务使用 AWS java-sdk 将文本转换为语音,但不是相反(语音到文本)。这怎么可能?

最佳答案

最近我设法构建了一个 Java 客户端,在为此投入时间之前,重要的是要说,截至本出版物发布之日,获取包含"is"的音频文本所需的时间约为 1 分钟。
鉴于这种表现,我选择了 Google 服务。

也就是说,我分享了可改进的代码,因为它旨在执行可行性测试。

此服务要求将音频存储在存储桶中,然后指示转录 uri,然后启动工作并以类似方式以 json 格式获取结果。

在示例中,我们选择等待工作完成,然后获取结果。

主要依赖有:

    <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-transcribe -->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-transcribe</artifactId>
<version>1.11.313</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-s3 -->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.11.313</version>
</dependency>

我选择的凭据:
static{
System.setProperty("aws.accessKeyId", "yourAccessK");
System.setProperty("aws.secretKey" , "shhhhhhhhhh");
}

在源代码中,我们将创建 S3 和 tanscribe 客户端,将区域替换为与存储桶对应的区域。
private AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion("us-east-1").withClientConfiguration(new ClientConfiguration()).withCredentials(new DefaultAWSCredentialsProviderChain() ).build();
private AmazonTranscribe client = AmazonTranscribeClient.builder().withRegion("us-east-1").build();

然后我们将音频文件上传到存储桶
s3.putObject(BUCKET_NAME, fileName, new File(fullFileName));

BUCKET_NAME 是带有存储桶名称的常量。
fileName:它不一定是文件名,它可以是我们想要使用的任何标识符。

将音频上传到存储桶后,我们将创建转录作业。
    StartTranscriptionJobRequest request = new StartTranscriptionJobRequest();

request.withLanguageCode(LanguageCode.EsUS);

Media media = new Media();

media.setMediaFileUri(s3.getUrl(BUCKET_NAME, fileName).toString());

request.withMedia(media).withMediaSampleRateHertz(8000);

查看语言选项和 MediaSampleRateHertz。

为作业创建一个名称。
String transcriptionJobName = "myJob"; // consider a unique name as an id.

并完成请求并开始工作
request.setTranscriptionJobName(transcriptionJobName);
request.withMediaFormat("wav");

client.startTranscriptionJob(request);

在这种情况下等待答案的循环,还有其他更有效的选择。
GetTranscriptionJobRequest jobRequest = new GetTranscriptionJobRequest();
jobRequest.setTranscriptionJobName(transcriptionJobName);
TranscriptionJob transcriptionJob;

while( true ){
transcriptionJob = client.getTranscriptionJob(jobRequest).getTranscriptionJob();
if( transcriptionJob.getTranscriptionJobStatus().equals(TranscriptionJobStatus.COMPLETED.name()) ){

transcription = this.download( transcriptionJob.getTranscript().getTranscriptFileUri(), fileName);

break;

}else if( transcriptionJob.getTranscriptionJobStatus().equals(TranscriptionJobStatus.FAILED.name()) ){

break;
}
// to not be so anxious
synchronized ( this ) {
try {
this.wait(50);
} catch (InterruptedException e) { }
}

}

transcriptionJob.getTranscript().getTranscriptFileUri() 返回一个 uri 以与任何 http 客户端一起使用,无论是 Apache HttpClient 还是在我的情况下我更喜欢 JODD ( https://jodd.org/http/ )

下载:
private AmazonTranscription download( String uri, String fileName ){
HttpResponse response = HttpRequest.get(uri).send();
String result = response.charset("UTF-8").bodyText();
// result is a json
return gson.fromJson(result, AmazonTranscription.class);
}

AmazonTranscription 是我创建的一个包含 json 的类。
我分享了必要的类来包含 json 解析,我避免了集合并且变得不那么广泛。
public class AmazonTranscription {

private String jobName;
private String accountId;
private Result results;
private String status;
}

public class Item {

private String start_time;
private String end_time;
private List<Alternative> alternatives = new ArrayList<Alternative>();
private String type;
}

public class Result {

private List<Transcript> transcripts = new ArrayList<Transcript>();
private List<Item> items = new ArrayList<Item>();
}

public class Transcript {

private String transcript;
}

只需在需要的地方添加 try/catch 即可。

我希望我没有忽略任何东西并且它会很有用,我花了一些时间来理解这个亚马逊模型,我希望那段时间避免其他人。

对不起,如果写作中有错误,但这不是我的母语。

关于amazon-web-services - AWS 服务使用 Java API 进行语音到文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47586265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com