USB カメラで機器の液晶画面を拡大して撮る社内アプリ / AI が自分で写真を撮って確かめられる HTTP の窓口つき / 版 2026-10-18 / スタッフ限定・社外に出さないこと
資料: このページの PDF 版 / 編集用 Word 版
動画では、CameraMonitor を 2 重起動してカメラ 2 台で 2 つの M5 の画面を写しています。M5 に出ている値は、パソコン側の DMX 連続試験(COM73 → COM74)が送っているものです。CameraMonitor の操作はすべて HTTP の窓口(localhost / 127.0.0.1)から行い、マウスは使っていません。右上の黒い窓に、送った命令と返事が出ています。照明には出していません。音声: VOICEVOX:No.7
CameraMonitor は、USB カメラの映像を見ながら、機器の液晶画面を拡大して撮るアプリです。M5 などの実機の表示を、カメラ越しに見張ったり記録したりできます。

スタートメニューの「CameraMonitor」を開きます(実体は E:\tool_cs\CameraMonitor\bin\Release\net10.0-windows\CameraMonitor.exe)。カメラを選んで Start を押すと映像が出ます。窓の位置・大きさは閉じたときの場所を覚えます。
もう 1 回起動すると #2 として開き、タイトルに #2 が付きます(最大 #4。--slot N で番号を指定)。番号ごとに置き場が分かれます。
| 番号 | HTTP | 設定ファイル | 状態ファイル | 保存先(exe と同じフォルダ) |
|---|---|---|---|---|
| #1 | localhost:8765 | camera_config.json | e:\tmp\ai_camera\ | CameraCapture\ |
| #2 | localhost:8775 | camera_config_2.json | e:\tmp\ai_camera_2\ | CameraCapture_2\ |
| #3 / #4 | 8785 / 8795 | camera_config_3.json など | ai_camera_3\ など | CameraCapture_3\ など |

| 番号 | 部品 | 役目 |
|---|---|---|
| 1 | カメラの選択 | DirectShow の名前。開くたびに一覧を取り直す |
| 2 | Start / Stop | 映像の開始・停止 |
| 3 | Capture | カメラ全体の絵を JPEG で保存(8 章) |
| 4 | 回転 | Landscape / Portrait CW 90° / Upside-down 180° / CCW 270°(9 章) |
| 5 | Zoom(紫)・Auto LCD(水色)・AI Debug(オレンジ) | 拡大の範囲をドラッグで決める・液晶を自動で探す・検出の途中経過を保存する(7 章) |
| 6 | 戻す | Auto LCD をかける前の範囲と向きに戻す(1 回分) |
| 7 | API | この窓の HTTP の番号(#1 は 8765) |
| 8 | Auto Focus / Focus | 自動フォーカスの入り切りと、手動のフォーカス 0〜255(6 章) |
| 9 | Auto Exp / Exposure | 自動露出と露出 -13〜0。動かさないのが安全(5 章) |
| 10 | Brightness | 明るさの底上げ(5 章) |
| 11 | 保存先と命令の一覧 | 保存するフォルダと、HTTP の主な命令 |
| 12 | カメラ全体の映像 | 緑の枠が拡大の範囲(ROI) |
| 13 | 下の行 | いま何をしたか(Zoom の範囲、Auto LCD の結果、回転など) |
| 14 | Zoom 窓 | 拡大の範囲を大きく出す。右クリックで補間(なめらか ⇄ ドット)を切り替え |
| 15 | Capture ROI | 拡大の範囲だけを PNG で保存(Ctrl+S でも同じ) |
| 16 | (動画用)命令の窓 | AI が送った HTTP の命令(黄)と返事(緑)。CameraMonitor の部品ではない |
| 17 | (動画用)DMX 連続試験 | 4 章 |
| 18 | (動画用)COM Port Scanner | 4 章 |

動画では、CameraMonitor が写している 2 つの M5 に、パソコン側の試験で DMX を流しています。パソコンで試験をしながら、本物の機器の表示をカメラで見張る使い方です。
# の棒が値の大きさです。

Brightness(0〜255。カメラにより効く範囲が違う)は、露出を上げても暗いときの底上げです。動画ではカメラ 0 を 48 → 80 → 48、カメラ 1 を 32 → 48 → 32 にしました。値は設定ファイルに保存され(変えてから 2 秒ほどで書く)、次に開いたときも同じになります。

Auto Focus に印があると自動フォーカス。印を外すか Focus のつまみ(0〜255)を動かすと手動になります。動画ではカメラ 0 の自動を切って 80 にするとぼけ、32 に戻すとくっきりしました(最後に自動を入れ直す)。カメラ 1 は手動フォーカスで使っていて、22 から 40 にするとぼけ、22 に戻すと合います。

AI は、Focus を少しずつ変えながら拡大の絵を読み、いちばんくっきりする値(ラプラシアン分散が最大の値)を選ぶこともできます。
Zoom を押して、映像の上をドラッグすると範囲が決まり、Zoom 窓に大きく出ます(8×8 画素以上)。座標は回転した後の画像の画素です。画像の大きさは /status の image で分かります。

/roi?x=930&y=290&w=650&h=330)Auto LCD は、液晶の画面を自動で探して、向き(4 方向)を直し、範囲を決めます(暗い背景に明るい表示が前提)。カメラ 0 では M5 の画面を見つけました。カメラ 1 では、画面全体ではなく、明るい一部の帯(バーグラフや経過時間の所)だけを選びました。思った所を選ぶとは限らないので、結果を確かめ、違えば「戻す」か範囲の指定で直します。

