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