🔍

LLMを活用した画像検索の仕組み

2024/12/15に公開

つくったもの

先日 CULTIBASE の検索機能をアップデートして動画内のスライドをキーワード検索できるようにしました (以下URLから利用可能です)。
https://cultibase.jp/search/slides

例えば「氷山」で検索すると以下のような結果が得られます。

動画からどのように検索できるようにしているか仕組みを紹介したいと思います。

Step1: 動画から画像を抽出し代表の画像を選択する

まず、検索したい動画から ffmpeg を用いて5秒毎の画像を生成します。
コマンド的には以下のような感じです。

ffmpeg -i <video_path> -vf fps=1/5 <output_dir>/%08d.jpg

生成した画像には重複が多くこのまま処理すると無駄が多いため重複を排除したいです。
そこで、似たような画像をクラスタ分類してクラスタ毎に1枚に絞り込みます。

最初に、クラスタ分類するために画像をベクトルに変換します。
今回は、imgbeddings を使用しました。
こちらのモデルの使用方法については以下の記事で書いてます。
https://zenn.dev/yuzame/articles/16208cbaf219fb

ベクトルにしてしまえばクラスタリングの手法は何でも良いのですが、いろいろ試したところPCAで次元削減した後にDBSCANでクラスタリングすると良い結果が得られたため、そちらを利用しています。

最後に、クラスタ毎に代表の画像を1枚選択します。
今回はプレビュー再生の開始位置としても利用したかったため、再生時間が最も若い画像を代表としました。また、クラスタの最低枚数を指定することで重要でないスライドやノイズを除去しています。

Step2: 画像をLLMに解説してもらう

前のステップまでで、動画に対して複数の代表的なシーンの画像が選択できました。
これらの画像に対して解説文を生成していきます。

例えば上のスライドに対して OpenAI の gpt4o-mini のモデルを使用して解説文を生成してもらうと以下のような文章が得られます。

画像は「問いかけの2つのモード」と題されたプレゼンテーションの一部で、氷山の形を用いて2つの異なるアプローチを示しています。左側には「フォカボリモード」と呼ばれるアプローチがあり、深くこだわりを探ることが強調されています。このモードは、根底にある価値観やこだわりを掘り下げて理解することが目的です。 右側には「ユサブリモード」が示されており、こちらは固定観念を振り払い、新たな可能性を探ることを目的としています。このモードでは、既存の枠にとらわれずに新たな視点を得ることが重視されています。 全体として、氷山の上部には「問いかけの2つのモード」というタイトルがあり、視覚的にも二つのアプローチの違いを強調しています。この図は、思考の深さや柔軟性を示すためのメタファーとして機能しており、問題解決やアイデアの創出における異なるアプローチの重要性を視覚的に伝えています。

Step3: 検索インデックスを作成して検索できるようにする

ここまでできたら、通常のコンテンツ検索と同様に生成した解説文をインデックスに登録して検索できるようにします。

まとめ

社内ではあのスライドどこだっけ?という時に便利と好評です。動きの多い動画では特定のシーンを抽出するのが難しいと思いますが CULTIBASE ではプレゼンテーション資料としてスライドを多用するため画像のクラスタリングでシーンを特定することができました。
社内のMTG録画を探せるようにしたいなど同様の要件でも有効な手法と思います。

Discussion