使用Java API对AWS服务的文本语音



我想使用AWS服务和AWS Java-SDK将语音转换为文本,但是我无法在AWS Java-SDK中找到任何API。有什么服务吗?我已经使用AWS Polly Service使用AWS Java-SDK将文本转换为语音,但不是反向(语音对文本)。怎么能完成?

最近我设法建立了一个Java客户其中包含"是"大约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客户端,将区域替换为对应于Bucket的区域。

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();

然后,我们将音频文件上传到Bucket

s3.putObject(BUCKET_NAME, fileName, new File(fullFileName));

bucket_name是带有存储桶名称的常数。文件名:不必是文件的名称,可以是我们要使用的任何标识符。

一旦我们将音频上传到存储桶,我们将创建转录作业。

    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 Alternative {
    private String confidence;
    private String content;
}
public class Transcript {
    private String transcript;
}

只需在需要时添加尝试/捕获。

我希望我没有忽略任何东西,这将是有用的,我花了一些时间来理解这个亚马逊模型,我希望那个时候避免其他人。

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

  StartTranscriptionJobRequest request = StartTranscriptionJobRequest.builder()
      .transcriptionJobName(transriptionJobName)
      .languageCode(LanguageCode.EsUS).settings(transcriptionSettings)
      .media(media).outputBucketName(BUCKET_NAME)
      .outputKey(outPutLocation)
      .build();

最新更新