さくらのAI Engineを触ってみた(2) 音声ファイルの文字起こし編

未分類

前回のRAGの検索に続いて今回は音声ファイルの文字起こしをやってみます.
さくらのAI Engineで文字起こしにつかうモデルは whisper-large-v3-turbo になります.
なお、制限事項として下記のように音声ファイルの長さ、ファイルサイスが制限されます.

本来whisper-large-v3-turboモデルは30秒までの音声ファイルに対応していますが、AI Engineでは内部でアップロードされた音声ファイルを分割して30秒以内の個別ファイルに分解し、文字起こしを行った後、結果を結合して出力するという処理が内部で動作しており、最長30分、もしくは30MBまでのファイルサイズに対応しています。

触ってみよう

今回はさくらのナレッジにあるハンズオンをもとにして触ってみます。

さくらのAI Engineことはじめ(2):音声ファイルの文字起こし | さくらのナレッジ
目次前回までのまとめwhisper-large-v3-turboさっそくやってみるまとめ 前回までのまとめ 前回の記事では、新しく発表された『さくらのAI Engine』の紹介とRAGチャットを活用したサンプルスクリプト

基本的には手順はそのままで問題ないので、ここでは実行環境とかについて触れておこうと思います。

今回も前回と同じ環境でやりますが、pythonを使います.

  • Ubuntu 24.04 LTSだとPyhtonは3.12ですがそこにvenvをいれて使います.
  • MP3ファイルを分割するのに ffmpeg をインストールします.
$ python3 --version
Python 3.12.3

$ python3 -m venv venv
$ source venv/bin/activate
$ pip install --upgrade pip
$ pip install requests pydub

$ sudo apt install ffmpeg

音声に文字起こししてみた

今回の音声データは講演会、演奏会などでの開演前の注意事項アナウンス音声を利用しています.
最終形の文字起こし結果のサマリー作成のスクリプトを実行しました.

$ ./splitmp3.py -i sample.mp3
[Split] output_000.mp3  (00:00 - 00:29)
[Split] output_001.mp3  (00:29 - 00:58)
[Split] output_002.mp3  (00:58 - 01:11)

[Transcribe] 3 chunks -> https://api.ai.sakura.ad.jp/v1/audio/transcriptions (model=whisper-large-v3-turbo)

[POST] output_000.mp3 (00:00-00:29)  [1/3]
[OK]  output_000.mp3 -> 94 chars
[POST] output_001.mp3 (00:29-00:58)  [2/3]
[OK]  output_001.mp3 -> 100 chars
[POST] output_002.mp3 (00:58-01:11)  [3/3]
[OK]  output_002.mp3 -> 23 chars

 Done. Saved:
 - /mnt/ubuntu/sakura-ai/transcript.json
 - /mnt/ubuntu/sakura-ai/transcript.txt   (時間範囲付き)
 - /mnt/ubuntu/sakura-ai/transcript_full.txt  (タグ無し・全文結合)


===== transcript_full.txt (全文) =====

本日はご来場いただきまして誠にありがとうございます。開演に先立ちまして、お客様にお願いとご案内を申し上げます。客席内での飲食・喫煙は禁止されております。飲食はロビーにて、喫煙は所定のキツ。
出演所にてお願いいたします。開演中、カメラやスマートフォンなどによる写真撮影・録画・録音は固く、お断り申し上げます。また、信仰の妨げになりますので、携帯電話や音の鳴る機器の電源は、あらかじめお切り口に
それでは開演まで今しばらくお待ちくださいませ。

===== end of transcript_full.txt =====

[Chat] 要約を開始します …
[Chat] Summarizing chunk 1/1 (len=219)

 要約を保存しました:
 - /mnt/ubuntu/sakura-ai/transcript_summary.md

===== transcript_summary.md (要約) =====

### 部分要約 1
- 本日はご来場いただき、誠にありがとうございます。  
- **客席内での禁止事項**  
  - 飲食は客席内で不可 → ロビーでご利用ください。  
  - 喫煙は客席内で不可 → 所定の喫煙所をご利用ください。  
- **撮影・録音に関する禁止事項**  
  - 開演中のカメラ、スマートフォン等による写真撮影・録画・録音は一切禁止です。  
- **携帯電話等の取扱い**  
  - 信仰の妨げとなるため、携帯電話や音が鳴る機器の電源は事前にオフにしてください。  
- **開演までのお願い**  
  - 開演までしばらくお待ちください。

