7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Amazon Transcribeを調べてみた

Last updated at Posted at 2018-01-22

Amazon Transcribeとは

Amazon Transcribeは一言で言うと”Speech to Text”と呼ばれる、音声をテキスト情報に変換するサービスです。
話されている言語を機械学習の技術で識別し、テキスト情報に変換します。

この技術は以下のような新しいサービスやプロダクトの提供に役立ちます。

  • 映像ファイルから音声を認識し、クローズドキャプションを生成
  • コールセンター業務などでの問い合わせ内容の分析
  • 医療分野や法律分野での活用

また、”Amazon Translate”や”Amazon Polly”と連携して、生成したテキスト情報を翻訳し、再度翻訳した言語で音声に変換することなどもできます。

何ができるのか

Amazon Transcribeには以下の3つのオペレーションがあります。

  • StartTranscriptionJob : 非同期で音声をテキストに書き起こす
  • ListTranscriptionJobs : 開始された音声認識ジョブのリストを返す。 返して欲しいJobをステータスで絞り込むことができる
  • GetTranscriptionJob : 音声認識の結果を返す。結果にはJSON形式に変換された結果へのリンクが含まれている

Speech Input

インプットするファイルはS3 bucketに保管されている必要があります。
インプットファイルの仕様は以下のみ

  • FLAC、MP3、MP4、WAV
  • 尺は2時間未満

言語、フォーマット、サンプリングレートを指定する必要があります。

  • PCM 16ビットエンコーディングのFLACやWAVなどのロスレスフォーマットを使用。
  • サンプリングレートは8000 ~ 16000Hz

Amazon TranscribeのS3とその中のファイルへのアクセスを許可する必要があります。

Output JSON

Jobが完了するとJSONが含まれた結果が生成され、テキストファイルがS3に置かれます。
ファイルのIDはユーザー固有のURIとなっており、そのURIを利用することで結果を取得できます。

Ex)

 {
      "jobName":"job ID",
      "accountId":"account ID",
      "results": {
         "transcripts":[
            {
               "transcript":" that's no answer",
               "confidence":1.0
            }
         ],
         "items":[
            {
               "start_time":"0.180",
               "end_time":"0.470",
               "alternatives":[
                  {
                     "confidence":0.84,
                     "word":"that's"
                  }
               ]
            },
            {
               "start_time":"0.470",
               "end_time":"0.710",
               "alternatives":[
                  {
                     "confidence":0.99,
                     "word":"no"
                  }
               ]
            },
            {
               "start_time":"0.710",
               "end_time":"1.080",
               "alternatives":[
                  {
                     "confidence":0.874,
                     "word":"answer"
                  }
               ]
            }
         ]
      },
      "status":"COMPLETED"
   }
 

始め方

始めるにはAWSアカウント、ID、IAMユーザーが必要です。CLIの利用も可能です。

Step.1 AWSアカウント設定

いつも通りなので割愛

Step.2 CLI設定

いつも通りなので割愛

Step.3 コンソールでの利用開始

Jobの作成

1.各種情報の入力
 - Transcription job name : AWSアカウント毎にユニークである必要がある
 - Amazon s3 input URL: 音声ファイルが格納されているS3 busket。Transcribeと同一リージョンである必要がある
 - Language:インプットファイルの言語を選択
 - Format:インプットファイルのフォーマットを選択
 - Media sampling rate(Hz):インプットファイルのサンプリングレートを8000 ~ 48000Hzの間で指定。8000~16000Hzが推奨
2.「Create」を押す

Jobの確認

Jobのリストを表示。「Availability」にサーバーに結果が保管される残り期間が表示される。結果の保管期間は90日
Jobをクリックすると、詳細(Job名、残りの保管期間、I/OのファイルのS3パス)と結果の文字列が表示される。
「Code Samples」で該当JobについてのJSONファイルを取得可能

Step.4 API

CLI

Transcribeのテストをする場合

1.InputファイルをS3 バケットに配置する(Transcribeと同じリージョンに)
2. ファイル情報を含んだJSONファイルを作成する

{
    "TranscriptionJobName": "request ID", 
    "LanguageCode": "en-US", 
    "MediaFormat": "wav", 
    "Media": {
        "MediaFileUri": "https://S3 endpoint/test-transcribe/answer2.wav"
    }
}

3.下記コマンドを実行

aws transcribe start-transcription-job \
     --endpoint-url endpoint \
     --region region \
     --cli-input-json file://test-start-command.json 

・下記レスポンスが返れば成功


{
    "TranscriptionJob": {
        "TranscriptionJobName": "request ID",
        "LanguageCode": "en-US",
        "TranscriptionJobStatus": "IN_PROGRESS",
        "Media": {
            "MediaFileUri": "https://S3 endpoint/test-transcribe/answer2.wav"
        },
        "CreationTime": timestamp,
        "MediaFormat": "wav"
    }
}

Jobのリストを取得

1.Jobが完了していた場合、下記コマンドでステータスを取得する

aws transcribe get-transcription-job-results \
   --endpoint-url endpoint \
   --region endpoint \
   --request-id "DocTest-01"

・成功すればレスポンスは下記通り返ってくる

