0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🎯 リアルタイムYOLO物体検知アプリを作った - チェーン検出で製造ラインも自動化できる話

0
Last updated at Posted at 2025-12-25

はじめに - データセットから本番運用まで 🚀

前回の記事で、YOLOアノテーションツールを紹介しました。あのツールで「データセット作成→訓練→モデル取得」までできるようになりましたね。

でも、訓練したモデル、どうやって使います?

「じゃあPythonスクリプト書いて...OpenCVでカメラ開いて...検出ループ書いて...UIは...」

待って。それ全部やりました。

今回紹介するのは、訓練済みYOLOモデルをリアルタイム検出に投入するための完全なるプロダクション環境です。

そして、このツールの真骨頂は**チェーン検出(Chain Detection)**機能。製造ライン、品質検査、工程管理など、「順番に物体が現れる」シーンで真価を発揮します。

🌟 このツールの位置づけ

前回のアノテーションツールと今回の検出ツールは、完璧なペアとして設計されています:

📝 アノテーションツール(前回)
    ↓ データセット作成
    ↓ モデル訓練
    ↓ best.pt生成
    ↓
🎯 検出ツール(今回)← ここ!
    ↓ リアルタイム検出
    ↓ 工程管理・品質検査
    ↓ 本番運用

両ツールは同じmodels/フォルダを共有するので、訓練したモデルをそのまま検出に使えます。シームレス過ぎて泣けてきます。

💎 基本機能 - でもこれだけじゃない

リアルタイム検出 📹

当たり前ですが、これは基本中の基本:

  • マルチタスク対応: Detection(BBox)、Segmentation(Polygon)、OBB(回転ボックス)、Pose(骨格検出)
  • 複数カメラ対応: USBカメラ、内蔵カメラ、4Kカメラまで自動検出
  • 自動色補正: カメラのフォーマット問題を自動解決(青みがかる、オレンジがかるなど)
  • FPS表示: リアルタイムパフォーマンス確認

「普通のYOLO検出アプリじゃん」って思いました?

違います。ここからが本番です。

カウンターモード 📊

検出した物体の累積カウントを取得:

  • オブジェクトが初めて検出された瞬間にカウント
  • クラスごとの個別カウント
  • リセット機能付き

ユースケース:

  • 生産ラインで製品個数を数える
  • 入退場者のカウント
  • 在庫管理

でも、これもまだ序の口です。

データセットキャプチャモード 💾

検出中の画像を自動的にYOLO形式で保存:

  • リアルタイム検出しながらデータセット構築
  • プロジェクト単位で整理
  • Detection/Segmentation/OBB全対応

これ、何が嬉しいの?

初期モデルで検出しながら、新しいシーンのデータを収集。後でアノテーションツールに戻って微調整→再訓練。

データ収集と検出が同時進行できる。

製造現場で「あれ、このパターン見たことないな」→即座にデータ化→夜間に再訓練→翌朝には改善版デプロイ。

このサイクル、回せます。

🔗 チェーン検出(Chain Detection)- 本命の機能

さあ、お待たせしました。このツールのキラー機能、チェーン検出です。

チェーン検出とは?

「物体Aが現れたら次は物体B、その次は物体C...」という順番を自動監視する機能。

例えば、こんなシーンを想像してください:

組み立てライン:

Step 1: CPU検出(必須:1個)
Step 2: メモリ検出(必須:2個)
Step 3: グラフィックカード検出(必須:1個)
Step 4: 完成品検出(必須:1個)

従来の検出システムだと、「CPUあり」「メモリあり」は分かっても、順番が正しいかは分からない

チェーン検出は、工程の順番を監視し、異常があれば即座に警告します。

実装の美しさ 🎨

ステップ構成

各ステップには以下を設定:

  • ステップ名: 「CPU取り付け」「メモリ取り付け」など
  • 必要オブジェクト: クラス名と個数(例:「cpu: 1個」「memory: 2個」)
  • タイムアウト: 各ステップの制限時間(1〜150秒)
  • 自動進行: タイムアウト時に次のステップへ自動進行するか

