LoginSignup
0
0

【rails】ActiveStorage上のmp3ファイルにWhidperAPIを使う

Last updated at Posted at 2023-09-15

はじめに

PythonでWhisperを使用する方法は簡単に見つかったが、rails上でwhisperを使用する方法があまり出てこなかった。
今回は、試した中で成功したプログラムを紹介する。

状況

・ActiveStorageを使用して、S3上にmp3ファイルを保存している。
・mp3ファイルは、Chatモデルのmp3_fileというカラムに格納されている。
・mp3ファイルをWhisperを使って文字起こししたい。

準備

rails上でWhisperを使うには、"ruby-openai"というgemをインストールする必要がある。
また、S3にアクセスするには、"aws-sdk-s3"というgemも必要である。
Gemfileに、

gem "ruby-openai"
gem "aws-sdk-s3"

を追記して、bundle installしておきましょう。

S3からファイルを取り出す

まずは、S3から音声ファイルを取り出す。

s3_client = Aws::S3::Client.new(region: ENV["REGION"], access_key_id: ENV["ACCESS_KEY_ID"], secret_access_key: ENV["SECRET_ACCESS_KEY"])
file = s3_client.get_object(bucket: ENV["BUCKET"], key: @chat.mp3_file.key).body.read

S3からのファイル取り出しは、

  1. regionaccess_key_idsecret_access_keyを与えて、クライアントを立てる。
  2. bucketkeyを与えて、ファイルを取得する。

という流れで行います。

tempfileに一時保存する

次に、取り出したファイルをtempfileに書き込みます。
tempfileに一時保存しておくことで、Whisperで扱えるようになるようです。

まず、tempfileに格納する関数を用意しておきます。

def create_tempfile(file)      
    tempfile = Tempfile.open(["temp", ".mp3"])
    tempfile.binmode
    tempfile.write(file)
    tempfile.rewind

    return tempfile
  end
  1. TempfileのOpen関数で、mp3形式のtempfileを作成します。
  2. binmodeでバイナリーモードにします。
  3. write(file)で書き込みます。
  4. 変更を加えた後はrewindする必要があるみたいです。(iosを入力の先頭に配置する。)
  5. 最後に、tempfileを返します。

create_template関数にS3から取ってきたfileを与えて、tempfileに書き込みましょう。

tempfile = create_tempfile(file)

Whisperを使って文字起こし

それでは、Whisperを使ってみましょう。
まずは、文字起こしする関数を作成します。

def transcribe(tempfile)
  client = OpenAI::Client.new(access_token: ENV["OPENAI_API_KEY"])
  response = client.transcribe(
    parameters: {
      model: "whisper-1",
      file: File.open(tempfile, 'rb'),
  })

  return response.dig("text")
end
  1. APIキーを使ってクライアントを立てる。
  2. transcribe関数を使って文字起こしします。
  3. tempfileを与えることで文字起こしすることができます。
  4. responseから文字起こしの結果を取り出し、returnします(response.dig("text"))。

この関数にcreate_tempfileで返したtempfileを渡し、文字起こししましょう。

transcribed_text = transcribe(tempfile)

おわりに

今回は、rails上でWhisperを使ってみました。
tempfileを使用するということろがコツだったようです。

参考になったら「いいね」と「ストック」お願いします!

0
0
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
0
0