У меня есть аудиофайл в S3
.
Я не знаю языка аудиофайла. Поэтому мне нужно использовать IdentifyLanguage
вместо start_transcription_job()
.
LanguageCode
будет пустым, поскольку я не знаю языка аудиофайла.
Окружающая среда
Используется среда выполнения Python 3.8, версия boto3 1.16.5
, версия ботокора: 1.19.5
, без Lambda Layer.
Вот мой код для работы по расшифровке:
mediaFileUri = 's3://'+ bucket_name+'/'+prefixKey
transcribe_client = boto3.client('transcribe')
response = transcribe_client.start_transcription_job(
TranscriptionJobName="abc",
IdentifyLanguage=True,
Media={
'MediaFileUri':mediaFileUri
},
)
Затем я получаю такую ошибку:
{
"errorMessage": "Parameter validation failed:\nMissing required parameter in input: \"LanguageCode\"\nUnknown parameter in input: \"IdentifyLanguage\", must be one of: TranscriptionJobName, LanguageCode, MediaSampleRateHertz, MediaFormat, Media, OutputBucketName, OutputEncryptionKMSKeyId, Settings, ModelSettings, JobExecutionSettings, ContentRedaction",
"errorType": "ParamValidationError",
"stackTrace": [
" File \"/var/task/app.py\", line 27, in TranscribeSoundToWordHandler\n response = response = transcribe_client.start_transcription_job(\n",
" File \"/var/runtime/botocore/client.py\", line 316, in _api_call\n return self._make_api_call(operation_name, kwargs)\n",
" File \"/var/runtime/botocore/client.py\", line 607, in _make_api_call\n request_dict = self._convert_to_request_dict(\n",
" File \"/var/runtime/botocore/client.py\", line 655, in _convert_to_request_dict\n request_dict = self._serializer.serialize_to_request(\n",
" File \"/var/runtime/botocore/validate.py\", line 297, in serialize_to_request\n raise ParamValidationError(report=report.generate_report())\n"
]
}
Эта ошибка означает, что я должен указать LanguageCode
, а IdentifyLanguage
является недопустимым параметром.
100% уверен, что аудиофайл существует в S3. Но без LanguageCode
это не работает, а параметр IdentifyLanguage
- неизвестный параметр.
Я использую приложение SAM для локального тестирования с помощью этой команды:
sam local invoke MyHandler -e lambda\TheDirectory\event.json
И я cdk deploy
, и проверяю в Aws Lambda Console, тестировал то же events.json
, но все равно получаю ту же ошибку
Я думаю, что это среда Lambda Execution, я не использовал какой-либо Lambda Layer.
Я просматриваю эти документы от Aws Transcribe:
https://docs.aws.amazon.com/transcribe/latest/dg/API_StartTranscriptionJob.html
и это документы boto3
:
Четко укажите, что LanguageCode
не требуется, а IdentifyLanguage
является допустимым параметром.
Так что я упускаю? Есть идеи по этому поводу? Что я должен делать?
Обновление:
Я продолжаю искать и спросил пару человек в Интернете, я думаю, что я должен создать функциональный контейнер 1st, чтобы позволить SAM упаковать boto3 в контейнер.
Итак, я делаю cdk synth
файл шаблона:
cdk synth --no-staging > template.yaml
Потом:
sam build --use-container
sam local invoke MyHandler78A95900 -e lambda\TheDirectory\event.json
Но все же я получаю ту же ошибку, но также отправляю трассировку стека
[ERROR] ParamValidationError: Parameter validation failed:
Missing required parameter in input: "LanguageCode"
Unknown parameter in input: "IdentifyLanguage", must be one of: TranscriptionJobName, LanguageCode, MediaSampleRateHertz, MediaFormat, Media, OutputBucketName, OutputEncryptionKMSKeyId, Settings, JobExecutionSettings, ContentRedaction
Traceback (most recent call last):
File "/var/task/app.py", line 27, in TranscribeSoundToWordHandler
response = response = transcribe_client.start_transcription_job(
File "/var/runtime/botocore/client.py", line 316, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/var/runtime/botocore/client.py", line 607, in _make_api_call
request_dict = self._convert_to_request_dict(
File "/var/runtime/botocore/client.py", line 655, in _convert_to_request_dict
request_dict = self._serializer.serialize_to_request(
File "/var/runtime/botocore/validate.py", line 297, in serialize_to_request
raise ParamValidationError(report=report.generate_report())
На самом деле понятия не имею, что я здесь делаю не так. Я также сообщаю о проблеме с github здесь, но, похоже, не могу воспроизвести проблему.
Главный вопрос / проблема:
Невозможно start_transription_job
без
LanguageCode
с
IdentifyLanguage=True
Какая возможная причина вызывает это, и как я могу решить эту проблему (я не знаю язык аудиофайла, я хочу определить язык аудиофайла без указания кода языка)?