[PHP × Amazon Transcribe] PHPでサクッと文字起こしする
概要
妻が在宅の仕事を探し始めたので、クラウドワークス等で案件を概観していたところ「文字起こし」という分野に目が留まり、
「AWSの文字起こしサービス使えばお手軽&費用も抑え目でできないかな~」というところが発端です。
本記事では、ローカルのPHPスクリプトからAWSのS3へファイルアップロード、AWSのTranscribeで翻訳を実行、
文字起こしされたファイルをGETすることがゴールになります。
手持ちのサイト等で画面化も一瞬考えましたが、精度や使い勝手が未知数だったので、
とりあえず、というところでサクッとローカルPHPスクリプトでやっちゃいます。
Amazon Transcribeの概要
Amazon Transcribeは、機械学習(ML)を活用して音声ファイルを自動で文字起こしするAWSのサービスです。
以下の特徴があります:
- 高精度の音声認識:ノイズが多い環境でもテキスト変換が可能
- リアルタイム文字起こし:ストリーミング音声にも対応
- 多言語対応:日本語を含む多数の言語をサポート
- 話者識別(Speaker Diarization):複数の話者を認識し、区別できる
- カスタム語彙(Custom Vocabulary):特定の専門用語や社内用語を登録可能
- カスタム言語モデル(Custom Language Model, CLM):独自のデータを使って精度向上
環境構成
- Win10
- PHP 8.1.32
- php.iniで下記は有効化しておいてください。
-
extension_dir = "ext"
~~~省略~~~
extension=curl
-
- php.iniで下記は有効化しておいてください。
- composer 2.1.9
ディレクトリ構成
- aws_transcribe
- bin:実行用スクリプトを配置(CLIスクリプトなど)
- data:音声データと変換結果を格納
- in:文字起こし対象の音声ファイル
- out:変換後のテキストファイル(JSONやTXT)
- lib:AWS SDKや共通関数などのライブラリ
- config.php:設定ファイル(AWSキーやS3バケット名)
手順
※phpとcomposerは事前にインストールしておいてください。
AWS SDK for PHPのインストール
cd C:\sites\aws_transcribe
composer require aws/aws-sdk-php
composer require aws/aws-sdk-php
(AWSマネジメントコンソール)アクセスキー情報を生成
- AWSマネジメントコンソールログイン
- サービス一覧から「IAM」を検索してクリック
- 左側のメニューから「ユーザー」を選択
- ボタン「ユーザーの作成」からユーザ作成
- 「ポリシーを直接アタッチする」を選択。アタッチするポリシーは下記を選択
- AmazonTranscribeFullAccess
- AmazonS3FullAccess ※S3を使わない場合は不要
- 「ポリシーを直接アタッチする」を選択。アタッチするポリシーは下記を選択
- 作成したユーザを選択。「アクセスキーを作成」からアクセスキーを生成する。下記をメモします。
- アクセスキー
- シークレットアクセスキー
(AWSマネジメントコンソール)S3バケット作成
- AWSマネジメントコンソールログイン
- サービス一覧から「S3」を検索してクリック
- ボタン「バケットを作成」を選択
- ボタン「ユーザーの作成」からユーザ作成
- 「ポリシーを直接アタッチする」を選択。アタッチするポリシーは下記を選択
- AmazonTranscribeFullAccess
- AmazonS3FullAccess ※S3を使わない場合は不要
- 「ポリシーを直接アタッチする」を選択。アタッチするポリシーは下記を選択
- 作成したユーザを選択。「アクセスキーを作成」からアクセスキーを生成する。下記をメモします。
- アクセスキー
- シークレットアクセスキー
(ローカル)コーディング
下記3ファイルをコーディングしていきます。
config.php
bin/transcribe.php
lib/AwsTranscribe.php
(ローカル)実行
cd C:\sites\aws_transcribe
php bin\transcribe.php
php bin\transcribe.php
下記のようなメッセージが表示されれば成功です。
>php bin\transcribe.php
✅ 音声ファイルがS3にアップロードされました。
✅ Transcribeジョブが開始されました。
⏳ ジョブステータス: IN_PROGRESS
⏳ ジョブステータス: COMPLETED
✅ Transcribeジョブが完了しました。
✅ JSONファイルをダウンロードしました: C:\sites\aws_transcribe\bin/../data/out/transcribe-job-67eceb63e0ef9.json
✅ S3からJSONファイルを削除しました。
✅ S3からメディアファイルを削除しました。
✅ 音声ファイルがS3にアップロードされました。
✅ Transcribeジョブが開始されました。
⏳ ジョブステータス: IN_PROGRESS
⏳ ジョブステータス: COMPLETED
✅ Transcribeジョブが完了しました。
✅ JSONファイルをダウンロードしました: C:\sites\aws_transcribe\bin/../data/out/transcribe-job-67eceb63e0ef9.json
✅ S3からJSONファイルを削除しました。
✅ S3からメディアファイルを削除しました。
以上です。