世界を動かす技術を、日本語で。

Show HN: 「Gemini」が動画をネイティブに埋め込むことができるようになったので、サブセカンド動画検索を作りました

概要

SentrySearch は、ダッシュカム映像を 意味検索 で瞬時に探し、該当部分だけを 自動切り出し できるCLIツール。 Googleの Gemini Embedding 2 を活用し、動画とテキストを同じベクトル空間で比較。 ChromaDB に動画ベクトルを格納し、自然言語で検索可能。 コスト削減機能 や柔軟な設定オプションも搭載。 Tesla Sentry Mode 以外の一般的なmp4映像にも対応。

SentrySearchの仕組み

  • ダッシュカム映像重複するチャンク に分割し、それぞれを Gemini Embedding 2 でベクトル化
  • 各チャンクのベクトルを ChromaDB のローカルデータベースに保存
  • テキスト検索時 はクエリを同じベクトル空間にエンベッドし、最も近い動画チャンクを自動抽出
  • 該当部分のみ 元動画から自動トリミングしてクリップとして保存

導入手順

  • リポジトリのクローンとインストール
    • git clone https://github.com/ssrajadh/sentrysearch.git
    • cd sentrysearch
    • python -m venv venv && source venv/bin/activate
    • pip install -e .
  • APIキー設定
    • sentrysearch initGemini APIキー を登録・検証
    • もしくは.env.exampleをコピーし、APIキーを手動で追加
  • 映像のインデックス化
    • sentrysearch index /path/to/dashcam/footageで動画をベクトル化・登録
    • オプションで チャンク長オーバーラップ解像度/フレームレート の調整が可能
  • 検索
    • sentrysearch search "赤いトラックが一時停止無視"のように自然言語で検索
    • 上位マッチの該当部分のみ自動でトリミング・保存
    • --results N--output-dir DIR等のオプション指定可能
  • 統計情報表示
    • sentrysearch statsでインデックス済みチャンク数やファイル数を表示
  • 詳細ログ
    • 各コマンドに--verboseを追加で、埋め込み次元やAPI応答時間、類似度スコア等を出力

Gemini Embedding 2の特徴

  • 動画ピクセル をそのまま 768次元ベクトル に変換
  • テキストクエリ と動画チャンクを直接比較可能
  • 文字起こしやキャプション不要 で、数時間分の映像でも サブ秒検索 を実現

コストと最適化

  • 1時間のインデックス化 で約 $2.50 (30秒チャンク、5秒オーバーラップ時)
  • API課金は動画時間単位 で、ファイルサイズには依存しない
  • コスト削減機能
    • プリプロセス(デフォルトON) :480p/5fpsにダウンサンプリングし、アップロード量削減
    • 静止フレームスキップ(デフォルトON) :動きのないチャンクはAPI送信自体を省略
      • 駐車中や監視カメラ映像では大幅コスト削減
  • チューニングオプション
    • --chunk-duration / --overlapでAPI呼び出し回数調整
    • --no-skip-stillで全チャンクを強制埋め込み
    • --target-resolution / --target-fpsで画質調整
    • --no-preprocessでプリプロセス無効化

制限事項と今後の課題

  • 静止フレーム検出 はJPEGファイルサイズ比較によるヒューリスティック
    • 微細な動きの検出漏れや、完全静止チャンクの誤埋め込みの可能性
    • 全チャンクをインデックス化したい場合は--no-skip-still
  • チャンク境界 による検索精度の影響
    • イベントがチャンクをまたぐ場合、重複ウィンドウで補助するが完全ではない
    • シーン検出 によるスマートチャンク化が将来的課題
  • Gemini Embedding 2はプレビュー版 のため、API仕様や料金変更の可能性

