AWS Transribe无法在boto3中没有LanguageCode的情况下启动_转录_作业 [英] Aws Transribe unable to start_transcription_job without LanguageCode in boto3
问题描述
我在S3
中有一个音频文件。
我不知道音频文件的语言。因此,我需要将IdentifyLanguage
用于start_transcription_job()
。
LanguageCode
将为空,因为我不知道音频文件的语言。
环境
使用
Python3.8运行时,
Boto3版本1.16.5
,
Botocore版本:1.19.5
,
没有Lambda层。
以下是我的转录作业代码:
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:
Missing required parameter in input: "LanguageCode"
Unknown 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
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())
"
]
}
此错误表示我必须指定LanguageCode
,而IdentifyLanguage
是无效参数。
LanguageCode
则不起作用,IdentifyLanguage
参数为未知参数
我使用以下命令在本地使用SAM应用程序进行测试:
sam local invoke MyHandler -e lambdaTheDirectoryevent.json
和Icdk deploy
,并签入Aws Lambda控制台,测试了相同的events.json
,但仍然收到相同的错误
我认为这是Lambda执行环境,我没有使用任何Lambda层。
我查看Aws转录的此文档:
https://docs.aws.amazon.com/transcribe/latest/dg/API_StartTranscriptionJob.html
和boto3
的此文档:
明确声明LanguageCode
不是必需的,IdentifyLanguage
是有效参数。
那么我错过了什么?对此有什么想法吗?我该怎么办?
更新:
我一直在搜索,并在网上询问了几个人,我想我应该先构建函数容器,让SAM将boto3打包到容器中。
所以我要做的是cdk synth
一个模板文件:
cdk synth --no-staging > template.yaml
然后:
sam build --use-container
sam local invoke MyHandler78A95900 -e lambdaTheDirectoryevent.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 issue here,但似乎无法重现此问题。
主要问题/问题:
无法start_transription_job
不带
LanguageCode
与
IdentifyLanguage=True
导致此问题的可能原因是什么,以及如何解决此问题(不知道音频文件的语言,我希望在不给出LanguageCode的情况下识别音频文件的语言)?
推荐答案
end我注意到这是因为出于某种原因,我的打包的lambda函数没有被上传。这是我在得到几个人的帮助后解决这个问题的方法。
首先修改定义我的lambda函数的CDK堆栈:
from aws_cdk import (
aws_lambda as lambda_,
core
)
from aws_cdk.aws_lambda_python import PythonFunction
class MyCdkStack(core.Stack):
def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
super().__init__(scope, id, **kwargs)
# define lambda
my_lambda = PythonFunction(
self, 'MyHandler',
entry='lambda/MyHandler',
index='app.py',
runtime=lambda_.Runtime.PYTHON_3_8,
handler='MyHandler',
timeout=core.Duration.seconds(10)
)
这将使用aws-lambda-python module,它将处理将所有必需的模块安装到扩展坞中。
接下来,cdk合成模板文件
cdk synth --no-staging > template.yaml
此时,它将捆绑PythonFunction
中定义的entry
路径中的所有内容,并将requirements.txt
中定义的所有必要依赖项安装在该entry
路径中。
接下来,构建码头容器
$ sam build --use-container
确保template.yaml
文件位于根目录中。这将构建一个docker容器,并且构件将构建在我的根目录的.aws-sam/build
目录中。
最后一步,使用sam:
调用函数sam local invoke MyHandler78A95900 -e path oevent.json
现在终于成功调用了我在上面的问题中提到的start_transcription_job
,没有任何错误。
结语:
- 一开始我只
pip install boto3
,这只会 在我的本地系统中安装boto3
。 - 然后,我
sam local invoke
没有先构建容器sam build --use-container
- 最后,我终于
sam build
,但在这一点上,我没有 将requirements.txt
中定义的内容绑定到 因此,需要使用aws-lambda-href="https://docs.aws.amazon.com/cdk/api/latest/docs/aws-lambda-python-readme.html" 模块如上所述。
这篇关于AWS Transribe无法在boto3中没有LanguageCode的情况下启动_转录_作业的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!