メインコンテンツへスキップ
三田工場 技術サイト
undefined icon

パトライト色検知システム

収集LV.2

Circle Detector - パトライト状態監視システム 開発報告

ビジョン:カメラ映像からパトライトの状態を自動検知し、工場設備の稼働状況をリアルタイムでデータベースに蓄積する


実際の動作


1. 現在の課題(Problem)

製造現場のパトライト(積層信号灯)監視で日常的に発生している課題を整理しました。

1-1. 人による目視確認に依存した状態把握

パトライトの点灯・点滅状態(赤・黄・緑)の確認が担当者の巡回目視に頼っており、リアルタイムの稼働状況把握ができていない。その結果、異常発生から対応開始までのラグが生じ、ライン停止時間の長期化につながっている。

1-2. 設備状態データの未蓄積

パトライトの状態変化がデジタルデータとして記録されておらず、稼働率分析・傾向把握・トラブル原因の遡及調査が困難な状態にある。

text
現状の情報フロー:
├── パトライト点灯       ← 目視確認のみ
├── 担当者が気づく       ← 見逃しリスクあり
├── 手動で記録(または未記録) ← データ断絶
└── → 設備状態の可視化・分析ができない

1-3. 複数台設備への対応困難

設備台数が多い場合、すべてのパトライトを常時監視することは人的リソースの観点から現実的でない。


2. Circle Detectorでこう変わる(Solution)

# 現状(BEFORE) 導入後(AFTER)
1 担当者が目視でパトライトを確認 カメラ自動検知でリアルタイム状態取得
2 状態データが記録されない Oracle DBへ自動保存で稼働ログを蓄積
3 点滅パターンの区別が困難 点滅検出エンジンで点滅間隔まで識別
4 1台ずつ個別設定が必要 Webブラウザ完結の直感的UI設定(今後拡張)

導入後の構成イメージ

text
設備フロア
└── パトライト(積層信号灯)
    ├── 赤ランプ   → 円領域として登録
    ├── 黄ランプ   → 円領域として登録
    └── 緑ランプ   → 円領域として登録

        ↓(USBカメラで撮影)
    Circle Detector (Raspberry Pi)
    ├── HSV色検出 → 赤/黄/緑/点滅を識別
    ├── ルール評価 → T1_STATUSコードに変換
    └── MQTT送信 → Oracle DB INSERT

各円領域はブラウザUI上でドラッグ描画するだけで設定完了。色のHSV値もカメラ映像をクリックして自動取得できる。


3. システム全体像

text
┌──────────────┐    ┌───────────────────┐    ┌─────────────────┐    ┌──────────────┐
│ 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値を算出して登録色とマッチングする。

text
入力: カメラフレーム (BGR) + 円定義 (center_x, center_y, radius)

処理1: 円形マスク生成 → ROI切り出し

処理2: BGR → HSV変換 → 色相H の循環平均算出(arctan2法)

処理3: 登録ColorRangeとのHSVマッチング(色相は0°/180°境界を考慮)

出力: 検出色名(例: "赤", "緑", None)

4-2. 点滅検出エンジン(BlinkDetector)

時系列の色変化履歴から点滅パターンを自動識別する。点滅有無だけでなく、平均点滅間隔(ms)も出力するため、高速/低速点滅の区別が可能。

text
入力: 時刻ごとの検出色 (circle_id, color, timestamp)

処理: window_ms (デフォルト2秒) 内の色変化を追跡
      変化回数 >= min_changes かつ 間隔が 100ms〜1500ms

出力: (is_blinking: bool, avg_interval_ms: float)

4-3. 優先度ルールエンジン

複数の円検出結果を組み合わせて設備の稼働状態コード(T1_STATUS)を決定する。単一条件ルールと複合条件(AND)ルールの両方をサポート。

text
設定例:
  ルール①(優先度100): 赤ランプ = 赤, 非点滅 → T1_STATUS = 10(異常)
  ルール②(優先度 90): 赤ランプ = 赤, 点滅    → T1_STATUS = 11(警告)
  ルール③(優先度 80): 緑ランプ = 緑          → T1_STATUS =  1(正常稼働)
  デフォルト:                                  → T1_STATUS =  0

4-4. フォールトトレラントな送信(FileQueue)

MQTT/Oracle接続断時もデータを失わないため、queue/ ディレクトリにJSONL形式でメッセージを永続化。接続回復後にバックグラウンドスレッドが自動再送する。


5. デバイス構成と連携

複数台のRaspberry Piを親機/子機として運用できる。