===== end of transcript_summary.md =====

このスクリプトだと30秒ごとに音声ファイルを分割しますので、文字起こししたときに分割部分がすこし気になりますね.
スクリプトを確認すると実行時のパラメータで分割秒数を変更できました.
下記の -s 120 のところです.

$ ./splitmp3.py -i sample.mp3 -s 120
[Split] output_000.mp3  (00:00 - 01:11)

[Transcribe] 1 chunks -> https://api.ai.sakura.ad.jp/v1/audio/transcriptions (model=whisper-large-v3-turbo)

[POST] output_000.mp3 (00:00-01:11)  [1/1]
[OK]  output_000.mp3 -> 227 chars

 Done. Saved:
 - /mnt/ubuntu/sakura-ai/transcript.json
 - /mnt/ubuntu/sakura-ai/transcript.txt   (時間範囲付き)
 - /mnt/ubuntu/sakura-ai/transcript_full.txt  (タグ無し・全文結合)


===== transcript_full.txt (全文) =====

本日はご来場いただきまして誠にありがとうございます。開演に先立ちまして、お客様にお願いとご案内を申し上げます。客席内での飲食・喫煙は禁止されております飲食はロビーにて喫煙は所定の喫煙所にてお願いいたします。開演中、カメラやスマートフォンなどによる写真撮影・録画・録音は、固くお断り申し上げます。また、進行の妨げになりますので、携帯電話や音の鳴る機器の電源は、あらかじめお切りくださいますようお願い申し上げます。それでは開演まで今しばらくお待ちくださいませ

===== end of transcript_full.txt =====

[Chat] 要約を開始します …
[Chat] Summarizing chunk 1/1 (len=227)

 要約を保存しました:
 - /mnt/ubuntu/sakura-ai/transcript_summary.md

===== transcript_summary.md (要約) =====

### 部分要約 1
- 本日はご来場いただき、誠にありがとうございます。  
- **客席内での飲食・喫煙は禁止**  
  - 飲食はロビーで、喫煙は所定の喫煙所でお願いします。  
- **開演中の撮影・録画・録音は一切禁止**(カメラ、スマートフォン等)。  
- **携帯電話や音が鳴る機器の電源は事前にオフ**にしてください。  
- 以上のご協力をお願いし、開演までしばらくお待ちください。

===== end of transcript_summary.md =====
$ ./splitmp3.py -i sample.mp3 -s 120
[Split] output_000.mp3  (00:00 - 01:11)

[Transcribe] 1 chunks -> https://api.ai.sakura.ad.jp/v1/audio/transcriptions (model=whisper-large-v3-turbo)

[POST] output_000.mp3 (00:00-01:11)  [1/1]
[OK]  output_000.mp3 -> 227 chars

 Done. Saved:
 - /mnt/ubuntu/sakura-ai/transcript.json
 - /mnt/ubuntu/sakura-ai/transcript.txt   (時間範囲付き)
 - /mnt/ubuntu/sakura-ai/transcript_full.txt  (タグ無し・全文結合)


===== transcript_full.txt (全文) =====

本日はご来場いただきまして誠にありがとうございます。開演に先立ちまして、お客様にお願いとご案内を申し上げます。客席内での飲食・喫煙は禁止されております飲食はロビーにて喫煙は所定の喫煙所にてお願いいたします。開演中、カメラやスマートフォンなどによる写真撮影・録画・録音は、固くお断り申し上げます。また、進行の妨げになりますので、携帯電話や音の鳴る機器の電源は、あらかじめお切りくださいますようお願い申し上げます。それでは開演まで今しばらくお待ちくださいませ

===== end of transcript_full.txt =====

[Chat] 要約を開始します …
[Chat] Summarizing chunk 1/1 (len=227)

 要約を保存しました:
 - /mnt/ubuntu/sakura-ai/transcript_summary.md

===== transcript_summary.md (要約) =====

### 部分要約 1
- 本日はご来場いただき、誠にありがとうございます。  
- **客席内での飲食・喫煙は禁止**  
  - 飲食はロビーで、喫煙は所定の喫煙所でお願いします。  
- **開演中の撮影・録画・録音は一切禁止**(カメラ、スマートフォン等)。  
- **携帯電話や音が鳴る機器の電源は事前にオフ**にしてください。  
- 以上のご協力をお願いし、開演までしばらくお待ちください。

===== end of transcript_summary.md =====

コメント

タイトルとURLをコピーしました