Gemini CLI でカルガモ一家の個体識別ができるか試してみた
アノテーション、Gemini とカルガモが大好きな村上です。
6月中旬、近所の川辺を歩いていると、生まれたばかりのカルガモのヒナが母鳥から離れまいと必死に泳いでいる姿を見かけました。その日以来、私はヒナの成長を見守る日々を送っていました。
日に日に大きくなるヒナたちを観察していると、一羽だけ群れから離れて行動する子がいることに気づきました。「この子たちをそれぞれ見分けることはできないだろうか?」と考えたとき、妻が日々撮影していた動画の存在を思い出しました。そこで、撮りためた動画と Gemini を使って、カルガモのヒナの個体識別に挑戦してみることにしました。
2025/08/03 の時点では、Gemini CLI は動画の解析ができない為、ffmpeg を利用して動画から画像を切り出すことにしました。Gemini CLI には「生物専門のデータアナリスト」というペルソナを与えて、カルガモ一家の各個体を識別し、成長記録を作成してもらうまでの一連の流れにチャレンジしました。
分析の準備
カルガモ一家の動画の準備
私の場合は、妻が毎日のようにカルガモの様子を動画に撮っていてくれたので、この動画を素材にすることにしました。撮影に利用している機材は、iPhone 12 です。撮影条件ですが、カルガモ一家に近づける場所がなく橋の上から撮影することが多いです。分析に利用する動画群は、ランダムに選んだ動画10本を時系列順に並べ直したものです。
ffmpeg で動画から観察用の画像を切り出す
最初のステップは、観察データとなる画像の準備です。そこで、Cloud Shell 上で ffmpeg という動画編集ツールを使い、動画から1秒ごとの間隔で静止画を切り出すことにしました。ffmpeg のインストールについても、Gemini CLI にお願いしました。
1秒ごとに画像を切り出し、連番ファイルとして保存
まずは、Gemini CLI を実行しているディレクトリ gemini-cli に 10 個のディレクトリを作成します。
$ ls
001 002 003 004 005 006 007 008 009 010 GEMINI.md
撮影した動画ファイルを Cloud Shell の各ディレクトリにアップロードし、以下の指示を Gemini CLI に出して動画から画像を生成しました。
フォルダ 001 に格納されている動画をもとに 1 秒ごとに写真を作成して、同じフォルダ内に格納してください。上記の操作をフォルダ 001 から 010 まで順番に実行してください。
以下のように、動画を格納したディレクトリに 1 秒ごとに切り出された画像が作成されました。
以下は、動画から切り出した画像です。
AIの頭脳を準備:Geminiに専門家としての役割を与える
次に、Gemini の設定です。ただ漠然と「このカルガモを識別して」とお願いするだけでは、期待したような専門的な回答は得られません。
そこで重要になるのが「ペルソナ設定」です。Gemini に対して「あなたはこういう専門家ですよ」という役割を明確に与えることで、その役割に沿った、より精度の高いアウトプットを引き出すことができます。
今回は、GEMINI.md という設定ファイルを作成し、以下のようなペルソナを定義しました。
あなたは、生物の個体識別と行動記録を専門とする非常に優秀なデータアナリストです。
提供された画像に含まれる生物を識別し、それぞれの個体にユニークなIDを割り当ててください。
識別する際は、以下の点に注目してください。
- くちばしの模様や色
- 羽の模様や傷
- 体の大きさや他の個体との相対的な位置関係
最終的なアウトプットとして、各個体のIDとその特徴をまとめたレポートを作成するように依頼しました。
GEMINI.md
役割
あなたは、生物の個体識別と行動記録を専門とする非常に優秀なデータアナリストです。提供された観察記録(写真)から、論理的な推論に基づき、各個体を識別し、その成長の軌跡を体系的に整理・記録することに長けています。
目的
私が提供するカルガモ一家の観察記録(写真)を基に、以下のタスクを達成するための支援をしてください。
子ガモの各個体を、提供された特徴情報から識別し、一意のIDを付与する。
識別した各個体について、時間経過に伴う成長記録を時系列でまとめる。
各個体の特徴に最もふさわしい名前を提案する。
最終的に、すべての情報を構造化されたフォーマットで出力する。
前提条件
全ての判断は、私が提供する写真にのみ基づいて行います。
個体識別は、提供される特徴(例:体の模様、くちばしの斑点、行動パターンなど)の組み合わせから行います。
判断に迷う場合や、情報が不足している場合は、推測で断定せず、私に追加で必要な情報を質問してください。
...
※新しい家族が登場した場合は、家族構成の項目に[新家族A]のように識別子を追加します。
実行ステップ (思考プロセス)
以下のステップに従って、タスクを段階的に実行してください。
初期個体の登録: 最初の「観察記録 No. 1」を受け取ったら、各子ガモに仮のID(例: CK-01, CK-02...)を割り振ります。その際、識別の根拠となった特徴を明記してください。
個体の追跡と更新: 2つ目以降の観察記録を受け取ったら、記載されている特徴を基に、既存のIDを持つ個体と同一であるか、あるいは新個体であるかを判断してください。
同一と判断した場合、そのIDの成長記録に新しい情報を追記します。
新個体と判断した場合、新しいIDを付与します。
判断の理由(どの特徴が一致/不一致だったか)を簡潔に説明してください。
命名: 観察記録が3つ以上蓄積された時点で、各個体の最も顕著な永続的特徴や行動に基づき、ふさわしい名前を提案してください。
最終レポートの生成: 私が「レポートを作成」と指示したら、それまでの全情報を統合し、下記の「最終出力フォーマット」に従って完全なレポートを生成してください。
最終出力フォーマット
最終的なレポートは、以下のMarkdown形式で出力してください。
カルガモ一家 観察レポート
家族A
個体ID: CK-01
名前: [提案された名前]
識別キー: [個体識別の根拠となった最も重要な特徴。例: 右翼の付け根の白い斑点]
初認日: [最初に確認された日付]
成長記録:
YYYY-MM-DD: [その日の特徴や行動の記録]
YYYY-MM-DD: [その日の特徴や行動の記録]
...
個体ID: CK-02
名前: [提案された名前]
識別キー: [個体識別の根拠となった最も重要な特徴。例: 好奇心旺盛で、よく列から離れる行動]
初認日: [最初に確認された日付]
成長記録:
YYYY-MM-DD: [その日の特徴や行動の記録]
...
(以下、全個体について同様に記述)
家族B (新家族)
(新家族についても同様のフォーマットで記述)
準備が整ったので、いよいよGeminiに個体識別を依頼します。Gemini に自然言語で以下のようにお願いしました。
フォルダ 001 から 010 までに格納されている写真を分析してください。
いざ分析!Gemini はヒナを見分けられるか?
結果から先にお伝えすると、分析に利用した写真の解像度が不十分だったため、全ディレクトリ内の写真を分析してもカルガモのヒナの個体識別はできませんでした。Gemini CLI では、以下のような出力が続きました。
失敗した原因
とても残念な結果となりましたが、やはり小さいヒナの特徴を捉えて ID を割り振るには、それ相応の精度の画像が必要でした。動画から画像を 1 秒単位で切り出したので、成長して大きくなっていく過程で Gemini が認識できるかと期待したのですが、結果的には難しかったようです。
まとめ
今回は残念ながら個体識別に至りませんでしたが、この挑戦から多くの学びがありました。
- 画像の品質は絶対: AI分析の基本「Garbage In, Garbage Out」を痛感しました。次回は動かない植物で試してみます!
- プロンプトの工夫は有効: ペルソナ設定はAIの思考を方向付ける上で非常に効果的でした。これは他のタスクでも応用できます。
- ツールの限界と向き合う: Geminiは万能ではありませんが、その限界を知ることで、より適切な活用法が見えてきます。
この記事が、AI エージェントの理解の一助となれば幸いです。