パトライト色検知システム
Circle Detector - パトライト状態監視システム 開発報告
ビジョン:カメラ映像からパトライトの状態を自動検知し、工場設備の稼働状況をリアルタイムでデータベースに蓄積する
実際の動作
1. 現在の課題(Problem)
製造現場のパトライト(積層信号灯)監視で日常的に発生している課題を整理しました。
1-1. 人による目視確認に依存した状態把握
パトライトの点灯・点滅状態(赤・黄・緑)の確認が担当者の巡回目視に頼っており、リアルタイムの稼働状況把握ができていない。その結果、異常発生から対応開始までのラグが生じ、ライン停止時間の長期化につながっている。
1-2. 設備状態データの未蓄積
パトライトの状態変化がデジタルデータとして記録されておらず、稼働率分析・傾向把握・トラブル原因の遡及調査が困難な状態にある。
現状の情報フロー:
├── パトライト点灯 ← 目視確認のみ
├── 担当者が気づく ← 見逃しリスクあり
├── 手動で記録(または未記録) ← データ断絶
└── → 設備状態の可視化・分析ができない1-3. 複数台設備への対応困難
設備台数が多い場合、すべてのパトライトを常時監視することは人的リソースの観点から現実的でない。
2. Circle Detectorでこう変わる(Solution)
| # | 現状(BEFORE) | 導入後(AFTER) |
|---|---|---|
| 1 | 担当者が目視でパトライトを確認 | カメラ自動検知でリアルタイム状態取得 |
| 2 | 状態データが記録されない | Oracle DBへ自動保存で稼働ログを蓄積 |
| 3 | 点滅パターンの区別が困難 | 点滅検出エンジンで点滅間隔まで識別 |
| 4 | 1台ずつ個別設定が必要 | Webブラウザ完結の直感的UI設定(今後拡張) |
導入後の構成イメージ
設備フロア
└── パトライト(積層信号灯)
├── 赤ランプ → 円領域として登録
├── 黄ランプ → 円領域として登録
└── 緑ランプ → 円領域として登録
│
↓(USBカメラで撮影)
Circle Detector (Raspberry Pi)
├── HSV色検出 → 赤/黄/緑/点滅を識別
├── ルール評価 → T1_STATUSコードに変換
└── MQTT送信 → Oracle DB INSERT各円領域はブラウザUI上でドラッグ描画するだけで設定完了。色のHSV値もカメラ映像をクリックして自動取得できる。
3. システム全体像
┌──────────────┐ ┌───────────────────┐ ┌─────────────────┐ ┌──────────────┐
│ USBカメラ │ ─→ │ 検出エンジン │ ─→ │ ルール評価エンジン │ ─→ │ MQTT Sender │
│ MJPEG映像 │ │ HSV平均算出 │ │ 優先度順マッチング │ │ 変化検知送信 │
│ 640×480 │ │ 点滅パターン検出 │ │ T1_STATUS決定 │ │ キュー補償 │
└──────────────┘ └───────────────────┘ └─────────────────┘ └──────┬───────┘
│
↓
┌──────────────────┐
│ MQTT Broker │
│ (Mosquitto) │
└────────┬─────────┘
│
↓
┌──────────────────┐
│ MQTT-Oracle Bridge│
│ → Oracle DB INSERT│
└──────────────────┘技術スタック
| レイヤー | 技術 |
|---|---|
| フロントエンド | Pure JavaScript、HTML/CSS、Serendie Design System |
| バックエンド | Python 3 / Flask、MJPEG ストリーミング |
| 画像処理 | OpenCV(HSV色空間検出、円形ROI抽出) |
| メッセージング | MQTT (paho-mqtt) / Mosquitto ブローカー |
| データベース | Oracle DB (oracledb) / Wallet認証対応 |
| インフラ | Raspberry Pi、systemd、Docker / k3s対応 |
4. 主要機能の詳細
4-1. HSV色検出(循環色相対応)
カメラ映像から円形ROI(関心領域)を切り出し、マスク内ピクセルの平均HSV値を算出して登録色とマッチングする。
入力: カメラフレーム (BGR) + 円定義 (center_x, center_y, radius)
↓
処理1: 円形マスク生成 → ROI切り出し
↓
処理2: BGR → HSV変換 → 色相H の循環平均算出(arctan2法)
↓
処理3: 登録ColorRangeとのHSVマッチング(色相は0°/180°境界を考慮)
↓
出力: 検出色名(例: "赤", "緑", None)4-2. 点滅検出エンジン(BlinkDetector)
時系列の色変化履歴から点滅パターンを自動識別する。点滅有無だけでなく、平均点滅間隔(ms)も出力するため、高速/低速点滅の区別が可能。
入力: 時刻ごとの検出色 (circle_id, color, timestamp)
↓
処理: window_ms (デフォルト2秒) 内の色変化を追跡
変化回数 >= min_changes かつ 間隔が 100ms〜1500ms
↓
出力: (is_blinking: bool, avg_interval_ms: float)4-3. 優先度ルールエンジン
複数の円検出結果を組み合わせて設備の稼働状態コード(T1_STATUS)を決定する。単一条件ルールと複合条件(AND)ルールの両方をサポート。
設定例:
ルール①(優先度100): 赤ランプ = 赤, 非点滅 → T1_STATUS = 10(異常)
ルール②(優先度 90): 赤ランプ = 赤, 点滅 → T1_STATUS = 11(警告)
ルール③(優先度 80): 緑ランプ = 緑 → T1_STATUS = 1(正常稼働)
デフォルト: → T1_STATUS = 04-4. フォールトトレラントな送信(FileQueue)
MQTT/Oracle接続断時もデータを失わないため、queue/ ディレクトリにJSONL形式でメッセージを永続化。接続回復後にバックグラウンドスレッドが自動再送する。
5. デバイス構成と連携
複数台のRaspberry Piを親機/子機として運用できる。
[複数設備エリア] [中央管理]
┌──────────────┐ ┌──────────────────────┐
│ 子機 Pi #1 │ MQTT ──→ │ 親機 Pi │
│ カメラ検出 │ │ ├── Mosquittoブローカー│
└──────────────┘ │ ├── MQTT-Oracle Bridge│
┌──────────────┐ MQTT ──→ │ └── Oracle DB 連携 │
│ 子機 Pi #2 │ └──────────────────────┘
│ カメラ検出 │
└──────────────┘- 親機:Mosquittoブローカー起動 + Oracle DBブリッジ起動 + NTP同期
- 子機:カメラ検出のみ実行、親機のブローカーにMQTT送信
- デバイスモードはWebUI初回セットアップウィザードで設定
送信データ形式(T1_STATUS)
| フィールド | 内容 |
|---|---|
mk_date |
計測タイムスタンプ(NTP同期済み) |
sta_no1 |
工場コード |
sta_no2 |
ライン番号 |
sta_no3 |
設備番号 |
t1_status |
ルール評価結果(整数値) |
6. 実装済みの価値
| 価値 | 詳細 |
|---|---|
| ノーコード設定 | ブラウザUI上でカメラ映像を見ながら円を描くだけで監視領域を設定。プログラミング不要 |
| 点滅識別 | 点灯/消灯/点滅(高速・低速)を間隔ms単位で区別。人の目では困難なパターンも自動検知 |
| 障害耐性 | MQTT/Oracle障害時はJSONLキューに蓄積し、回復後に自動再送。データロストなし |
| マルチデバイス | 親機1台+子機N台の構成で複数エリアの設備を同時監視 |
| 時刻精度 | NTPサーバー(ntp.nict.jp)との自動同期。オフセット>0.5sでsudo date補正 |
| デスクトップ統合 | Chromium --appモードでPi上にネイティブアプリライクに表示。自動起動対応 |
7. 実績データ
検出精度指標
| 指標 | 値 |
|---|---|
| 色検出フレームレート | 約10fps(time.sleep(0.1) による制御) |
| 点滅判定ウィンドウ | 2000ms(デフォルト、UI変更可) |
| 点滅最小変化回数 | 3回/ウィンドウ(設定可) |
| 有効点滅間隔 | 100ms〜1500ms(設定可) |
| 点滅間隔マッチング許容誤差 | ±30% |
現時点での設定上限
| 項目 | 値 |
|---|---|
| 円領域 | 無制限(設定ファイルに保存) |
| グループ(パトライト) | 無制限 |
| ルール | 無制限(優先度順評価) |
| 送信ログ保持 | 直近50件(メモリ) |
| MQTTキュー | JSONLファイル(ディスク容量まで) |
パイロット状況
| 対象 | 状況 |
|---|---|
| 開発・動作確認環境 | Raspberry Pi + USBカメラで動作確認済み |
| Docker / k3s環境 | Dockerfile・docker-compose実装済み |
8. Circle Detectorで描く未来(Benefit)
目指す世界
┌──────────────────────┐
│ 設備にアラーム発生 │
└──────────┬───────────┘
↓(数秒以内に自動検知)
┌──────────────────────┐
│ T1_STATUSがOracle DBに │
│ リアルタイム記録 │
└──────────┬───────────┘
↓
┌────────┐ ┌────────┐ ┌──────────┐
│ 稼働率 │ │ 傾向分析 │ │ 即時アラート│ ← すべて自動化
│ ダッシュ │ │ 予防保全 │ │ 通知 │
└────────┘ └────────┘ └──────────┘具体的に実現したいこと
多拠点一元管理
- 複数工場・複数ラインの設備状態をOracle DBに集約し、ダッシュボードで可視化
予兆検知・予防保全
- 蓄積したT1_STATUSの時系列データを分析し、異常の前兆パターンを検出
- 計画外停止の削減につなげる
9. 開発ロードマップ
Phase 1: コア実装 [DONE] Phase 2: 運用強化 [NEXT] Phase 3: 分析基盤 [FUTURE]
───────────────────────── ───────────────────────── ─────────────────────────
✓ HSV色検出エンジン □ アラート通知(Slack/メール) □ 稼働率ダッシュボード
✓ 点滅検出(間隔識別対応) □ 複数カメラ同時対応 □ 異常予兆検知(ML)
✓ 優先度ルールエンジン □ 設定のエクスポート/インポート □ 設備メンテナンス予測
✓ MQTT/Oracle DB連携 □ 検出結果のCSVエクスポート □ 多拠点統合管理UI
✓ フォールトトレラント送信 □ 遠隔設定変更(子機管理)
✓ Webブラウザ設定UI
✓ 親機/子機マルチデバイス構成
✓ NTP自動時刻同期
✓ Docker/k3s対応まとめ
- パトライトの目視監視をHSV色検出+点滅検出エンジンで完全自動化する仕組みを構築済み
- MQTT→Oracle DBパイプラインとフォールトトレラントキューにより、接続断でもデータロストなし
- その先に設備稼働データの蓄積と分析による予防保全を実現する
Circle Detector カメラが見て、データが繋ぐ。現場のパトライトをデジタルへ。
Circle Detector - パトライト状態監視システム 開発報告
ビジョン:カメラ映像からパトライトの状態を自動検知し、工場設備の稼働状況をリアルタイムでデータベースに蓄積する
実際の動作
1. 現在の課題(Problem)
製造現場のパトライト(積層信号灯)監視で日常的に発生している課題を整理しました。
1-1. 人による目視確認に依存した状態把握
パトライトの点灯・点滅状態(赤・黄・緑)の確認が担当者の巡回目視に頼っており、リアルタイムの稼働状況把握ができていない。その結果、異常発生から対応開始までのラグが生じ、ライン停止時間の長期化につながっている。
1-2. 設備状態データの未蓄積
パトライトの状態変化がデジタルデータとして記録されておらず、稼働率分析・傾向把握・トラブル原因の遡及調査が困難な状態にある。
現状の情報フロー:
├── パトライト点灯 ← 目視確認のみ
├── 担当者が気づく ← 見逃しリスクあり
├── 手動で記録(または未記録) ← データ断絶
└── → 設備状態の可視化・分析ができない1-3. 複数台設備への対応困難
設備台数が多い場合、すべてのパトライトを常時監視することは人的リソースの観点から現実的でない。
2. Circle Detectorでこう変わる(Solution)
| # | 現状(BEFORE) | 導入後(AFTER) |
|---|---|---|
| 1 | 担当者が目視でパトライトを確認 | カメラ自動検知でリアルタイム状態取得 |
| 2 | 状態データが記録されない | Oracle DBへ自動保存で稼働ログを蓄積 |
| 3 | 点滅パターンの区別が困難 | 点滅検出エンジンで点滅間隔まで識別 |
| 4 | 1台ずつ個別設定が必要 | Webブラウザ完結の直感的UI設定(今後拡張) |
導入後の構成イメージ
設備フロア
└── パトライト(積層信号灯)
├── 赤ランプ → 円領域として登録
├── 黄ランプ → 円領域として登録
└── 緑ランプ → 円領域として登録
│
↓(USBカメラで撮影)
Circle Detector (Raspberry Pi)
├── HSV色検出 → 赤/黄/緑/点滅を識別
├── ルール評価 → T1_STATUSコードに変換
└── MQTT送信 → Oracle DB INSERT各円領域はブラウザUI上でドラッグ描画するだけで設定完了。色のHSV値もカメラ映像をクリックして自動取得できる。
3. システム全体像
┌──────────────┐ ┌───────────────────┐ ┌─────────────────┐ ┌──────────────┐
│ USBカメラ │ ─→ │ 検出エンジン │ ─→ │ ルール評価エンジン │ ─→ │ MQTT Sender │
│ MJPEG映像 │ │ HSV平均算出 │ │ 優先度順マッチング │ │ 変化検知送信 │
│ 640×480 │ │ 点滅パターン検出 │ │ T1_STATUS決定 │ │ キュー補償 │
└──────────────┘ └───────────────────┘ └─────────────────┘ └──────┬───────┘
│
↓
┌──────────────────┐
│ MQTT Broker │
│ (Mosquitto) │
└────────┬─────────┘
│
↓
┌──────────────────┐
│ MQTT-Oracle Bridge│
│ → Oracle DB INSERT│
└──────────────────┘技術スタック
| レイヤー | 技術 |
|---|---|
| フロントエンド | Pure JavaScript、HTML/CSS、Serendie Design System |
| バックエンド | Python 3 / Flask、MJPEG ストリーミング |
| 画像処理 | OpenCV(HSV色空間検出、円形ROI抽出) |
| メッセージング | MQTT (paho-mqtt) / Mosquitto ブローカー |
| データベース | Oracle DB (oracledb) / Wallet認証対応 |
| インフラ | Raspberry Pi、systemd、Docker / k3s対応 |
4. 主要機能の詳細
4-1. HSV色検出(循環色相対応)
カメラ映像から円形ROI(関心領域)を切り出し、マスク内ピクセルの平均HSV値を算出して登録色とマッチングする。
入力: カメラフレーム (BGR) + 円定義 (center_x, center_y, radius)
↓
処理1: 円形マスク生成 → ROI切り出し
↓
処理2: BGR → HSV変換 → 色相H の循環平均算出(arctan2法)
↓
処理3: 登録ColorRangeとのHSVマッチング(色相は0°/180°境界を考慮)
↓
出力: 検出色名(例: "赤", "緑", None)4-2. 点滅検出エンジン(BlinkDetector)
時系列の色変化履歴から点滅パターンを自動識別する。点滅有無だけでなく、平均点滅間隔(ms)も出力するため、高速/低速点滅の区別が可能。
入力: 時刻ごとの検出色 (circle_id, color, timestamp)
↓
処理: window_ms (デフォルト2秒) 内の色変化を追跡
変化回数 >= min_changes かつ 間隔が 100ms〜1500ms
↓
出力: (is_blinking: bool, avg_interval_ms: float)4-3. 優先度ルールエンジン
複数の円検出結果を組み合わせて設備の稼働状態コード(T1_STATUS)を決定する。単一条件ルールと複合条件(AND)ルールの両方をサポート。
設定例:
ルール①(優先度100): 赤ランプ = 赤, 非点滅 → T1_STATUS = 10(異常)
ルール②(優先度 90): 赤ランプ = 赤, 点滅 → T1_STATUS = 11(警告)
ルール③(優先度 80): 緑ランプ = 緑 → T1_STATUS = 1(正常稼働)
デフォルト: → T1_STATUS = 04-4. フォールトトレラントな送信(FileQueue)
MQTT/Oracle接続断時もデータを失わないため、queue/ ディレクトリにJSONL形式でメッセージを永続化。接続回復後にバックグラウンドスレッドが自動再送する。
5. デバイス構成と連携
複数台のRaspberry Piを親機/子機として運用できる。
[複数設備エリア] [中央管理]
┌──────────────┐ ┌──────────────────────┐
│ 子機 Pi #1 │ MQTT ──→ │ 親機 Pi │
│ カメラ検出 │ │ ├── Mosquittoブローカー│
└──────────────┘ │ ├── MQTT-Oracle Bridge│
┌──────────────┐ MQTT ──→ │ └── Oracle DB 連携 │
│ 子機 Pi #2 │ └──────────────────────┘
│ カメラ検出 │
└──────────────┘- 親機:Mosquittoブローカー起動 + Oracle DBブリッジ起動 + NTP同期
- 子機:カメラ検出のみ実行、親機のブローカーにMQTT送信
- デバイスモードはWebUI初回セットアップウィザードで設定
送信データ形式(T1_STATUS)
| フィールド | 内容 |
|---|---|
mk_date |
計測タイムスタンプ(NTP同期済み) |
sta_no1 |
工場コード |
sta_no2 |
ライン番号 |
sta_no3 |
設備番号 |
t1_status |
ルール評価結果(整数値) |
6. 実装済みの価値
| 価値 | 詳細 |
|---|---|
| ノーコード設定 | ブラウザUI上でカメラ映像を見ながら円を描くだけで監視領域を設定。プログラミング不要 |
| 点滅識別 | 点灯/消灯/点滅(高速・低速)を間隔ms単位で区別。人の目では困難なパターンも自動検知 |
| 障害耐性 | MQTT/Oracle障害時はJSONLキューに蓄積し、回復後に自動再送。データロストなし |
| マルチデバイス | 親機1台+子機N台の構成で複数エリアの設備を同時監視 |
| 時刻精度 | NTPサーバー(ntp.nict.jp)との自動同期。オフセット>0.5sでsudo date補正 |
| デスクトップ統合 | Chromium --appモードでPi上にネイティブアプリライクに表示。自動起動対応 |
7. 実績データ
検出精度指標
| 指標 | 値 |
|---|---|
| 色検出フレームレート | 約10fps(time.sleep(0.1) による制御) |
| 点滅判定ウィンドウ | 2000ms(デフォルト、UI変更可) |
| 点滅最小変化回数 | 3回/ウィンドウ(設定可) |
| 有効点滅間隔 | 100ms〜1500ms(設定可) |
| 点滅間隔マッチング許容誤差 | ±30% |
現時点での設定上限
| 項目 | 値 |
|---|---|
| 円領域 | 無制限(設定ファイルに保存) |
| グループ(パトライト) | 無制限 |
| ルール | 無制限(優先度順評価) |
| 送信ログ保持 | 直近50件(メモリ) |
| MQTTキュー | JSONLファイル(ディスク容量まで) |
パイロット状況
| 対象 | 状況 |
|---|---|
| 開発・動作確認環境 | Raspberry Pi + USBカメラで動作確認済み |
| Docker / k3s環境 | Dockerfile・docker-compose実装済み |
8. Circle Detectorで描く未来(Benefit)
目指す世界
┌──────────────────────┐
│ 設備にアラーム発生 │
└──────────┬───────────┘
↓(数秒以内に自動検知)
┌──────────────────────┐
│ T1_STATUSがOracle DBに │
│ リアルタイム記録 │
└──────────┬───────────┘
↓
┌────────┐ ┌────────┐ ┌──────────┐
│ 稼働率 │ │ 傾向分析 │ │ 即時アラート│ ← すべて自動化
│ ダッシュ │ │ 予防保全 │ │ 通知 │
└────────┘ └────────┘ └──────────┘具体的に実現したいこと
多拠点一元管理
- 複数工場・複数ラインの設備状態をOracle DBに集約し、ダッシュボードで可視化
予兆検知・予防保全
- 蓄積したT1_STATUSの時系列データを分析し、異常の前兆パターンを検出
- 計画外停止の削減につなげる
9. 開発ロードマップ
Phase 1: コア実装 [DONE] Phase 2: 運用強化 [NEXT] Phase 3: 分析基盤 [FUTURE]
───────────────────────── ───────────────────────── ─────────────────────────
✓ HSV色検出エンジン □ アラート通知(Slack/メール) □ 稼働率ダッシュボード
✓ 点滅検出(間隔識別対応) □ 複数カメラ同時対応 □ 異常予兆検知(ML)
✓ 優先度ルールエンジン □ 設定のエクスポート/インポート □ 設備メンテナンス予測
✓ MQTT/Oracle DB連携 □ 検出結果のCSVエクスポート □ 多拠点統合管理UI
✓ フォールトトレラント送信 □ 遠隔設定変更(子機管理)
✓ Webブラウザ設定UI
✓ 親機/子機マルチデバイス構成
✓ NTP自動時刻同期
✓ Docker/k3s対応まとめ
- パトライトの目視監視をHSV色検出+点滅検出エンジンで完全自動化する仕組みを構築済み
- MQTT→Oracle DBパイプラインとフォールトトレラントキューにより、接続断でもデータロストなし
- その先に設備稼働データの蓄積と分析による予防保全を実現する
Circle Detector カメラが見て、データが繋ぐ。現場のパトライトをデジタルへ。