AI Debug は Auto LCD と同じことをして、検出の途中の絵と選んだ理由を CameraCapture\ai_debug_<日時>\(frame.png・mask.png・contours.png・roi.png・info.json)に保存します。うまく選ばないときの調べに使います。
| 操作 | 保存するもの | ファイル名 |
|---|---|---|
Capture(AI: /capture) | カメラ全体の絵(JPEG) | cap_<日時>_<連番>.jpg |
Zoom 窓の Capture ROI・Ctrl+S(AI: /zoomcapture) | 拡大の範囲だけ(劣化の無い PNG) | zoom_<日時>_<連番>_<x>x<y>_<w>x<h>.png |
連写(AI: /burst) | 決めた時刻の前後をカメラの全部のフレームで(最大 120 秒) | burst_<開始時刻>\ に JPEG と index.csv |
保存先は exe と同じフォルダの CameraCapture\(#2 は CameraCapture_2\)。AI から保存したときは、返事に保存した場所が出ます。

/capture と /zoomcapture の返事(保存したファイルの場所)カメラの付け方に合わせて、表示を 90 度ずつ回します。動画のカメラ 0 は逆さに付けているので 180 度、カメラ 1 は縦に付けているので 90 度です。拡大の範囲は回した後の座標なので、向きを変えると別の所が映ります。

| 症状 | 見るところ・直しかた |
|---|---|
映像が真っ黒のまま(/meter?full=1 の max が 0) | そのカメラを開き直す。#2 なら curl "localhost:8775/camera?i=1"(i はカメラの番号)。5 秒ほど待って /meter?full=1 で確かめる。カメラ 1 では、露出を触っていないときにも起きたことがある |
| 下の行に「⚠ 映像が来ない」 | USB の帯域。2 台を同じ USB 2.0 ハブにつないでいないか |
| 2 台目が別のカメラを開いた・開かない | 別の CameraMonitor が使っているカメラは開かない。/cameras の used_by_other_instance |
| Auto LCD が違う所を選ぶ | 「戻す」か範囲を手で指定。液晶が光っているか、フォーカスが合っているか。AI Debug の contours.png で候補を見る |
| 暗い | Brightness を上げる(5 章) |
| ぼける | Auto Focus を切って Focus を合わせる(6 章) |
CameraMonitor は、AI(Claude Code など)が HTTP の窓口から読み取り・操作できます。動画の操作もすべてこの方法で行っています。窓口はこのパソコンの中だけ(localhost)、#1 は 8765、#2 は 8775 です。どれも GET で呼べます。
| パス | 内容 |
|---|---|
/help | 全部の命令と使い方(JSON)。AI はまずこれを読む |
/status | 状態(JSON): running・slot・camera_name・focus・autoFocus・exposure・autoExposure・brightness・rotate・image・roi・captures・burst |
/snap?q=80 /zoomsnap?q=92 | 全体 / 拡大の範囲の絵を JPEG で直接返す(保存しない)。範囲が無いと 409 |
/capture /zoomcapture | 全体 / 拡大の範囲を保存して場所を返す |
/roi?x=&y=&w=&h= /roi /roi?clear=1 | 拡大の範囲を決める(Zoom 窓が開く)・今の範囲・範囲を消す(Zoom 窓が閉じる) |
/autolcd[?debug=1] | Auto LCD。debug=1 で ai_debug を保存 |
/brightness?v= /focus?v= /autofocus?v=0|1 /rotate?v=0|90|180|270 | 明るさ・フォーカス(自動は切れる)・自動フォーカス・回転 |
/meter[?full=1] | 拡大の範囲(full=1 で全体)の明るさの数字(mean・max・min・saturation_pct・hist16)。照明の調光カーブを測るときに使う |
/cameras /camera?i=N /start /stop | カメラの一覧と使われ方・カメラ N を開く・開き直す・止める |
/burst?at=HH:mm:ss&pre=5&post=10 | 連写(8 章) |
/exposure /autoexposure /gamma /gain /wb | 露出など。カメラ 1 で映像が黒くなることがあったので、ふだんは触らない |
curl -s http://localhost:8765/status curl -s "http://localhost:8765/roi?x=900&y=225&w=705&h=700" curl -s "http://localhost:8765/zoomsnap?q=92" -o roi.jpg curl -s http://localhost:8765/meter curl -s http://localhost:8775/cameras

/cameras の返事。カメラ 0 は別の CameraMonitor(#1)が使っている
/help の先頭と、状態ファイル latest.txt の中身e:\tmp\ai_camera\(#2 は ai_camera_2\)に 2 秒ごとに書き出しています。AI はここを読むだけで、カメラの様子が分かります。
status.json — running・camera・image・rotate・roi・focus・autoFocus・exposure・autoExposure・brightness・captures・直近の meter・no_frames(開けたのに映像が来ない)。latest.txt — 同じ内容の 1 行まとめと直近の meter。README_AI.txt — 読み方。止まっているときや再ビルドは、AI が tools/restart_app.ps1 -AppName CameraMonitor で強制停止 → ビルド → 起動できます(開発担当の作業です)。
CameraMonitor 2026-10-18 / スタッフ限定。図と動画の画面は、カメラ 2 台で M5 の画面を写し、CameraMonitor を HTTP(localhost)から操作して撮った画面です(図は動画から切り出したもの)。概要は同じフォルダの OVERVIEW.md、以前の取説は 取扱説明書_CameraMonitor.html。