ビジュアルフィードバック

画面上部に進捗バーが表示され:

  • 現在のステップ番号
  • 完了したサイクル数
  • 残り時間
  • 各オブジェクトの検出状況(緑=完了、赤=未検出)

工場の作業員が、画面を見るだけで状況を把握できる。

スキップ検出 - これが神機能 ⚠️

チェーン検出の真骨頂は、スキップ検出です。

何が起こるか?

Step 2にいるのに、突然Step 4の物体が検出された。

→ 「あれ?Step 3飛ばしてない?」

画面全体に警告モーダル表示
3回の警告音が鳴る(低音のサイレン風)
作業を一時停止

⚠️ STEP SKIPPED! ⚠️

Step 3: グラフィックカード取り付け
Detected: 完成品

工程を飛ばして次のオブジェクトが検出されました!

作業員が「ACKNOWLEDGE」ボタンを押すまで、チェーンは進みません。

これにより:

  • 工程の飛ばしを100%防止
  • 不良品の混入を未然に防ぐ
  • 作業ミスの即座な発見

「あ、やば、グラボ付け忘れた!」が無くなります。

サイクル完了とポーズ ⏸️

全ステップが完了すると:

  1. サイクル完了カウントが+1
  2. 設定した秒数だけポーズ(1〜60秒)
  3. 自動的に次のサイクルへ

ポーズ中は「CYCLE PAUSE」と表示され、次のサイクル開始までのカウントダウンが表示されます。

連続生産ラインでも、休憩時間を確保できる。

チェーンの保存・読み込み 💾

設定したチェーンは保存可能:

  • チェーン名を付けて保存
  • 使用モデル名も記録
  • いつでも読み込んで再利用

「金曜日の夜に設定したチェーン、月曜日にまた使える。」

複数の製品ラインを持つ工場なら、製品ごとにチェーンを用意しておけば、切り替えは一瞬です。

🎬 実際のユースケース

1. 電子機器組み立てライン 🖥️

シナリオ:
PCを組み立てる工場。CPUソケット→メモリスロット→グラフィックカード→完成品の順で組み立て。

チェーン設定:

Step 1: "CPUソケット確認" - cpu_socket: 1
Step 2: "メモリ取り付け" - memory: 2
Step 3: "グラボ取り付け" - graphics_card: 1
Step 4: "完成品検査" - complete_pc: 1

効果:

  • 組み立て順序の自動監視
  • メモリ枚数の自動確認(2枚必須)
  • グラボ忘れの防止
  • 不良品ゼロ

2. 食品パッケージング 🍱

シナリオ:
弁当の盛り付けライン。ご飯→主菜→副菜→フタの順。

チェーン設定:

Step 1: "ご飯" - rice: 1
Step 2: "主菜" - main_dish: 1
Step 3: "副菜" - side_dish: 2
Step 4: "フタ" - lid: 1

効果:

  • 盛り付け忘れの防止
  • 副菜数の確認(2品必須)
  • フタ忘れ検出
  • 衛生管理

3. 医薬品パッケージング 💊

シナリオ:
医薬品の箱詰め。錠剤→説明書→シール→箱の順。

チェーン設定:

Step 1: "錠剤シート" - pill_sheet: 1
Step 2: "説明書" - instruction: 1
Step 3: "品質シール" - seal: 1
Step 4: "外箱閉じ" - closed_box: 1

効果:

  • 説明書入れ忘れ防止(法的要件)
  • 品質シール貼付確認
  • トレーサビリティ
  • コンプライアンス遵守

4. 自動車部品検査 🚗

シナリオ:
エンジン部品の目視検査。表面検査→穴位置確認→刻印確認→合格品。

チェーン設定:

