Перевод текста в сервис AWS с использованием Java API

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

5 ответов

Недавно мне удалось создать 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 и откроем клиент, заменим регион тем, который соответствует сегменту.

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

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

Попробуйте Amazon Transcribe - точную речь в тексте в масштабе. Это сервис AWS, который помогает разработчикам добавлять функции речи к тексту в своих приложениях. Transcribe - это сервис автоматического распознавания речи (ASR). Он поддерживает другие сервисы AWS в качестве источника ввода. Например, вы можете использовать AWS S3 сохраненные файлы MP3 в качестве источника ввода.

Amazon Transcribe работает, начиная работу с API. Существует три типа действий API.

  • StartTranscriptionJob
  • GetTranscriptionJob
  • ListTranscriptionJobs

Дополнительная информация Блог AWS для документов: AWS Transcribe Docs

Пример кода доступен по адресу https://docs.aws.amazon.com/transcribe/latest/dg/getting-started-sdk.html в разделе «Пакетная расшифровка».

       StartTranscriptionJobRequest request = StartTranscriptionJobRequest.builder()
       .transcriptionJobName(transcriptionJobName)
       .languageCode(LanguageCode.EN_US.toString())
       .mediaSampleRateHertz(16000)
       .mediaFormat(mediaType)
       .media(myMedia)
       .outputBucketName(outputS3BucketName)
       .build();
        StartTranscriptionJobRequest request = StartTranscriptionJobRequest.builder()
      .transcriptionJobName(transriptionJobName)
      .languageCode(LanguageCode.EsUS).settings(transcriptionSettings)
      .media(media).outputBucketName(BUCKET_NAME)
      .outputKey(outPutLocation)
      .build();

Вы можете использовать Amazon Transcribe. Это служба автоматического распознавания речи (ASR), которая позволяет разработчикам легко добавлять возможности речи к тексту в свои приложения. Используя API Amazon Transcribe, вы можете анализировать аудиофайлы, хранящиеся в Amazon S3, и заставить сервис возвращать текстовый файл транскрибированной речи.

Для получения дополнительной информации обратитесь к документации здесь.

Другие вопросы по тегам