AWS Transribe无法在boto3中没有LanguageCode的情况下启动_转录_作业 [英] Aws Transribe unable to start_transcription_job without LanguageCode in boto3

查看:8
本文介绍了AWS Transribe无法在boto3中没有LanguageCode的情况下启动_转录_作业的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在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是无效参数。

100%确定S3中存在音频文件。但如果没有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的此文档:

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/transcribe.html#TranscribeService.Client.start_transcription_job

明确声明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

  1. 不带LanguageCode

  2. 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,没有任何错误。

结语:

  1. 一开始我只pip install boto3,这只会 在我的本地系统中安装boto3
  2. 然后,我sam local invoke没有先构建容器sam build --use-container
  3. 最后,我终于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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