2023年1月24日火曜日

OpenAI Whisperを使った文字起こしアプリの作成(4) - APEXアプリの作成

 Whisperによる文字起こしを行うAPIが作成できました。このAPIを呼び出すAPEXアプリケーションを作成します。

作成したアプリケーションは、以下のように動作します。

アプリケーション作成ウィザードを起動します。

名前はWhisper Transcribeとします。すべての機能はデフォルトで作成されるホーム・ページに実装します。そのため、設定は変更せずにアプリケーションの作成を実行します。

アプリケーションが作成されます。

ページ・デザイナにてホーム・ページを開きます。

最初に音声ファイルを指定するページ・アイテムを作成します。

Bodyにページ・アイテムを作成します。

識別の名前はP1_FILE、タイプとしてファイル参照...を選択します。

設定のファイルをパージするタイミングとして、End of Requestを選択します。セッション・ステートのストレージとしてリクエストごと(メモリーのみ)を選択します。

音声ファイルのアップロードとAPI呼び出しによる文字起こしは、1回のHTTPリクエストで完結します。そのため、アップロードした音声ファイルを処理完了後に保持する必要はありません。

音声ファイルのアップロードと文字起こしを実行するボタンを作成します。

作成したボタンのボタン名はSUBMIT、ラベルはSubmitとします。動作のアクションはデフォルトでページの送信になります。


文字起こしの結果を保持するページ・アイテムを作成します。

作成したページ・アイテムの識別の名前はP1_TEXT、タイプとしてテキスト領域を選択します。ラベルはTextとします。

セッション・ステートのデータ型はCLOB、ストレージとしてセッションごと(永続)を選択します。このように設定すると、ページをリロードしても文字起こしの結果が維持されます。


ボタンSUBMITをクリックしたときに、文字起こしのAPIを呼び出す処理を実装します。

以下のコードを実行し、パッケージUTL_WHISPERを作成します。

左ペインでプロセス・ビューを開き、文字起こしのAPIを呼び出すプロセスを作成します。

作成したプロセスの識別の名前はTRANSCRIBE、タイプとしてAPIの呼出しを選択します。設定のパッケージとしてUTL_WHISPER、プロシージャまたはファンクションとしてTRANSCRIBEを選択します。

サーバー側の条件のボタン押下時にSUBMITを選択し、ボタンが押されたときにUTL_WHISPERのプロシージャTRANSCRIBEが呼び出されるようにします。


パラメータのp_file、p_textはデフォルトでページ・アイテムP1_FILE、P1_TEXTが割り当たります。

パラメータp_urlは、値のタイプをアイテム、アイテムとしてG_TRANSCRIBE_URLを指定します。G_TRANSCRIBE_URLは置換文字列として、この後に値を設定します。


アプリケーション定義の置換を開き、置換文字列をG_TRANSCRIBE_URLとして、置換値にWhisperによる文字起こしを行うAPIを実装したURLを設定します。


以上でアプリケーションは完成です。アプリケーションを実行すると、記事の先頭にあるGIF動画のように動作します。

今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/whisper-transcribe.zip

無料の範囲だと処理に時間がかかるため、実用レベルで使用するのは難しいとは思います。とはいえ、どのように使えるのかという評価はできるのではないでしょうか。

次の記事で、JavaScriptから直接Whisperを呼び出すような実装を追加します。

続く