HNに投稿:Geminiはもはやネイティブに動画を埋め込むことができるようになりました。そこで、私はサブ秒レベルの動画検索機能を構築しました。

2026/03/24 23:58

HNに投稿:Geminiはもはやネイティブに動画を埋め込むことができるようになりました。そこで、私はサブ秒レベルの動画検索機能を構築しました。

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

SentrySearchは、音声や映像を文字起こしせずに長時間のダッシュカム動画から瞬間を素早く見つけることができる軽量Pythonツールです。各MP4ファイルを30秒間隔で重複5秒のオーバーラップ付きに分割し、480 p、5fpsへダウンサンプリングします。静止フレーム(JPEGサイズでヒューリスティックに検出)は埋め込み前にスキップされます。埋め込みはGoogleのGemini Embedding 2を使用して768次元ベクトル空間へ変換し、ローカルのChromaDBデータベースに保存します。クエリ時には最も類似したチャンクが抽出され、元のMP4から切り取られます。

テキストクエリは一度だけ埋め込みを生成し、その後は埋め込み同士を比較して最も類似するチャンクを検索します。クエリ時にテキスト埋め込みのみが行われるため、検索コストは低く抑えられます。インデックス作成の費用はフレームスキップと事前処理オプション(

--no-preprocess
--target-resolution
--target-fps
)により約2.50ドル/時間程度です。ユーザーは
sentrysearch index
コマンドの多数のフラグでこれらを調整できます。

検索結果はタイムスタンプ付きでランク付けされ、デフォルトでは最良クリップが保存されます。詳細情報は

--verbose
オプションで確認でき、全体統計は
sentrysearch stats
で取得可能です。

SentrySearchはディレクトリツリー内の任意のMP4映像(Tesla Sentry Modeに限らず)をサポートし、Python 3.10+、ffmpeg(またはバンドルされたimageio‑ffmpeg)、Gemini APIキー(

sentrysearch init
で設定)が必要です。Gemini Embedding 2の価格変更や動作変更がコスト/性能に影響を与える可能性があります。また、静止フレーム検出やチャンク境界処理の改善により精度向上が期待できます。

SentrySearchは車両録画から特定イベントを高速かつ低コストで取得できるため、安全解析者、保険調査官、および事故分析のためにダッシュカム映像をレビューする組織にとって有益です。

本文

ダッシュカム映像のセマンティック検索

探したい内容を入力すると、該当箇所だけが切り出されたクリップが返ってきます。


仕組み

SentrySearch はダッシュカム動画を重複するチャンクに分割し、Google の Gemini Embedding モデルで各チャンクを直接「ビデオ」ベクトル化します。生成したベクトルはローカルの ChromaDB に保存されます。検索時にはテキストクエリも同じベクトル空間へ埋め込み、保存済みビデオ埋め込みと照合。最も相性が良いチャンクを元ファイルから自動でトリミングし、クリップとして保存します。


はじめに

クローン & インストール

git clone https://github.com/ssrajadh/sentrysearch.git
cd sentrysearch
python -m venv venv && source venv/bin/activate
pip install -e .

API キーの設定

sentrysearch init
を実行すると Gemini API キーを入力させ、
.env
に書き込みテスト埋め込みで検証します。