Step 1: "表面状態" - surface_ok: 1
Step 2: "穴位置" - hole_position_ok: 1
Step 3: "刻印" - marking_ok: 1
Step 4: "合格" - passed: 1

効果:

  • 検査工程の標準化
  • 検査漏れ防止
  • 品質保証
  • 記録の自動化

🛠️ 技術的な工夫

カメラ管理の賢さ 📷

このツール、カメラに異様に優しいです:

自動検出:

  • 接続されている全カメラを自動検出
  • カメラ名も取得(Windows環境)
  • 解像度とFPSを自動取得

色補正:

  • 4K/HD判定で最適なフォーマット選択
  • 青みがかる問題を自動修正(YUV変換)
  • オレンジがかる問題も自動修正(RGB変換)
  • 「色がおかしい!」がほぼ無くなります

設定保存:

  • カメラの明るさ、コントラスト、露出設定を保持
  • 再接続時も設定を維持

Webカメラ、あるある問題、全部解決しました。

マルチタスク対応の設計 🎯

一つのツールで全てのYOLOタスクに対応:

Detection(標準バウンディングボックス):

bbox = [x1, y1, x2, y2]
confidence = 0.95
class_name = "cpu"

Segmentation(ポリゴン):

polygon = [[x1, y1], [x2, y2], [x3, y3], ...]
mask_applied = True

OBB(回転ボックス):

corners = [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]
rotation_angle = auto_calculated

Pose(骨格検出):

keypoints = [[nose_x, nose_y], [left_eye_x, left_eye_y], ...]
skeleton_connections = COCO_FORMAT
body_part_colors = {
    'head': (0, 255, 255),
    'torso': (0, 165, 255),
    'left_arm': (255, 0, 0),
    ...
}

モデルを読み込むだけで、タスクタイプを自動判定。ユーザーは何もする必要なし。

リアルタイム処理の最適化 ⚡

フレームバッファ管理:

  • バッファサイズを最小化(デフォルト:1)
  • 最新フレームのみ処理
  • 遅延を最小限に

スレッド分離:

  • カメラキャプチャスレッド
  • 検出処理スレッド
  • UIストリーミングスレッド

全て独立して動作するので、どれかが重くても他に影響しません。

FPS制限:

  • デフォルト30FPS
  • CPU負荷を調整可能
  • GPUなしでも快適動作

🎮 UI/UXへのこだわり

ダークモード専用 🌙

明るい画面、工場では眩しすぎません?

このツールは完全ダークモード専用。長時間の監視作業でも目が疲れません。

折りたたみパネル 📂

すべてのパネルがクリックで展開・折りたたみ可能。

使わない機能は隠す → 画面スッキリ → 作業効率アップ

キーボードショートカット ⌨️

  • Ctrl + Space: 検出開始/停止
  • Ctrl + R: カウンター/チェーンリセット

マウスに手を伸ばさなくても操作できます。

リアルタイムステータス 🚦

ヘッダーに3つのステータスインジケーター:

  • 🔴/🟢 Camera: カメラ接続状態
  • 🔴/🟢 Model: モデル読み込み状態
  • 🔴/🟢 Detection: 検出動作状態

一目で状態を把握できる。

📊 設定の柔軟性

検出パラメータ

  • Confidence閾値: 0.0〜1.0(スライダー)
  • IoU閾値: NMS用(スライダー)
  • 最大検出数: 1〜1000個
  • 画像サイズ: 640×480 〜 3840×2160(4K)

すべてリアルタイム調整可能。

「ちょっと検出が厳しすぎるな」→スライダー動かす→即座に反映。

再起動不要。コード変更不要。

クラスフィルタリング

モデルに100クラスあっても、使うのは3クラスだけ?

クラスごとにチェックボックスで選択できます。

さらに、各クラスの最大検出数も設定可能:

  • cpu: 1個まで
  • memory: 2個まで
  • usb_port: 制限なし(0 = unlimited)

