0
  • 视窗 7 专业版
  • PHP 7.0.2
  • AWS 转录 API 2017-10-26

嗨,我正在尝试使用 Amazon Web Services 使用 PHP 转录来自 IVR 的录音(请在音调之后留下您的名字等)。我可以将录音上传到我的 AWS 存储桶(所以事情是正确的),但是当我尝试开始转录作业时,我收到以下错误:“找不到操作:StartTranscriptionJob”

我可以使用 AWS CLI 让转录工作,因此我的系统似乎设置正常。网上关于这个问题的信息不多,我已经完成了所有常用的谷歌搜索,但信息不是很有帮助 - 例如:

https://docs.aws.amazon.com/transcribe/latest/dg/API_StartTranscriptionJob.html https://docs.aws.amazon.com/sdk-for-go/api/service/transcribeservice/#TranscribeService.StartTranscriptionJob

这是我的代码,StartTranscriptionJob 在最后:

<?php
require 'aws\aws-autoloader.php';
chdir('asr');
$logFile = 'asr.log';
$log = "\n\n".date("d/m/Y H:i:s");

###################
# get the recording
###################

$service   = htmlspecialchars($_GET["service"]);
$recording = htmlspecialchars($_GET["recording"]);

$ftp_server = "ftp.****";
$ftp_username = "****";
$ftp_userpass = "****";
$ftp_conn = ftp_connect($ftp_server,7721) or die("Could not connect to $ftp_server");
ftp_login($ftp_conn, $ftp_username, $ftp_userpass);
ftp_chdir($ftp_conn,'Recordings');
ftp_pasv($ftp_conn, true);
ftp_chdir($ftp_conn,$service);
ftp_get ($ftp_conn , $recording , $recording, FTP_BINARY);
ftp_close($ftp_conn);

######################
# Upload to AWS bucket
######################

use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

$credentials = new Aws\Credentials\Credentials('****', '****');
$bucket = 'asr-bucket-test';
$keyname = $recording;

$s3 = new S3Client([
   'profile' => 'default',
   'version' => 'latest',
   'region'  => 'us-west-2',
   'credentials' => $credentials
]);

try {
   // Upload data.
   $result = $s3->putObject([
       'Bucket' => $bucket,
       'Key'    => $keyname,
       'SourceFile'  => '\xampp\htdocs\****.co.uk\asr\\'.$recording,
       'ACL'    => 'public-read'
   ]);

   // Print the URL to the object.
   $log.= "\n".$result['ObjectURL'] . PHP_EOL;
} catch (S3Exception $e) {
   $log.= "\n".$e->getMessage() . PHP_EOL;
}

############
# Transcribe
############

try {
  $result = $s3->StartTranscriptionJob([
  'LanguageCode' => 'en-US', // REQUIRED
  'Media' => [ 
    'MediaFileUri' => 'https://s3-us-west-2.amazonaws.com/asr-bucket-test/'.$recording, 
  ],
  'MediaFormat' => 'wav', // REQUIRED
  'OutputBucketName' => $bucket,
  'Settings' => [
  #  'ChannelIdentification' => true || false,
    'MaxSpeakerLabels' => 5,
  #  'ShowSpeakerLabels' => true || false,
  #  'VocabularyName' => $recording
  ],
  'TranscriptionJobName' => 'test_job', // REQUIRED
  ]);
  $log.="\n".$result;
} catch (Exception $e) {
  $log.="\nError: Cannot start transcripion job " . $e->getMessage();
}

file_put_contents($logFile, $log,FILE_APPEND);
exit();

?>
4

2 回答 2

0

您必须创建一个新的 TranscribeServiceClient,然后通过它进行连接。这是我的工作代码中的一个片段:

    $transcribe = new Aws\TranscribeService\TranscribeServiceClient([
        'region'  => $region,
        'version' => 'latest',
        'credentials' => [
            'key'    => $accessKey,
            'secret' => $secretKey,
        ],
    ]);

    //print_r($transcribe);

    $result = $transcribe->startTranscriptionJob([
        'LanguageCode' => $languageCode, // REQUIRED
        'Media' => [ // REQUIRED
            'MediaFileUri' => $mediaURI,
        ],
        'MediaFormat' => $fileExt, // REQUIRED
        'OutputBucketName' => $bucketName,
        'Settings' => [
            'ChannelIdentification' => false,
            'MaxSpeakerLabels' => 5,
            'ShowSpeakerLabels' => true,
            'VocabularyName' => '',
        ],
        'TranscriptionJobName' => $fileName . "-" . date('Ymd-his') // REQUIRED
    ]);
于 2019-05-28T04:37:25.583 回答
0

您正在尝试使用S3Client开始转录:

$result = $s3->StartTranscriptionJob

根据错误消息,S3 不支持该StartTranscriptionJob操作。您需要设置和使用TranscribeServiceClient.

您链接到适用于 Go 的 AWS 开发工具包文档,但您的代码是 PHP。PHP的相关文档:

于 2018-10-23T13:36:56.107 回答