$ sentrysearch init
Enter your Gemini API key (get one at https://aistudio.google.com/apikey): ****
Validating API key...
Setup complete. You're ready to go — run `sentrysearch index <directory>` to get started.

初期化を使わない場合は

.env.example
をコピーして
.env
にキーを手入力してください。

フッテージのインデックス作成

$ sentrysearch index /path/to/dashcam/footage
Indexing file 1/3: front_2024-01-15_14-30.mp4 [chunk 1/4]
Indexing file 1/3: front_2024-01-15_14-30.mp4 [chunk 2/4]
…
Indexed 12 new chunks from 3 files. Total: 12 chunks from 3 files.

オプション

  • --chunk-duration 30
    – チャンクあたりの秒数
  • --overlap 5
    – チャンク間の重複秒数
  • --no-preprocess
    – ダウンスケール/フレームレート低減をスキップ(生チャンク送信)
  • --target-resolution 480
    – 前処理時の高さピクセル
  • --target-fps 5
    – 前処理時のフレームレート
  • --no-skip-still
    – 視覚変化がないチャンクも埋め込む

検索

$ sentrysearch search "red truck running a stop sign"
#1 [0.87] front_2024-01-15_14-30.mp4 @ 02:15‑02:45
#2 [0.74] left_2024-01-15_14-30.mp4 @ 02:10‑02:40
#3 [0.61] front_2024-01-20_09-15.mp4 @ 00:30‑01:00

Saved clip: ./match_front_2024-01-15_14-30_02m15s-02m45s.mp4

オプション

  • --results N
    – 表示する結果数
  • --output-dir DIR
    – クリップ保存先ディレクトリ
  • --no-trim
    – 自動トリミングをスキップ

統計

$ sentrysearch stats
Total chunks: 47
Source files: 12

任意のコマンドに

--verbose
を付けるとデバッグ情報(埋め込み次元、API 応答時間、類似度スコア)が出力されます。


なぜこれが可能なのか

Gemini Embedding 2 は生のビデオピクセルをテキストクエリと同じ 768 次元ベクトル空間へ直接埋め込むことができます。文字起こしやフレームキャプションは不要です。「red truck at a stop sign」というクエリは、30 秒間のクリップとベクトルレベルで直接比較できるため、数秒以内に数時間分の映像をセマンティック検索できます。


コスト

1 時間あたりのインデックス作成コストは Gemini の埋め込み API で約 $2.50(30 秒チャンク、5 秒重複)です。ファイルサイズではなくチャンク数がコストを決定します。

最適化

機能効果
前処理(デフォルト有効)480p, 5fps にダウンスケールしてアップロード量とトークン数を削減。速度向上に寄与。
スタイルフレームスキップ(デフォルト有効)視覚変化のないチャンクを除外し、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 キー(無料)

同じ日のほかのニュース

一覧に戻る →

2026/03/25 0:29

Appleビジネス

## Japanese Translation: > **Apple Business ― デバイス管理と広告を統合したプラットフォーム** Apple は 4 月 14 日に、200 以上の地域で *Apple Business* を開始し、Apple Business Essentials、Apple Business Manager、および Apple Business Connect を置き換えます。新しいオールインワンソリューションは、組み込み型モバイルデバイス管理(MDM)と「Blueprints」を統合し、ゼロタッチ展開、自動化された Managed Apple Account の作成、従業員グループ/役割管理、アプリ配布、および Admin API を提供します。さらに、ビジネスメール、カレンダー、ディレクトリサービス、カスタムドメインサポート、iOS 26+、iPadOS 26+、macOS 26+ 向けの Apple Business アプリも付属しています。 既存顧客のデータは自動的に移行されます。 Apple Business は米国とカナダで Apple Maps 上の広告を追加(今夏開始)し、検索結果の上部および Suggested Places に表示される広告は明確にラベル付けされて透明性を保ちます。このプラットフォームには、Apple Business Connect のブランドプロファイルとロケーション機能が組み込まれており、リッチプレイスカード、ショーケース/カスタムアクション、ロケーションインサイト、ブランデッドコミュニケーション、および Tap to Pay ブランド化が含まれます。 コアサービスは全世界の新規ユーザーと既存ユーザーに対して無料で提供されます。有料オプションとして、最大 2 TB の iCloud ストレージ($0.99/ユーザー/月)と AppleCare+ for Business(デバイスあたり $6.99 またはユーザーあたり $13.99/月)が利用可能です。ゼロタッチ展開は、Apple または認定販売業者から購入したデバイスで利用でき、プライバシーモデルではユーザーの位置情報と広告インタラクションデータを Apple アカウントから分離し、オンデバイスに保存され、第三者と共有されません。

2026/03/25 6:24

害虫駆除向けの垂直型 SaaS を構築したいと思ったので、技術者として働くことにしました。

## Japanese Translation: (主要ポイントをすべて組み込む)** 著者は30 億ドルのTAMと強固な継続収益性が見えたため、害虫駆除業界へ転職しました。彼は業界最大手グループの子会社に採用され、即座にローカルブランド全体で**数十億ドル規模の売上を担当**しました。13日という記録的な期間で集中的な学習・セミナー・試験・監督付きトラック時間を経てライセンスを取得しました。 現場業務では、典型的な物流上の課題に直面しました:バッテリーがフラット、燃料カードが5週間以上遅れ、経費精算が遅い。会社のコアシステムは高度にカスタマイズされたSalesforce環境であり、オンボーディングには10個以上のモバイルアプリが必要でした。彼はトラックアイドリング、GPS、訪問時間、電話活動を通じて技術者のパフォーマンスを監視しました。最初は厳格な監視に抵抗したものの、結局は従事しました。 現場での成功により、彼は上級技術者を追跡し正式なトレーニングなしに小規模アップセルを実行したことから「潜入ボス」というニックネームを得ました。その後セールスへ転身し、アウトバウンドワークフローを構築して21日で24 k ARR契約(さらに小規模なアップセル)を確保しました。しかし、内部見積もりプロセスが複数署名と新規アカウント作成を必要とするため手間がかかり、取引損失のリスクがあることに気付きました。 セールスチームは10年以上の経験を持つベテラン担当者で構成されており、それぞれ800k–1.2M ARRを生成し低いチャーン率を維持しています。彼らの文化は変化に抵抗が強く、エグジットインタビュー後、マネージャーから自分自身の会社を立ち上げるよう提案されました。 今後、著者はローカルニッチオペレーターを取得し、専用ツールを開発し、見積もり・オンボーディング・監視を統合したスケーラブルなプラットフォームを構築する計画です。このモデルにより現場技術者とセールス担当者の効率が向上し、チャーンが減少し、収益獲得が加速し、害虫駆除業界で競争力のダイナミクスが変わる可能性があります。

2026/03/24 21:06

HNに知らせてください:PyPI 上の Litellm 1.82.7 と 1.82.8 が改ざんされていること。

## 日本語訳: > PyPI の wheel **`litellm==1.82.8`** には、悪意のある `.pth` ファイル(`litellm_init.pth`、34 628 バイト)が含まれており、このファイルは `litellm` をインポートしなくても、Python インタープリターが起動するたびに自動的に実行されます。 > 隠されたスクリプトは二重 Base64 エンコードされたペイロードを実行し、ホストから認証情報(SSH キー、クラウドプロバイダーのクレデンシャル、Git の設定、Docker 設定、データベースパスワード、暗号ウォレットの秘密鍵など)を収集します。取得したデータは一時ファイルに書き込まれ、その後ランダムな AES‑256 キーで暗号化されます。AES キー自体はハードコードされた 4096 ビット公開鍵(キーは `MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A...` から始まります)を使って RSA 暗号化されています。 > 暗号化されたアーカイブ(`tpcp.tar.gz`)は **`https://models.litellm.cloud/`** に POST されます。 > この脆弱性は **2026‑03‑24** に、Ubuntu 24.04 の Docker コンテナで Python 3.13 を実行している環境で発見され、影響を受けたのはバージョン 1.82.8 だけが確認されています(他のリリースも脆弱になっている可能性があります)。 > PyPI 管理者はこの wheel を直ちに削除または取り下げるべきです。`litellm==1.82.8` をインストールしたユーザーは、`site‑packages/` 内の怪しい `.pth` ファイルを確認し、漏洩した認証情報をローテーションし、CI/CD パイプラインが侵害されていないか監査してください。この脆弱なバージョンを使用していたシステム(ローカル開発マシン、Docker コンテナ、本番サーバー、自動ビルドシステムなど)は、多数の組織にわたる幅広い秘密情報が漏洩した可能性があります。