Вот

ел бы преобразовать речь в текст, используя сервис AWS и AWS java-sdk, но я не могу найти какой-либо API в AWS java-sdk. Есть ли сервис, который делает это? Я использовал сервис AWS Polly для преобразования текста в речь, используя AWS java-sdk, но не наоборот (речь в текст). Как это можно сделать?

Ответы на вопрос(1)

прежде чем тратить на это время, важно сказать, что на момент публикации этой публикации время, необходимое для получения текста аудио, содержащего «Да», составляет приблизительно 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 и откроем клиент, заменим регион тем, который соответствует сегменту.

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, и я надеюсь избежать других в то время

Извините, если есть ошибки в написании, но это не мой родной язык.

 Edgardo Genini03 мая 2018 г., 22:18
Я рад узнать, что вы были полезны.
 Sheikh Abdul Wahid12 июн. 2018 г., 23:21
Большое спасибо. Это действительно сэкономило мое время.
 Sip03 мая 2018 г., 15:08
Спасибо, ваш ответ мне очень помог с java SDK для расшифровки aws!

Ваш ответ на вопрос