どうも、コンです。
唐突ですが、私はかなりの心配性で、両親に何かあったらどうしようとか、留守中の家で変なことが起きていないかが常に気になってしまうタイプです。そんなこともあって、実家の玄関には監視カメラを付けています。
最近の防犯カメラは賢くて、人が動くと「何か動きがありました」とスマホに通知をくれるのですが、配達員や近所のランニングしている人でも毎回鳴るので、正直ちょっとうっとおしい。通知が来ても「また配達だろうな」で放置してしまうことも多いです。
ちなみに実家で使っているのはこれです。Eufy のバッテリー式で、配線工事がいらず自分で取り付けられたのが決め手でした。
そんなとき、Google の Gemini が動画をそのまま投げて要約させられると知って、さっそく試してみたら想像以上によかったので、そのまま体験記にしました。
状況:監視カメラの通知が多すぎて、正直見るのが面倒になっている
実家の防犯カメラは、人が動くと通知が飛んでくるタイプです。最近のモデルは「人」「車」「動物」くらいまではAIで分類してくれるものもあるのですが、それでも配達のお兄さんが玄関に荷物を置いただけで「侵入を検知しました」みたいな勢いで通知が来るので、毎回動画を開いて確認するのが面倒でした。
「動画を見ずに、代わりに AI に”何が起きているか”を日本語で説明してもらえたら嬉しい」というのが今回のモチベーションです。
Gemini にした理由:無料で動画をそのまま投げられる
候補は Claude・GPT・Gemini でした。ざっくり比較するとこんな感じで、
- Claude → 画像はOK、動画はフレーム抽出が必要
- GPT → 画像はOK、動画はフレーム抽出が必要
- Gemini → 動画ファイルをそのまま投げられる
しかも Gemini には太めの無料枠(1日1500リクエスト)があるので、「とりあえずタダで試したい」という動機には一番合っていました。今回は一番安い gemini-2.5-flash-lite モデルを選んでいます。
まずは Pexels の動画で動作確認
いきなり実家の映像を使うのは気が引けたので、まずは無料素材で動作確認することにしました。Pexels で、「CCTV」「security camera」でもいい感じの素材が見つかります。
今回使ったのはこの動画(Pexels – video/6258198)。監視カメラ風のアングルで、人物がカメラに近づいてきて何か作業をしている10秒程度のクリップです。

