初めに
音声のラベル付けをする場合、LLMを使って文字お越しデータから行う or マルチモーダルを使って音声およびテキストからラベル付けをする方法になります。
今回は、GeminaiのAPIを使って音声および文字お越しデータを渡してその音声がどのような音声なのかのラベル付けをしてみます
以下で実際に試したリポジトリを公開しています
開発環境
準備
まずは環境構築です
uv venv -p 3.11 source .venv/bin/activate
また以下のドキュメントを参考にAPIの作成を行います
GeminiAPI SDKをインストールします
uv pip install -q -U google-generativeai
環境変数を取得するために、以下のライブラリも入れます
uv pip install python-dotenv
GeminiAPIを使ってラベル付けつけ
現時点では、英語の音声しか認識できないため 精度はよくないと思われます
まずはライブラリをインポートして、使用するモデルの設定を行います。
import google.generativeai as genai import os genai.configure(api_key=os.environ["API_KEY"]) model = genai.GenerativeModel(model_name="gemini-1.5-flash")
音声データおよびテキストは以下のようにしてAPIに渡すことができます
# 音声データを読み込む audio_data = { "mime_type": "audio/wav", "data": pathlib.Path(audio_file_path).read_bytes() } # プロンプトと音声データを Gemini に渡す response = model.generate_content([prompt, audio_data])
全体のコードは以下になります
import google.generativeai as genai import os from dotenv import load_dotenv import pathlib # .env ファイルから環境変数を読み込む load_dotenv() genai.configure(api_key=os.environ["geminai_api"]) # Gemini モデルを初期化 model = genai.GenerativeModel(model_name="gemini-1.5-flash") # 文字起こしテキスト transcription = "また、東寺のように、五大明王と呼ばれる、主要な明王の中央に配されることも多い。" # 実際の文字起こしテキストを入力してください # 音声ファイルのパスを指定 audio_file_path = 'input.wav' # 実際の音声ファイルのパスに置き換えてください # プロンプトを英語で作成 prompt = f"""Analyze the following audio and transcription text, and determine the speaker's emotion by selecting the most appropriate label from the list below: - Angry - Disgusted - Embarrassed - Fearful - Happy - Sad - Surprised - Neutral - Sexual1 # aegi voices - Sexual2 # chupa voices Please provide your answer by selecting only one emotion label from the list. Transcription text: {transcription} """ # 音声データを読み込む audio_data = { "mime_type": "audio/wav", "data": pathlib.Path(audio_file_path).read_bytes() } # プロンプトと音声データを Gemini に渡す response = model.generate_content([prompt, audio_data]) # 結果を表示 print(response.text.strip())