検出したいものだけ、検出する。

🔄 アノテーションツールとの連携

完璧なワークフロー

1. 📝 アノテーションツールで初期データ作成(50〜100枚)
   ↓
2. 🤖 初期モデル訓練(best.pt生成)
   ↓
3. 📁 同じmodels/フォルダに配置
   ↓
4. 🎯 検出ツールで読み込み
   ↓
5. 📹 リアルタイム検出開始
   ↓
6. 💾 データセットキャプチャモードON
   ↓
7. 🔄 新しいシーンのデータを自動収集
   ↓
8. 📝 アノテーションツールに戻って確認・修正
   ↓
9. 🤖 再訓練して精度向上
   ↓
10. 🎯 検出ツールで改善版モデルを使用

このループを回し続けることで、モデルが現場に最適化されていきます。

models/フォルダ共有の威力

両ツールが同じmodels/フォルダを参照:

models/
├── yolov8n.pt              # 汎用モデル
├── yolov11n-seg.pt         # セグメンテーション
├── factory_line_v1.pt      # 自社訓練モデル v1
├── factory_line_v2.pt      # 改善版 v2
└── factory_line_best.pt    # 最新ベスト

アノテーションツールで訓練 → 検出ツールで即使用。

ファイルコピー不要。パス設定不要。ただ、そこにある。

🚀 実際の導入プロセス

ステップ1: 環境構築(5分)

git clone https://github.com/Rikiza89/Labeling_for_YOLO
cd Labeling_for_YOLO
pip install flask opencv-python ultralytics numpy werkzeug psutil
python app_enhanced_segment.py

ブラウザでhttp://127.0.0.1:5001にアクセス。

ステップ2: カメラ接続(1分)

  1. Camera Controlパネル展開
  2. カメラ選択
  3. 「Connect Camera」クリック

緑ランプ点灯 → 成功。

