GoogleのGemini 1.5 FlashをAPIから試す
概要
最近はAIの発展が早すぎて目が話せませんね。つい先日もOpenAIがGPT-4oを発表したと思ったら、GoogleがGemini 1.5 ProやAI Teammateを発表したり。どんどんと便利になっていくAIにワクワクが止まりません。
この記事は、ホットトピックである「マルチモーダル」な機能を使ってみた記事です。Google Colab上で動くものを作ったので、ぜひご自身でも試してみてください。
今回作ったのは「動画から自動的に議事録を作成する」というサンプルです。新しいAIでは文字だけではなく、画像や動画、音声を「そのまま」理解します。ある意味、最新のLLMでは「目」や「耳」を手に入れたと考えていいでしょう。
そのため、動画内に映っている人の性別や人数などはもちろん音声も同時に解釈するため「誰が話した内容か」まで判断することができます。なので、今回作成したサンプルのように動画とプロンプトを渡すことで手軽に動画の概要を作成することができる、というわけです。
動画とテキストを投げるだけのシンプルなコードで、全体はとても短いのでそれぞれ個別に解説しつつ全体を見ていきましょう。
APIを利用する準備
Google Colabの場合はGeminiを利用するためのモジュールがすでにインストール済みとなりますが、念の為最新にアップデートしておきます。
# Update Google GenerativeAI
!pip install -q -U google-generativeai
今回は google.generativeai
モジュールを利用するためこれをインポートします。
import google.generativeai as genai
また、APIを利用するために API Key が必要になるのでそれを設定します。ここではGoogle Colabの機能であるシークレットを利用しています。これを利用することで、外部にAPI Keyを公開せずに利用可能な状態を作れるのでオススメです。
シークレットを利用するには google.colab
パッケージの userdata
を利用します。指定しているキーは自身で設定したものです。(ここでは GOOGLE_API_KEY
)
取得したAPI Keyを genai.configure()
メソッドを利用して設定します。
from google.colab import userdata
GOOGLE_API_KEY=userdata.get('GOOGLE_API_KEY')
genai.configure(api_key=GOOGLE_API_KEY)
動画ファイルをアップロード
動画は一度アップロードし、その参照を渡す形でAPIを実行します。ファイルのアップロードには genai.upload_file()
メソッドを利用します。(動画ファイルは適宜、ご自身のものをアップロードしてください)
# 動画のファイルパス。アップロードした場所のパスを指定する
video_path = "/content/sample-video.mp4" # @param {type:"string"}
uploaded_video = genai.upload_file(video_path)
アップロード完了を待つ
# アップロード完了をチェック
# `upload_file` は非同期的に実行されるため、完了を待たないと次の処理でエラーが発生してしまう
while uploaded_video.state.name == "PROCESSING":
print("Waiting for processed.")
time.sleep(10)
uploaded_video = genai.get_file(uploaded_video.name)
モデル名を指定してモデルのインスタンスを作成
今回利用するモデル名は models/gemini-1.5-flash-latest
です。
# Pass multimodal prompt
model_name = "models/gemini-1.5-flash-latest" # @param {type:"string"}
model = genai.GenerativeModel(model_name)
プロンプトを指定
今回は以下のようなプロンプトを用意しました。ただここは自由に設定できるので、アウトプットしてもらいたい内容に応じて適宜設定してください。
prompt = """# 前提
この動画はXRについて議論されています。
# 依頼内容概要
この動画をもとに要約を作成してください。
※ 動画に含まれていない情報をでっち上げたり、冗長になったりしないでください。
# 依頼内容の具体
まず、動画の概要、参加者の人数、大枠のコンテキストは何かを記載します。
コンテキストが不明な場合は推測してください。その際は「(推測)」と末尾につけてください。
フォーマットは下記の通りです:
【動画の概要】
<動画の概要を記載>
【参加人数】
<参加人数を記載>
【コンテキスト】
<コンテキストを記載>
その後、動画のハイライトを記載してください。ハイライトは、その話がされている時間(タイムスタンプ)と、そのときに話されている内容の概要を記載してください。
また、もし補足するべき内容があれば備考に記載してください。
【動画の流れ】
|タイムスタンプ|概要|備考|"""
APIを実行する
最後はプロンプトと動画を設定してAPIを実行します。APIに渡すデータは配列で渡します。そしてそのデータを model.generate_content()
メソッドを実行することでレスポンスを得ることができます。
content = [prompt, uploaded_video]
response = model.generate_content(content)
print(response.text)
結果
上記コードを実行して得られた結果が以下です。今回は2分ちょっとの動画でしたが、内容がサマライズされているのが分かりますね。
【動画の概要】
XRについて議論するオンライン会議の様子。
【参加人数】
5人
【コンテキスト】
XRを用いた新規サービス開発について議論している。(推測)
【動画の流れ】
|タイムスタンプ|概要|備考|
|:---:|:---:|:---:|
|00:00-00:25|最初に話者は、チームとして実現したいことについて話している。具体的な内容は、自分の貢献を評価されることや、達成感を得られることなど。|チームとしての目標を共有している。|
|00:26-00:55| 話者は、開発するサービスを「XRかけるAI」と定義し、その開発目標を説明する。|サービスのコンセプトを説明している。|
|00:56-01:08|話者は、開発するサービスについてOS側の話を少し触れる。|開発するサービスはOSと関係していることを示唆している。|
|01:09-01:48|話者は、開発するサービスの意義について説明している。具体的には、「イテレーションが早く開発できる」という点について説明している。|開発するサービスのメリットについて説明している。|
|01:49-02:08| 話者は、開発するサービスについてXRをかけるAIが、個人が作ったコンテンツをより効果的に活用できるようになることについて説明している。|開発するサービスがユーザーにとってどのような価値を提供できるか説明している。|
まとめ
ここで紹介したコードはほぼ全文です。(サンプルはファイルの削除などの処理が少しだけ入っています)
これだけのコードで動画の要約が得られるのは信じられませんね。今回は要約をさせましたが、冒頭で書いた通り、動画と音声そのものを認識するため動画の中から特定の部分を見つける、などもできるかもしれません。
今後さらにAIができることは増えていくことはまず間違いないので、各社の動向を追いつつ、便利に使って生産性を高めていきたいところです。
エンジニア絶賛募集中!
MESONではUnityエンジニアを絶賛募集中です! XRのプロジェクトに関わってみたい! 開発したい! という方はぜひご応募ください!
MESONのメンバーページからご応募いただくか、TwitterのDMなどでご連絡ください。
書いた人
比留間 和也(あだな:えど)
カヤック時代にWEBエンジニアとしてリーダーを務め、その後VRに出会いコロプラに転職。 コロプラでは仮想現実チームにてXRコンテンツ開発に携わる。 DAYDREAM向けゲーム「NYORO THE SNAKE & SEVEN ISLANDS」をリリース。その後、ARに惹かれてMESONに入社。 MESONではARエンジニアとして活躍中。
またプライベートでもAR/VRの開発をしており、インディー部門でTGSに出展など公私関わらずAR/VRコンテンツ制作に精を出す。プライベートな時間でも開発しているように、新しいことを学ぶことが趣味で、最近は英語を学んでいる。
MESON Works
MESONの制作実績一覧もあります。ご興味ある方はぜひ見てみてください。
Discussion