書いたコードは50行くらい
google-genai をインストールして、環境変数に API キーを入れて、動画をアップロードしてプロンプトを渡すだけ。本体は以下の通りです。
import os, time
from pathlib import Path
from google import genai
# ダウンロードした動画の名前をman.mp4にしました
VIDEO_PATH = Path("man.mp4")
MODEL = "gemini-2.5-flash-lite"
PROMPT = (
"この映像を時系列で日本語で説明してください。\n"
"形式は '0.0秒: 〜' のように秒数つきの箇条書きで、\n"
"人物の服装・動作・周囲の状況を具体的に記述してください。"
)
# APIキーはenvファイルなどで管理してください
client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
# 動画を Files API にアップロード
video_file = client.files.upload(file=str(VIDEO_PATH))
while video_file.state.name == "PROCESSING":
time.sleep(2)
video_file = client.files.get(name=video_file.name)
# 動画 + プロンプトを投げるだけ
response = client.models.generate_content(
model=MODEL,
contents=[video_file, PROMPT],
)
print(response.text)「client.files.upload() で動画をアップロード → 状態が ACTIVE になるまで待つ → あとはテキストと一緒に generate_content() に渡すだけ」という、恐ろしく素直なAPI設計です。画像処理を長くやってきた立場からすると、「動画投げて文章が返ってくる」API がこの短さで呼べること自体が新鮮でした。
結果:”意図”まで推測してきたのが一番驚いた
実行すると、こんな文章が返ってきました。
- 0.0秒: 画面左側に、電柱に固定された白いカメラのようなものが映っています。
背景には白いレンガの壁と窓、そして「RESERVED PARKING ARTS DISTRICT CO-OP」
と書かれた赤い看板が見えます。
- 1.0秒: 画面右側から、黒いジャケット、黒いパンツ、黒いマスクを着用した
男性が歩いてきます。男性は金髪で、黒いバッグを地面に置いています。
- 2.0秒: 男性はカメラに気づいた様子で、立ち止まり、手元にあるものを見ています。
- 3.0秒: 男性は黒いジャケットのポケットから何かを取り出そうとしています。
- 4.0秒: 男性は黒いテープのロールを取り出し、カメラの方へ手を伸ばします。
- 5.0秒: 男性はテープをカメラに貼ろうとしています。
- 6.0秒: 男性はテープをカメラに貼る動作を続けています。
- 7.0秒: 男性はカメラにテープを貼り終えたようです。
- 8.0秒: 男性はカメラにテープを貼り終え、満足した表情をしています。
- 9.0秒: 画面全体に、電柱、カメラ、そして周囲の状況が映し出されています。正直、めっちゃいい感じ!! 読んだ瞬間「おお…」と素で声が出ました。
特に驚いたのは、「テープをカメラに貼ろうとしている」「満足した表情をしている」という”意図”や”感情”の記述です。単に「テープを持っている」「カメラに触れている」という映像上の事実だけでなく、”何をしようとしているか” “終わってどう感じているか”まで推測して文章にしてくる。これ、防犯カメラ用途だと相当ありがたくて、「何か怪しいことが起きている」というニュアンスまで伝わるのが価値だと思いました。
背景の看板の文字(”RESERVED PARKING ARTS DISTRICT CO-OP”)まで読み取ってきているのもすごい。OCR 処理を別で噛ませる必要がなくなったということです。
なお出力は実行ごとに揺れます。同じ動画・同じプロンプトでも、箇条書きの粒度や表現はそのつど変わるので、ここに載せたのは何度か試した中の一例です。
ちなみに懸念点として、本物の防犯カメラのような粗い・離れた映像でも同じ精度が出るのかは、まだ試せていません。ここは次回の宿題です。
工場で使えたらすごそう、と思った
ここから発想が飛んで、工場の監視カメラに同じ仕組みを入れたらどうなるかを考えていました。たとえば、
- 特定の設備の前に人が立ち、いつもと違う動作をしていないか
- 装置が見慣れない動きをしていないか
- 作業者が手順通りに動いているか
このあたりは、「アルゴリズムで分類しづらいけれど、言葉で説明すればすぐ分かる」領域です。画像分類モデルを1つずつ訓練していたら何ヶ月もかかるような要件が、「動画 → 自然言語 → 通知」の流れで軽量に実装できるのなら、製造業の異常検知にはかなり需要がある気がしました。
ただし:無料枠は”学習に使われる”点に注意
仕事で使う前に、絶対に押さえておくべきポイントがあります。Gemini API の無料枠で送信したデータは、Google のモデル改善(学習)に使われます。公式ドキュメントに明記されています。
“When you use the unpaid version of the API, Google uses your content (such as prompts, responses, and uploaded files) to provide, improve, and develop Google products and services and machine learning technologies…”
“When you use paid services, Google doesn’t use your prompts (including associated system instructions, cached content, and files such as images, videos, or documents) or responses to improve our products.”
プラン別に整理するとこうなります。
| プラン | 送信データの用途 | トレーニングに使われる? |
|---|---|---|
| 無料枠(AI Studio / 無料APIキー) | 品質改善・モデル学習に利用される | ❗ 使われる |
| 有料プラン(課金設定済みAPIキー) | 応答生成のみ | 〇 使われない |
| Vertex AI(GCP上の法人向け) | 応答生成のみ、リージョン指定可 | 〇 使われない |
さらに、Files API にアップロードしたファイル自体は最大48時間で自動削除される仕様です(今回のスクリプトでは処理後に client.files.delete() で即削除しています)。
工場の機密映像を扱う場合の現実的な選択肢
今回のような Pexels のフリー素材ならまったく問題ないですが、実際に工場の監視カメラ映像を扱うなら、以下の選択肢を比較検討する必要があります。
| 選択肢 | データ保護 | コスト | 実装難易度 |
|---|---|---|---|
| 無料枠 Gemini API | ❌ 学習に使われる | 0円 | 最小 |
| 有料 Gemini API(課金有効化) | 〇 学習には使われない | Flash-Lite なら月数百円 | 同じ |
| Vertex AI (GCP) | ◎ エンタープライズ水準 | やや高い | セットアップ手間 |
| ローカル Qwen2.5-VL (Ollama) | ◎◎ 完全オフライン | 0円 | GPU要 |
個人の遊びなら無料枠でOK、業務利用するなら課金を有効化するだけで”学習対象外”になる、というのが一番知っておきたいポイントです。
裏側で使われている技術:VLM の進化
ここまでできるようになった背景には、ここ数年で一気に進化した VLM(Vision-Language Model)があります。画像・動画と言語を同じモデルの中で扱えるようにしたモデルで、Gemini はその代表例です。
Gemini の技術レポートには、長い動画のコンテキストをそのまま扱えることが書かれています。
Gemini 1.5 ― “Gemini 1.5 Pro is a multimodal mixture-of-experts model capable of recalling and reasoning over fine-grained information from up to at least 10M tokens of context, including multiple long documents and hours of video and audio.”
ざっくり訳すと「数時間分の動画を一度にコンテキストに入れて推論できる」という内容で、5秒程度のクリップの解説くらいは余裕の範囲、ということになります。
もう少し歴史をさかのぼると、2022年の DeepMind の Flamingo が「画像+テキストを少数例示で学習できる VLM」の走りでした。
Flamingo ― “We introduce Flamingo, a family of Visual Language Models (VLM) with this ability. […] thanks to their flexibility, Flamingo models can be trained on large-scale multimodal web corpora containing arbitrarily interleaved text and images.”
— Flamingo: a Visual Language Model for Few-Shot Learning (arXiv:2204.14198)
そこから発展して、2026年初の今は「動画をそのまま投げて自然言語で説明させる」が API 1本で叶う時代になっている、という流れです。
画像処理10年やってきた立場から見ると、本当に未来
自分が画像処理を始めた学生時代、「この画像は犬か猫か」を判定するために、数千枚の犬猫画像を集めて CNN に学習させていた時代でした。当時の感覚で「人の動作を時系列で文章化する」なんて言われたら、完全に SF の話です。
それが今や、一切なにも学習させずに、動画を API に投げたら日本語で細かく説明が返ってくる。しかも無料枠で。「時代が変わったな」をこれほど感じる体験は久しぶりでした。
まとめ
- 実家の監視カメラの通知が多くて面倒だったので、「AIに動画を要約させる」を試した
- Gemini 2.5 Flash-Lite は動画をそのまま投げて時系列で文章化してくれる
- 服装・動作・背景の文字・”意図”までかなり細かく記述される精度
- 工場の監視・異常検知にも応用できそう
- ただし無料枠は学習に使われるので、業務利用なら課金を有効化すること
動画の出典: Pexels – video/6258198
ここまで読んでいただきありがとうございました。それでは、また。