text
[複数設備エリア]                    [中央管理]
┌──────────────┐                  ┌──────────────────────┐
│ 子機 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)

目指す世界

text
┌──────────────────────┐
  │ 設備にアラーム発生     │
  └──────────┬───────────┘
             ↓(数秒以内に自動検知)
  ┌──────────────────────┐
  │ T1_STATUSがOracle DBに │
  │ リアルタイム記録        │
  └──────────┬───────────┘

  ┌────────┐ ┌────────┐ ┌──────────┐
  │ 稼働率  │ │ 傾向分析 │ │ 即時アラート│  ← すべて自動化
  │ ダッシュ │ │ 予防保全 │ │ 通知       │
  └────────┘ └────────┘ └──────────┘

具体的に実現したいこと

多拠点一元管理

  • 複数工場・複数ラインの設備状態をOracle DBに集約し、ダッシュボードで可視化

予兆検知・予防保全

  • 蓄積したT1_STATUSの時系列データを分析し、異常の前兆パターンを検出
  • 計画外停止の削減につなげる

9. 開発ロードマップ

text
Phase 1: コア実装 [DONE]            Phase 2: 運用強化 [NEXT]            Phase 3: 分析基盤 [FUTURE]
─────────────────────────          ─────────────────────────          ─────────────────────────
✓ HSV色検出エンジン                 □ アラート通知(Slack/メール)       □ 稼働率ダッシュボード
✓ 点滅検出(間隔識別対応)           □ 複数カメラ同時対応               □ 異常予兆検知(ML)
✓ 優先度ルールエンジン               □ 設定のエクスポート/インポート     □ 設備メンテナンス予測
✓ MQTT/Oracle DB連携               □ 検出結果のCSVエクスポート        □ 多拠点統合管理UI
✓ フォールトトレラント送信            □ 遠隔設定変更(子機管理)
✓ Webブラウザ設定UI
✓ 親機/子機マルチデバイス構成
✓ NTP自動時刻同期
✓ Docker/k3s対応

まとめ

  1. パトライトの目視監視をHSV色検出+点滅検出エンジンで完全自動化する仕組みを構築済み
  2. MQTT→Oracle DBパイプラインとフォールトトレラントキューにより、接続断でもデータロストなし
  3. その先に設備稼働データの蓄積と分析による予防保全を実現する

Circle Detector カメラが見て、データが繋ぐ。現場のパトライトをデジタルへ。

Circle Detector - パトライト状態監視システム 開発報告

ビジョン:カメラ映像からパトライトの状態を自動検知し、工場設備の稼働状況をリアルタイムでデータベースに蓄積する


実際の動作


1. 現在の課題(Problem)

製造現場のパトライト(積層信号灯)監視で日常的に発生している課題を整理しました。

1-1. 人による目視確認に依存した状態把握

パトライトの点灯・点滅状態(赤・黄・緑)の確認が担当者の巡回目視に頼っており、リアルタイムの稼働状況把握ができていない。その結果、異常発生から対応開始までのラグが生じ、ライン停止時間の長期化につながっている。

1-2. 設備状態データの未蓄積

パトライトの状態変化がデジタルデータとして記録されておらず、稼働率分析・傾向把握・トラブル原因の遡及調査が困難な状態にある。

text
現状の情報フロー:
├── パトライト点灯       ← 目視確認のみ
├── 担当者が気づく       ← 見逃しリスクあり
├── 手動で記録(または未記録) ← データ断絶
└── → 設備状態の可視化・分析ができない

1-3. 複数台設備への対応困難

設備台数が多い場合、すべてのパトライトを常時監視することは人的リソースの観点から現実的でない。


2. Circle Detectorでこう変わる(Solution)

# 現状(BEFORE) 導入後(AFTER)
1 担当者が目視でパトライトを確認 カメラ自動検知でリアルタイム状態取得
2 状態データが記録されない Oracle DBへ自動保存で稼働ログを蓄積
3 点滅パターンの区別が困難 点滅検出エンジンで点滅間隔まで識別
4 1台ずつ個別設定が必要 Webブラウザ完結の直感的UI設定(今後拡張)

導入後の構成イメージ

text
設備フロア
└── パトライト(積層信号灯)
    ├── 赤ランプ   → 円領域として登録
    ├── 黄ランプ   → 円領域として登録
    └── 緑ランプ   → 円領域として登録

        ↓(USBカメラで撮影)
    Circle Detector (Raspberry Pi)
    ├── HSV色検出 → 赤/黄/緑/点滅を識別
    ├── ルール評価 → T1_STATUSコードに変換
    └── MQTT送信 → Oracle DB INSERT

