PythonでWhisperAPIを使う方法【APIキーの取得】【サンプルコード】

プログラミング

2023年3月1日、OpenAI社からChatGPTのAPIが公開されました。

▽ Introducing ChatGPT and Whisper APIs
https://openai.com/blog/introducing-chatgpt-and-whisper-apis

APIというのは、例えばChatGPT APIならChatGPTをプログラムに組み込んでその機能を使うためのツールのようなものです。質問文などを送信することで、ChatGPTが返してくれる返答が取得できます。

ChatGPTは「チャットボットAI」ですが、Whisperは「文字起こしAI」です。人がしゃべった音声を文字に変換してくれます。数十種類の言語に対応しており、テキストは英語のみですが翻訳機能もあります。

APIは有料です。使えば使うほど料金は上がっていきます。しかし、少し使うくらいなら数円程度ですし、初回登録後は無料期間もありますので、お金の心配はそれほど気にしなくても大丈夫です

OpenAIのAPIキーを取得する

WhisperのAPIを使用するためには、APIキーというものが必要です。

OpenAIのアカウントを作成する

OpenAIのアカウントを持っていない人は作成しましょう。OpenAIの公式サイトにアクセスし、SignUpを押します。メールアドレス、パスワードを入力するとメールが届くのでそれをクリック。名前と誕生日、電話番号を入力して、届いたSMSの番号を入力したらアカウントが作成できます。

OpenAIのAPIキーを取得する

OpenAIのAPIのサイトに行き、Developers > Overviewを押します。(ログインが必要な場合はログインした後、)OpenAI API のプラットフォームに行きます。

openai プラットフォーム

右上のPersonal>View API keysを押し、+ Create new secret key を押しましょう。すると英数字の列が出てきます。これがAPIキーです。一度しか表示されませんので、確実にコピーしてどこかにメモしておきましょう。

APIキーは認証情報ですので、他人に教えてはいけません。GitHubなどのクラウドサービスにもアップするのはやめましょう。

Pythonでプログラムを書く

Pythonはすでに持っているという前提で話を進めます。もし持っていない人は各自でPythonのインストール方法を調べるか、Google Colabortaryなどのインストール不要でPythonを実行できるサイトを利用してみてください。

仮想環境の作成(任意)(Google Colabの人は不要)

PythonをPCに直接インストールしている場合やAnacondaでインストールしている場合は仮想環境の作成がオススメです(Google Colabotaroryの人は不要)。ターミナルを開いて、プログラムを作成するフォルダに移動します(cd ファイルパス)。その後、

Python直接インストールの人は

python -m venv .venv

Anacondaの人は

conda create --name .venv python=3.10

で仮想環境を作成できます。(.venvが仮想環境名。python=3.10でpythonを同時にインストール)

作成できたら、Pythonの人は

.venv/Scripts/activate.ps1

Anacondaの人は

conda activate .venv

で仮想環境に入ります。(.venv)というのが行の先頭についたらOKです。ターミナルを閉じたら仮想環境から出てしまいますので、もう一度activateして仮想環境に入りなおしてください。

パッケージのインストール

Whisper の機能を使うためのパッケージ(拡張機能のようなもの)をインストールします。

pip install openai

を実行してください。Anacondaの人は conda install openai が望ましいですが、失敗する場合は pip を使いましょう。また、Google Colaboratoryを使っている人は「!」をつけて

!pip install openai

を実行(セルの左側にある再生ボタンを押します)。

プログラムを書く

import openai

# APIキーをセット
openai.api_key = "YOUR_API_KEY"

audio_file= open("audio.wav", "rb")
transcript = openai.Audio.transcribe("whisper-1", audio_file)
audio_file.close()
print(transcript["text"])

YOUR_API_KEYには先ほど取得したAPIキーを書きます。
また、Pythonファイルと同じ階層に、人のしゃべった音声が入ったファイル audio.wav を置いておきましょう。

/
| - whisper.py
| - audio.wav

あとはこれを実行するだけで Whisper を使うことができます!

python whisper.py

で実行します(whisper.pyはファイル名なので、ご自身のファイル名に合わせてください。)GoogleColaboratoryの人は、セルの再生ボタンをクリックで実行します。

応用編

言語を指定する

transcript = openai.Audio.transcribe("whisper-1", audio_file, language="ja")

language="○○" とすると、音声の言語が何かを指定することができます。言語は指定しなくても勝手に判断してくれますが、指定した方が認識の精度が上がるようです。

language="ja"で日本語、"en"で英語になります。

APIキーをファイル外に書く

APIキーは他人に知られてはいけないため、Whisper APIを使用したPythonファイルをネットで公開するときなどは、上のコードのように"YOUR_API_KEY"のように書き換える必要があります。しかし、いちいちAPIキーの部分を書き直すのは面倒ですし、それを忘れる可能性もあります。
そこでAPIキーをpythonファイルとは別のファイルに書いておき、そこからAPIキーを取得するということができます。

python-dotenvをインストール

python-dotenvというパッケージをインストールします。

pip install python-dotenv
// Google Colabの人は !pip install python-dotenv

.envファイル

.envファイルを作成し、

OPENAI_API_KEY = "YOUR_API_KEY"

を記載します(つまり一行だけ書いたファイルになります)。YOUR_API_KEYは同じように自分のAPIキーを入力しましょう。

Pythonプログラム

元のプログラムの上から4行:

import openai

# APIキーをセット
openai.api_key = "YOUR_API_KEY"

を、下のように書き換えます

import openai
import os
from dotenv import load_dotenv

# APIキーをセット
load_dotenv()
openai.api_key = os.environ.get("OPENAI_API_KEY")

あとは同じように python whisper.py などで実行すれば同じような結果が得られます。

この方法であれば、例えばGitHubにプログラムをアップロードする際、.envはコミットされないようにしておけば(レポジトリ作成の際に.gitignoreをPython用にしておけば、デフォルトで.envファイルはコミットされないはずです)、APIキーの情報だけはアップロードされないという状態を作り出すことができます。

関数化

先ほどの whisper.py を関数化して、ほかの Python ファイルから利用できるようにしたものがこちら

import os
import openai
from dotenv import load_dotenv

# APIキー
load_dotenv()
openai.api_key = os.environ.get("OPENAI_API_KEY")

def speechfile_to_text(filename, lang):
    audio_file = open(filename, "rb")
    # 文字起こし
    transcript = openai.Audio.transcribe("whisper-1", audio_file, language=lang)
    text = transcript["text"]
    audio_file.close()
    return text

ファイルパスと言語を引数に取り、文字起こしされたテキストを返します。

言語は日本語なら "ja"、英語なら "en"といった文字列です。

ほかの Python ファイルから使用する場合は

import whisper

text = whisper.speechfile_to_text("audio.wav", "ja")
print(text)

などのように書けばよいでしょう。

コメント

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