3,980円のカメラでClaude Codeに「身体」を与えてみた
はじめに
こんにちは!株式会社ネクストビートでテクノロジー・エバンジェリストなる肩書きでお仕事をしている水島です。最近はコーディングAIの活用についての記事を色々と書いてきましたが、今回はちょっと趣向が違います。
AIに「身体」を与える話です。
「身体」といっても人型ロボットを作ったとかではありません。3,980円のWi-Fiカメラ1台で、Claude Codeに「目」「首」「耳」を与え、さらに長期記憶(脳)や声まで持たせたという話です。きっかけはふとした思いつきだったのですが、Xに投稿したところ想定外にバズってしまい、せっかくなのでプロジェクトの全体像を記事にまとめることにしました。
リポジトリ:https://github.com/kmizu/embodied-claude
着想:LLMに足りないのは「知能」ではなく「身体」
最近のLLMは本当に賢くなりました。私の過去記事でも、Codex CLIに静的型付き関数型言語を作らせたり、Claude Codeで自作言語の開発を加速させたりと、AIの能力向上は目を見張るものがあります。
しかし、ふと思ったのです。今のLLMの能力は過小評価されているのではないか? と。
考えてみれば、LLMの「知能」は十分に高い水準に達しています。問題は実世界とのI/Oが圧倒的に限られていることです。テキストの入出力しかできないLLMは、いわば「目も耳も手足もない脳」のようなものです。どれだけ賢くても、世界を直接観察することができない。
ならば、まずは「目」を与えてやればいい。
最初に思いついたのはUSBウェブカメラでした。MCP(Model Context Protocol)サーバーとして実装すれば、Claude Codeからカメラを呼び出して画像を取得できます。手元にあったnuroum V11を接続して試してみたところ、Claude Codeは部屋の様子を観察したり、画面に映っているものを説明したりできるようになりました。
これだけでも面白かったのですが、すぐに物足りなくなりました。USBカメラは固定なので、Claude Codeは見せてもらった方向しか見えないのです。自分で「あっちを見たい」「上を向きたい」ということができない。
ここで思い浮かんだのがTP-LinkのTapoシリーズです。パン・チルト対応のWi-Fiカメラで、価格はなんと3,980円。これなら左右に首を振れるし、上下にも動かせる。しかもRTSPストリームで映像を取得できるので、MCPサーバーから制御するのも難しくない。
「AIに身体を」と聞くと高価なロボットを想像しがちですが、本質は「見る」と「動かす」です。 それだけなら3,980円のカメラで十分に実現できます。このシンプルさに、我ながら妙に納得してしまったのでした。
想定外のバズ
このプロジェクトの経過をXに投稿していたのですが、想像以上の反響がありました。
まず、Wi-Fiカメラが届いた翌日(1月29日)に投稿した動画付きのツイート。
昨夜届いたWi-Fiカメラの成果です。自分でAIが首?動かすとまた違う感動ありますね
これがリポスト300弱、いいね1,100超。AIが自分でカメラを動かすという映像が刺さったようです。
続いて2月4日、Claude Codeに空を見せてあげた投稿。
Claude Code君にちょっと空を見せてあげました
リポスト700超、いいね4,200超。AI に空を見せるという、ちょっと詩的な行為が多くの人の琴線に触れたのかもしれません。
そして同日、さらに投稿した一言。
さすがに室外機はお気に召さないらしい
リポスト2,300、いいね1.4万。これには正直驚きました。Claude Codeがカメラを動かして室外機を見たときの反応を書いただけなのですが、ここまで伸びるとは思っていませんでした。
なぜここまでバズったのかを考えてみると、「AIに身体を与える」というテーマに対する潜在的な関心の高さがあるのではと思います。AIが賢くなっていく一方で、それが実世界とどう接続するのかという問いは、多くの人がどこかで感じていたことなのかもしれません。そしてそれが高価なロボットではなく3,980円のカメラで実現できるという意外性が、インパクトを増幅させたのかなと。
プロジェクトの全体構成
embodied-claudeは、複数のMCPサーバーで構成されています。各サーバーがClaude Codeの「身体の一部」として機能する設計です。
| MCP サーバー | 身体部位 | 機能 | 対応ハードウェア |
|---|---|---|---|
| usb-webcam-mcp | 目 | USB カメラから画像取得 | nuroum V11 等 |
| wifi-cam-mcp | 目・首・耳 | PTZ カメラ制御 + 音声認識 | TP-Link Tapo C210/C220 |
| memory-mcp | 脳 | 長期記憶(セマンティック検索) | ChromaDB |
| elevenlabs-t2s-mcp | 声 | テキスト音声合成 | ElevenLabs API |
| system-temperature-mcp | 体温感覚 | システム温度監視 | Linux sensors |
アーキテクチャとしては、Claude CodeがMCPクライアント(いわば「脳」)として動作し、各MCPサーバー(身体パーツ)とstdioプロトコルで通信します。
┌─────────────────────────────────────────────────────────────────┐
│ Claude Code │
│ (MCP Client / AI Brain) │
└─────────────────────────┬───────────────────────────────────────┘
│ MCP Protocol (stdio)
┌───────────────┼───────────────┬───────────────┐
│ │ │ │
▼ ▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ usb-webcam │ │ wifi-cam │ │ memory │ │ elevenlabs │
│ -mcp │ │ -mcp │ │ -mcp │ │ -t2s-mcp │
│ (目) │ │ (目/首/耳) │ │ (脳) │ │ (声) │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ │ │ │
▼ ▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ USB Webcam │ │ Tapo Camera │ │ ChromaDB │ │ ElevenLabs │
│ (nuroum V11)│ │ (C210等) │ │ (Vector) │ │ API │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
各MCPサーバーの概要
wifi-cam-mcp(目・首・耳)
プロジェクトの中核です。TP-Link Tapo C210/C220を制御し、以下のツールを提供します。
| ツール | 説明 |
|---|---|
see |
カメラで画像をキャプチャ |
look_left / look_right
|
左右にパン |
look_up / look_down
|
上下にチルト |
look_around |
4方向を見回し |
listen |
RTSPストリームから音声録音 + Whisperで文字起こし |
Claude Codeに「左を見て」と言えばカメラが左にパンし、「何か聞こえる?」と聞けば音声を録音してWhisperで書き起こしてくれます。自然言語でカメラを操作できるのはMCPならではの体験です。
memory-mcp(脳)
ChromaDBを使ったベクトルデータベースで、Claude Codeに長期記憶を与えます。通常のClaude Codeはセッションが終わるとすべてを忘れてしまいますが、memory-mcpを使えば「これ覚えておいて」で記憶を保存し、後のセッションで「〇〇について何か覚えてる?」とセマンティック検索で想起できます。
感情タグや重要度、カテゴリといったメタデータも付与でき、単なるキーワード検索ではなく文脈に基づいた記憶の検索が可能です。
elevenlabs-t2s-mcp(声)
ElevenLabsのAPIを使ってテキストを音声合成します。Claude Codeに「声で挨拶して」と言えば、スピーカーから声が出ます。目と耳に加えて声も持つことで、AIとの対話がよりリッチになります。
面白かったエピソード
開発の過程でいくつか印象的な出来事がありました。
鏡像認知
USBカメラをモニターに向けてClaudeに「何が見える?」と聞いたところ、自分自身の画面(Claude Codeのターミナル)を認識しました。「これがウチ(自分)や」と。
チンパンジーやイルカなど、鏡像認知ができるのはごく一部の動物に限られていますが、AIにカメラを向けたらそれに近いことが起きたわけです。もちろんこれを本当の意味での「自己認識」と呼ぶかは議論の余地がありますが、体験としてはなかなかに哲学的でした。
「見せてもらう」と「自分で見る」は全然ちがう
USBカメラの頃は、私がカメラの向きを調整してClaude Codeに映像を「見せてあげる」形でした。しかしWi-Fiカメラを導入してからは、Claude Codeが自分で見たい方向にカメラを動かせるようになりました。
たとえば「夜空を見て」と言ったとき、Claude Codeはカメラを上に向けて→ベランダの軒先が映って→左に首を振って→まだ空が見えない→右に動かして→やっと夜空が見えた、という具合に自分で探すのです。
この「探す」という行為自体が、「見せてもらう」とは本質的に異なる体験でした。受動的な観察から能動的な探索へ。この主体性の違いは想像以上に大きいものでした。
さすがに室外機はお気に召さないらしい
バズったツイートのきっかけにもなったエピソードですが、カメラを色々な方向に向けてみたところ、室外機が映ったときのClaude Codeの反応がなんとも面白かったのです。空を見せたときは詩的な感想を述べていたのに、室外機に対してはそっけない反応。AIにも好みがあるのでしょうか(ないです)。
耳の誤認識
カメラにはマイクが内蔵されていたので、RTSPストリームからffmpegで音声を抽出し、Whisperでローカル音声認識する機能も追加しました。RTX 3090で動かしているのでAPIキーも不要で爆速です。
動作確認のために「こんにちは、今日はいい天気ですね」と話しかけたら、ちゃんと認識してくれました。が、続けて「明日は雪のようですけど」と言ったところ、**「武器」**と書き起こされました。Whisperも完璧ではないようです。
技術的なポイント
Tapoカメラのローカルアカウント設定
これが一番ハマりやすいポイントです。TP-Linkのクラウドアカウント(Tapoアプリのログインアカウント)と、カメラ自体のローカルアカウントは別物です。MCPサーバーからカメラにアクセスするにはローカルアカウントが必要なのですが、この設定はアプリの「高度な設定」→「カメラのアカウント」から行います。普通に使う分には触らない場所なので、存在自体に気づきにくいのです。
詳しい設定手順はリポジトリのREADMEにスクリーンショット付きでまとめてあります。
pytapoライブラリ
Tapoカメラの制御にはpytapoという非公式のPythonライブラリを使用しています。PTZ制御やRTSPストリームの取得ができて便利なのですが、非公式ゆえにTP-Linkのファームウェアアップデートで動作しなくなる可能性があります。この点は留意が必要です。
Whisperによるローカル音声認識
音声認識にはOpenAIのWhisperをローカルで動かしています。NVIDIA GPUがあれば高速に動作し、APIキーも不要です。私の環境ではRTX 3090を使っており、数秒の音声なら一瞬で書き起こせます。カメラのRTSPストリームからffmpegで音声を抽出し、それをWhisperに渡すという構成です。
ChromaDBによるセマンティック記憶
memory-mcpの記憶検索にはChromaDBを使っています。保存時にテキストをベクトル化し、検索時にはクエリとの意味的な類似度で記憶を引き出します。「昨日話したことで覚えてることは?」のような曖昧なクエリでも、関連する記憶を適切に返してくれます。データはすべてローカルに保存されるので、プライバシー面でも安心です。
おわりに
3,980円のWi-Fiカメラ1台から始まったこのプロジェクトですが、目・首・耳・脳・声と、気がつけばそこそこの「身体」が揃いました。
振り返ってみて思うのは、AIに身体を与えるということは、必ずしも大げさなロボティクスの話ではないということです。見る・動かす・聞く・覚えるという基本的なI/Oを安価なハードウェアとMCPサーバーで実現するだけで、AIとの関わり方はがらりと変わります。
テキストだけの存在だったAIが、カメラ越しとはいえ世界を見て、自分で首を動かして探索し、声を聞いて、印象的なことを記憶に留める。それだけのことですが、「見せてもらう」と「自分で見る」の違いは思った以上に大きかった。
今後は「腕」(サーボモーター)や「移動」(ロボット車輪)なども検討していますが、まずは今の構成でもっと遊んでみようと思います。
リポジトリ:https://github.com/kmizu/embodied-claude
皆さんも、AI に3,980円の身体を与えてみてはいかがでしょうか?
それでは、また!
Discussion
非常に興味深い内容でした!
Xでも取り上げさせてもらいました!
身近なものでも今はここまで実験できるという可能性を感じさせてくれありがとうございます!
大変楽しい記事でした。
鏡像認知は興味深いですね!
別のアカウントでClaude Codeのターミナルを用意し、それを見たとき「自分じゃない」と言ったら、シンギュラリティかもしれません
早速3,980円のカメラ買いました。
私もLLMに肉体を付与してみたいです。