各円領域はブラウザUI上でドラッグ描画するだけで設定完了。色のHSV値もカメラ映像をクリックして自動取得できる。


3. システム全体像

text
┌──────────────┐    ┌───────────────────┐    ┌─────────────────┐    ┌──────────────┐
│ 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値を算出して登録色とマッチングする。

text
入力: カメラフレーム (BGR) + 円定義 (center_x, center_y, radius)

処理1: 円形マスク生成 → ROI切り出し

処理2: BGR → HSV変換 → 色相H の循環平均算出(arctan2法)

処理3: 登録ColorRangeとのHSVマッチング(色相は0°/180°境界を考慮)

出力: 検出色名(例: "赤", "緑", None)

4-2. 点滅検出エンジン(BlinkDetector)

時系列の色変化履歴から点滅パターンを自動識別する。点滅有無だけでなく、平均点滅間隔(ms)も出力するため、高速/低速点滅の区別が可能。

text
入力: 時刻ごとの検出色 (circle_id, color, timestamp)

処理: window_ms (デフォルト2秒) 内の色変化を追跡
      変化回数 >= min_changes かつ 間隔が 100ms〜1500ms

出力: (is_blinking: bool, avg_interval_ms: float)

4-3. 優先度ルールエンジン

複数の円検出結果を組み合わせて設備の稼働状態コード(T1_STATUS)を決定する。単一条件ルールと複合条件(AND)ルールの両方をサポート。

text
設定例:
  ルール①(優先度100): 赤ランプ = 赤, 非点滅 → T1_STATUS = 10(異常)
  ルール②(優先度 90): 赤ランプ = 赤, 点滅    → T1_STATUS = 11(警告)
  ルール③(優先度 80): 緑ランプ = 緑          → T1_STATUS =  1(正常稼働)
  デフォルト:                                  → T1_STATUS =  0

4-4. フォールトトレラントな送信(FileQueue)

MQTT/Oracle接続断時もデータを失わないため、queue/ ディレクトリにJSONL形式でメッセージを永続化。接続回復後にバックグラウンドスレッドが自動再送する。


5. デバイス構成と連携

複数台のRaspberry Piを親機/子機として運用できる。

text
[複数設備エリア]                    [中央管理]
┌──────────────┐                  ┌──────────────────────┐
│ 子機 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)

目指す世界

text
┌──────────────────────┐
  │ 設備にアラーム発生     │
  └──────────┬───────────┘
             ↓(数秒以内に自動検知)
  ┌──────────────────────┐
  │ T1_STATUSがOracle DBに │
  │ リアルタイム記録        │
  └──────────┬───────────┘

  ┌────────┐ ┌────────┐ ┌──────────┐
  │ 稼働率  │ │ 傾向分析 │ │ 即時アラート│  ← すべて自動化
  │ ダッシュ │ │ 予防保全 │ │ 通知       │
  └────────┘ └────────┘ └──────────┘

具体的に実現したいこと

多拠点一元管理

  • 複数工場・複数ラインの設備状態をOracle DBに集約し、ダッシュボードで可視化

予兆検知・予防保全

  • 蓄積したT1_STATUSの時系列データを分析し、異常の前兆パターンを検出
  • 計画外停止の削減につなげる

9. 開発ロードマップ

text
Phase 1: コア実装 [DONE]            Phase 2: 運用強化 [NEXT]            Phase 3: 分析基盤 [FUTURE]
─────────────────────────          ─────────────────────────          ─────────────────────────
✓ HSV色検出エンジン                 □ アラート通知(Slack/メール)       □ 稼働率ダッシュボード
✓ 点滅検出(間隔識別対応)           □ 複数カメラ同時対応               □ 異常予兆検知(ML)
✓ 優先度ルールエンジン               □ 設定のエクスポート/インポート     □ 設備メンテナンス予測
✓ MQTT/Oracle DB連携               □ 検出結果のCSVエクスポート        □ 多拠点統合管理UI
✓ フォールトトレラント送信            □ 遠隔設定変更(子機管理)
✓ Webブラウザ設定UI
✓ 親機/子機マルチデバイス構成
✓ NTP自動時刻同期
✓ Docker/k3s対応

まとめ

  1. パトライトの目視監視をHSV色検出+点滅検出エンジンで完全自動化する仕組みを構築済み
  2. MQTT→Oracle DBパイプラインとフォールトトレラントキューにより、接続断でもデータロストなし
  3. その先に設備稼働データの蓄積と分析による予防保全を実現する

Circle Detector カメラが見て、データが繋ぐ。現場のパトライトをデジタルへ。