ステップ3: モデル読み込み(30秒)

  1. Model Controlパネル展開
  2. 訓練済みモデル選択(例:factory_line_best.pt
  3. 「Load Model」クリック

クラスリストが自動的に表示されます。

ステップ4: チェーン設定(製造ライン用)

  1. Chain Detectionパネル展開
  2. 「+ Add Step」で各工程を追加
  3. 各ステップで必要オブジェクトを選択
  4. タイムアウトとポーズ時間を設定
  5. 「Save Chain」で保存

ステップ5: 運用開始

「▶ Start」ボタン → チェーン検出開始。

それだけ。

💡 実運用のヒント

1. 照明を安定させる

検出精度は照明に大きく依存します。

  • 工場の窓からの自然光 → NGです
  • LED照明 → 推奨
  • 定常光源 → 必須

2. カメラ位置を固定

カメラが動くと、背景が変わって誤検出の原因に。

  • 三脚やアームで固定
  • 高さと角度を最適化
  • 定期的に位置確認

3. 定期的なモデル更新

現場は変わります。新しい製品、新しい工程、新しい問題。

月1回、データ収集 → 再訓練 → デプロイのサイクルを推奨。

4. バックアップ体制

カメラやPCの故障に備えて:

  • 予備カメラを用意
  • モデルファイルをクラウドバックアップ
  • チェーン設定をエクスポート

5. 作業員トレーニング

AI検出システムを導入しても、最終判断は人間。

  • スキップ警告時の対応手順
  • 誤検出時の対処法
  • カウンターリセットのタイミング

🎯 このツールが向いているシーン

✅ 向いている

  • 製造ライン: 順序が重要な組み立て工程
  • 品質検査: 多段階の検査プロセス
  • パッケージング: 複数アイテムの封入確認
  • プロトタイプ検証: モデルの実地テスト
  • 教育・デモ: YOLOの実演
  • 小規模生産: 人手不足の補完

❌ 向いていない

  • 超高速ライン: 1秒間に数十個流れるライン(ハードウェア検出器の領域)
  • 超高精度要求: 医療画像診断など(専用システムを推奨)
  • 屋外環境: 照明が不安定すぎる
  • 移動物体追跡: このツールはステーショナリー向け

🤔 よくある質問

Q: GPUは必要ですか?

A: いいえ、必要ありません。

YOLOv8n/YOLOv11nなら、CPUだけで十分リアルタイム検出可能です。ただし、より大きなモデル(medium/large)や高解像度(4K)を使う場合はGPU推奨。

Q: 複数の製造ラインで使えますか?

A: はい。

チェーンを製品ごとに保存できるので、製品切り替え時にチェーンを読み込むだけ。数秒で切り替え完了。

Q: 誤検出が多い場合は?

A: 以下を試してください:

  1. Confidence閾値を上げる(0.6 → 0.8など)
  2. データセットキャプチャで現場データを収集
  3. アノテーションツールで追加訓練
  4. 照明環境を改善

Q: カメラが認識されません

A: 以下を確認:

  1. USBポートを変える
  2. カメラドライバを更新
  3. 他のアプリがカメラを使用していないか確認
  4. 別のカメラで試す

Q: チェーン検出、途中で止まります

A: タイムアウト設定を確認:

  • 工程が複雑なら、タイムアウトを長く(30〜60秒)
  • 「Auto-advance on timeout」をONにすると、自動で次へ

Q: アノテーションツールと同時に使えますか?

A: はい、できます。

ただし、同じカメラを両方で使うことはできません。訓練は片方で、検出はもう片方で、という使い分けが可能。

📈 パフォーマンス実測値(参考)

実際の環境での動作例(公式な性能保証ではありません):

CPU環境(Intel Core i5-10400, RAM 16GB):

  • YOLOv8n: 25〜30 FPS @ 1280×960
  • YOLOv11n: 20〜25 FPS @ 1280×960
  • 検出遅延: 約30〜40ms

GPU環境(NVIDIA GTX 1660, 6GB VRAM):

  • YOLOv8s: 60+ FPS @ 1920×1080
  • YOLOv11s: 50+ FPS @ 1920×1080
  • 検出遅延: 約15〜20ms

実用上の快適性:

  • 15 FPS以上: 十分快適
  • 20 FPS以上: 非常にスムーズ
  • 30 FPS以上: 完璧

🎬 まとめ:YOLOを本番に投入する

このツールは、「訓練したモデル、どう使う?」という問いに対する一つの答えです。

特徴:

  • リアルタイム検出(Detection/Segmentation/OBB/Pose)
  • チェーン検出で工程管理
  • スキップ検出で品質保証
  • データセット収集で継続改善
  • アノテーションツールとの完璧な連携

対象:

  • 製造業の現場
  • 品質管理部門
  • 研究開発チーム
  • 教育機関
  • 個人の実験プロジェクト

哲学:

「AIは訓練して終わりじゃない。現場で使って、改善して、また訓練する。そのサイクルを回し続けることで、本当に使えるAIになる。」

前回のアノテーションツールで、データセットを作りました。

今回の検出ツールで、それを現場に投入します。

そしてまた、アノテーションツールに戻って改善します。

このループを回すことで、あなたのYOLOモデルは、世界で唯一の、あなたの現場に最適化されたモデルになります。


リンク:

次回予告:
Raspberry Pi版の開発進行中!エッジデバイスでのリアルタイム検出、お楽しみに。


謝辞:

このツールを作るにあたって、何度も「これ、本当に必要か?」と自問しました。

答えは、「必要だった」です。

工場の現場で、品質管理で、研究室で、YOLOを使いたい人たちがいる。でも、「モデルは作れたけど、どう動かすの?」で止まってしまう。

そんな人たちの、次の一歩を後押しできれば。

Happy Detecting! 🎯✨


この記事は2025年12月25日時点の情報に基づいています。最新の情報は、GitHubリポジトリをご確認ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?