{
    "TranscriptionJob": {
        "TranscriptionJobName": "request ID",
        "LanguageCode": "en-US",
        "TranscriptionJobStatus": "COMPLETED",
        "Media": {
            "MediaFileUri": "input URI"
        },
        "CreationTime": timestamp,
        "CompletionTime": timestamp,
        "Transcript": {
            "TranscriptFileUri": "output URI"
        }
    }
}
```json

2.Output URIを使って翻訳されたテキストを取得

```json
{
      "jobName":"job ID",
      "accountId":"account ID",
      "results": {
         "transcripts":[
            {
               "transcript":" that's no answer",
               "confidence":1.0
            }
         ],
         "items":[
            {
               "start_time":"0.180",
               "end_time":"0.470",
               "alternatives":[
                  {
                     "confidence":0.84,
                     "word":"that's"
                  }
               ]
            },
            {
               "start_time":"0.470",
               "end_time":"0.710",
               "alternatives":[
                  {
                     "confidence":0.99,
                     "word":"no"
                  }
               ]
            },
            {
               "start_time":"0.710",
               "end_time":"1.080",
               "alternatives":[
                  {
                     "confidence":0.87,
                     "word":"answer"
                  }
               ]
            }
         ]
      },
      "status":"COMPLETED"
   }

SDK for Python(Boto)

・InputファイルをS3 バケットに配置する(Transcribeと同じリージョンに)。ファイル情報を含んだJSONファイルを作成する

from __future__ import print_function
import time
import boto3
transcribe = boto3.client('transcribe')
job_name = "job name"
job_uri = "https://S3 endpoint/test-transcribe/answer2.wav"
transcribe.start_transcription_job(
    TranscriptionJobName=job_name,
    Media={'MediaFileUri': job_uri},
    MediaFormat='wav',
    LanguageCode='en-US'
)
while True:
    status = transcribe.get_transcription_job(TranscriptionJobName=job_name)
    if status['TranscriptionJob']['TranscriptionJobStatus'] in ['COMPLETED', 'FAILED']:
        break
	print("Not ready yet...")
    time.sleep(5)
print(status)

・成功すればレスポンスは下記通り返ってくる

 {
      "jobName":"job ID",
      "accountId":"account ID",
      "results": {
         "transcripts":[
            {
               "transcript":" that's no answer",
               "confidence":1.0
            }
         ],
         "items":[
            {
               "start_time":"0.180",
               "end_time":"0.470",
               "alternatives":[
                  {
                     "confidence":0.84,
                     "word":"that's"
                  }
               ]
            },
            {
               "start_time":"0.470",
               "end_time":"0.710",
               "alternatives":[
                  {
                     "confidence":0.99,
                     "word":"no"
                  }
               ]
            },
            {
               "start_time":"0.710",
               "end_time":"1.080",
               "alternatives":[
                  {
                     "confidence":0.87,
                     "word":"answer"
                  }
               ]
            }
         ]
      },
      "status":"COMPLETED"
   }

認証とアクセスコントロール

・AWS Transcribeの利用にはCredentialが必要です。Credencialには認証とアクセスコントロールの設定を行う必要があります。

認証

・認証には以下のいずれかを使用します。

  • AWS Account ルートユーザー(非推奨)
  • IAM role
      (1) ユーザーごとの許可
      (2) AWSサービスのからのアクセス
      (3) EC2からのアクセス許可

アクセスコントロール

TranscribeへアクアセスするためのPermissionの管理

アクセスとアクションの確認

・誰が何にアクセスするかはは下記方法で定義します。
 - IAMポリシー:IAMユーザーやIAM roleに権限を付加する
 - リソースベースのポリシー:各AWSのサービスにAPIでアクセスする際に要求されるポリシー主にResource,Action,Effect,Principalなど

TranscribeのためのIAM ポリシー

・StartTranscriptionJobを実行するためのIAM roleの例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "transcribe:StartTranscriptionJob"
             ],   
            "Resource": "*"
        }
    ]
}
        

・コンソールでTranscribeを使用するためのIAM roleの例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "transcribe:*"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}

・音声を取得するためにIAM roleの例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "transcribe.amazonaws.com"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::bucket name/*"
        }
    ]
}

・KMSを使ったS3の暗号化を行うための IAM roleの例

{
      "Sid": "Allow-Transcribe",
      "Effect": "Allow",
      "Principal": {
        "Service": "transcribe.amazonaws.com”
      },
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
      ],
      "Resource": "*"
    }

APIに対する権限のリファレンス

・Amazon TranscribeのAPIは下記通り
 - GetTranscriptionJob:
   API: transcribe:GetTranscriptionJob
   Resource:*
 - ListTranscriptionJobs:
   API: transcribe:ListTranscriptionJobs
   Resource:*
 - StartTranscriptionJob:
   API: transcribe:StartTranscriptionJob
   Resource:*

ベータ版のガイドラインと制限

・現在は下記リージョンのみ
 -リージョン:US East (N. Virginia)
 - Endpoint::https://transcribe.us-east-1.amazonaws.com
 - プロトコル:HTTPS
・推奨素材は以下
 - ロスレスFLAC、ロスレスWAV、PCM(16ビット)
 - サンプリングレート 8000 ~ 16000Hz
・制限は以下の通り
 - 尺は最長2h

APIリファレンス

・別紙参照(https://docs.aws.amazon.com/ja_jp/transcribe/latest/dg/API_GetTranscriptionJob.html)

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?