対応動画・要件

  • mp4形式 の全ダッシュカム/監視カメラ映像に対応(Tesla Sentry Mode専用ではない)
  • ディレクトリ内の全mp4を再帰的に検索・インデックス化
  • 必要環境
    • Python 3.10以上
    • ffmpeg(PATHにあるか、imageio-ffmpegで自動利用)
    • Gemini APIキー(https://aistudio.google.com/apikey から取得)

まとめ

  • SentrySearch は、 数時間分の映像 から 自然言語で瞬時に該当クリップを抽出 できる先進的CLI
  • Gemini Embedding 2動画とテキストの意味空間を統合
  • コスト最適化機能柔軟な設定 で様々な用途・映像に対応
  • 監視カメラTesla Sentry Mode 以外の一般ダッシュカムにも利用可能

Hackerたちの意見

面白いね(ダッシュカム用じゃなくて、家庭監視用だけど)。

このディストピアからの出口はどこ?

マトリックスのスタイルの人間ポッド:私たちはマトリックスの中で幸せな無知の中に生きてる。一方で、LLM(大規模言語モデル)はますます計算能力を私たちから引き出して、どこかのCEOが自分のビジネスで人間を機械に置き換えたって主張できるようにしてる。

マトリックスでは出口は公衆電話だったけど、それが支配者たちが公衆電話を取り除いてる理由かもしれないね。

これがディストピアだとは思わないな。

動画クリップを探して見つけるのがディストピア?何それ?

そうだね、こんなデータ分析の力があれば、フロックカメラの前でちょっとした裏切りの言葉を言うだけで道が見えてくるよ。

https://pauseai.info/

これは本当にクールな実装だね。埋め込み技術は今でも魔法みたいに感じる。ただ、この具体的な使い方は、AIが私たちをどこに連れて行くのかについての一番の懸念でもあるんだ。一般的に言われるAIのリスクよりもずっと心配だよ。今はカメラが至る所にあって、公共の場ではある程度の匿名性やプライバシーを保ってるけど、実際には誰もそのカメラの映像を全部見たりレビューしたりできないからなんだ。でも、この技術が進むと、その状況が現実的になってきてる。カメラがどこにでもあるのは、私にとっては現状よりもかなり心配だよ。AIがすべての映像を見て、インデックスを作ってるから。カメラの所有者や製造者、政府が特定の人や活動について通知するための自然言語のパラメータを簡単に設定できるようになる。ここには確かに魅力的で売りやすいケースがあって、コスト効果が出てくると採用が進むだろうね。進行中の犯罪のアラートを受け取ったり、犬の後始末をしない隣人のアラートを受け取ったり、誰かが倒れた時のアラートを受け取ったり…でも、こういうパノプティコンの中で生活することの潜在的な影響は、きちんと規制されていないとかなり厄介だよ。

それ、すごく正当な懸念だね。今はコスト($2.50/時間)とレイテンシーのせいで、リアルタイムでの継続的なインデックス作成は実用的じゃないけど、ずっとそうとは限らないよね。これが理由の一つで、オープンウェイトのローカルモデルが必要だと思うんだ。そうすれば、インデックスは自分のハードウェア上に保たれて、映像が外に出ることもないし。でも、ここでの広い流れについては慎重に考える価値があるのは確かだね。

今、まさに作られてるところだよ。昨日、市議会の会議に参加して、ALPRカメラの契約承認について話し合ってきたんだ。カメラのベンダーからFususっていう製品を知ったんだけど、これはいろんなカメラシステムやALPR、アラートを統合するダッシュボードなんだ。特に目を引いたのは、動画フィードの自然言語クエリと、将来的に市民が設置するカメラとの統合計画だね。市は50台のALPRの予算しかなくて、主要な通りにしか設置しないって強調してたけど、近所の人が警察のAIシステムに直接つながるカメラを設置するのも時間の問題みたい。ある議員は市民アプリとの統合について懸念を示してた(他にもいくつか名前を聞き逃したけど)。これがどこに向かってるのかすごく心配だよ。

そうだね、パノプティコンは今や技術的にはかなり実現可能だけど、実装するのは高いよね(今のところは)。

ほとんどのカメラは、誰か一人や組織がクエリできるわけじゃないんだ。いろんな会社が所有していて、政府がアクセスしたい場合は後から召喚状を出さなきゃいけない。問題が出てくるのは、Flockみたいに政府が大規模にカメラを設置し始めたり、Ringみたいに一つの会社がみんなのプライベートカメラに無制限にアクセスできるようになるときだね。

特定の人に関しては、一般的な埋め込みは使わないと思うよ。これらの埋め込みは「トレンチコートを着た背の高い男」を検索できるけど、特定の人を探すなら顔認識を使うだろうね。

主要なクラウドプロバイダーは、顔認識やナンバープレート読み取りの機能を提供していて、多くはカメラ自体からの物体検出(パッケージ、車両、人など)にも対応してるよ。

私はコンテンツ/動画インテリジェンスの仕事をしてるけど、ジェミニはこのタイプの使い方にぴったりだよ。

これって、動画編集ソフトを作るのに使えるかな?「猫が映ってるシーンを全部削除」って言ったら、手動で調整できるEDL(編集決定リスト)を出してくれるPremiereのプラグインを想像してみて。

数ヶ月前にRexingのダッシュカムを買ったんだけど、映像を取り出すのが面倒でイライラして、自分で録画をブラウズしてダウンロードできるものを作ろうと思ったんだ。録画をスクロールしてるときに、探してるものを説明して検索できたらいいなって思ったのを覚えてる。これをプロジェクトに取り入れるのが楽しみだよ。シェアしてくれてありがとう!

視覚言語学習の根本的な改善が、さらに効率的な検索を可能にするのかな。『First Fully General Computer Action Model』 -> https://si.inc/posts/fdm1/

テキストのボトルネックなしでの真のマルチモーダル検索は大きな飛躍だね。動画のクエリがやっと自然に、そしてめちゃくちゃ実用的に感じられる。

5秒のオーバーラップがよくわからないな。チャンクの境界を越えて発生するイベントを見逃さないためだと思うけど、これがどれくらい役立つかを調べるための例やベンチマークはあるの?

そうそう、チャンクの境界でのイベントも少なくとも1つのチャンクにはキャッチされるようになってる。オーバーラップありとなしの正式なベンチマークはまだやってないけど、5秒のデフォルトは実用的な選択だと思う。ほとんどのイベントをキャッチできる長さで、コストもあまり増えないし(120チャンク/時から約138に)。それに、--overlapフラグで設定可能だよ。

くそ、エンベディングプロジェクトを進めなきゃ。今、ゲームを作るためのエンベディング(私の場合はジェミニじゃないけど)のプロトタイプがあるんだ。逆接続みたいな感じでね。collections.lwarfield.dev