-
Notifications
You must be signed in to change notification settings - Fork 0
component edge ai detection
기준일: 2026-06-09
위치: Factory A Raspberry Pi K3s worker 노드
근거: docs/changes/0024-yolov8n-…, docs/ops/33_factory_a_ai_latency_measurement.md, apps/factory-a-log-adapter
Factory A는 클라우드 없이 현장에서 직접 AI 추론을 수행하는 Safe-Edge 워크로드를 운영한다.
영상(YOLOv8n)과 음향(YAMNet)을 함께 사용하는 멀티모달 구성으로 화재·연기·작업자 자세 이상·
이상 음향을 탐지하고, 그 결과를 factory_state의 AI 입력으로 흘려 Safety Score
계산의 재료로 쓴다. Factory B/C는 이 값을 dummy generator가 합성한다(실제 추론 아님).
| 모달 | 모델 | 입력 | 탐지 대상 | 출력 |
|---|---|---|---|---|
| 비전 | YOLOv8n (Ultralytics) | Raspberry Pi Camera (/dev/video0) |
🔥 화재/연기, 🧍 낙상/굽힘 | bounding box · class · confidence |
| 음향 | YAMNet (TensorFlow Hub) | USB 마이크 (/dev/snd) |
💥 폭발음·이상 음향 | 521개 오디오 클래스 중 Top-K |
두 신호가 동시에 감지될 때만 높은 신뢰도로 판단해, 단순한 밝은 빛이나 큰 소리로 인한 오탐(False Positive)을 줄인다.
📷 카메라 입력 🎤 마이크 입력
│ │
[YOLOv8n] [YAMNet]
화재/자세 감지 폭발음/이상음 분류
└───────────┬───────────┘
▼
이벤트 판단 로직
(단독 감지 → 낮은 신뢰도 / 복합 감지 → 높은 신뢰도)
핵심 판단은 YOLOv8n 계열 모델로 수행하고, OpenCV는 영상 입출력·전처리에만 쓴다(Edge AI: YOLOv8n).
fire.pt → FIRE/SMOKE object detection (class·confidence·bounding box)
pose.pt → person pose/keypoint 기반 FALLEN/BENDING 판단
OpenCV → frame color conversion(cv2.cvtColor), event snapshot 저장(cv2.imwrite)
낙상/굽힘은 pose.pt 결과의 bounding box 비율과 어깨-엉덩이 keypoint 각도로 설명 가능하게
판단한다. yolov8n은 nano 모델이라 Raspberry Pi CPU에서 운영 가능한 크기·속도를 제공한다.
USB 마이크 입력을 YAMNet으로 분류해 521개 오디오 클래스 중 Top-K를 얻고, 폭발음·이상 음향
여부를 판정한다. 결과는 acoustic_detection(is_danger) 형태로 기록된다.
약 1초 주기의 추론 루프로 동작한다.
capture → cvtColor → fire_model(imgsz=320) → pose_model(imgsz=320)
→ event 판단 → (이벤트 시) snapshot 저장 → InfluxDB write → sleep(1)
2026-06-08 운영 Pod benchmark 기준:
| 항목 | 값 |
|---|---|
| fire 추론 (median) | 96.3ms |
| pose 추론 (median) | 102.0ms |
| two-model 추론 합계 (median) | 약 198ms |
| active loop 평균 | 약 228ms |
| 전체 loop 주기 (sleep 포함) | 평균 약 1.228s, p95 약 1.261s |
두 YOLO 모델 합계가 약 198ms로 현재 MVP의 1초대 감시 주기에 충분히 들어온다. active loop 측정은 최근 loop에 이벤트가 없는 상태였으므로 snapshot write latency는 포함되지 않은 기준이다. 상세 기준은 Factory-A AI 지연시간을 따른다.
AI 추론 결과
→ InfluxDB ai_detection(fire/fall/bend 0/1) · acoustic_detection(is_danger)
→ factory-a-log-adapter (canonical JSON 변환)
→ factory_state.ai_result
→ Edge IoT Publisher → AWS IoT Core
→ DataProcessor → Safety Score(fire_score/fall_score/bend_score)
탐지 결과값(0/1)은 InfluxDB에 상시 기록되고, 이벤트가 발생한 경우에만 원본 스냅샷 이미지를
남긴다. 스냅샷 원본은 IoT Core를 통과하지 않고 presigned URL로 S3 image_snapshot/에 직접
업로드되며 MQTT에는 metadata만 태운다(Image Snapshot Pipeline).
| 항목 | 기준 |
|---|---|
| 평시 배치 | worker 노드(danger zone)에 nodeAffinity preferred로 배치 |
| 디바이스 접근 | 카메라(/dev/video0)·마이크(/dev/snd)를 hostPath로 마운트, 디바이스 접근용 권한 필요 |
| 장애 시 | 노드 NotReady 시 toleration 기반 eviction 후 대체 worker로 재스케줄링 |
대표 아키텍처의 Factory A K3s 영역에서 worker 노드의
AI (pose/fire & Sound)와 BME280·InfluxDB 구성으로 확인된다. 실제 failover 타임라인은
Failover & 복구를 따른다.
| 구분 | Factory A | Factory B/C |
|---|---|---|
| AI 입력 | 실제 카메라·마이크 추론(YOLOv8n·YAMNet) | dummy generator가 fire/fall/bend·acoustic 값을 synthetic 합성 |
| 해석 | 실제 현장 상태에 가까운 운영 데이터 | rule·UI·파이프라인 검증용 테스트 데이터 |
- 시스템 아키텍처
- 제어 & 데이터 플레인
- Dashboard VPC 설계
- 하드웨어 배치
- Hub EKS 네임스페이스
- Tailscale Mesh VPN
- 데이터 생명주기
- 데이터 조회 모델
- 실시간 갱신 구조
- IoT 데이터 계약
- Reporting Pipeline
- 로컬 스토리지
- 클라우드 스토리지
- Edge Agent
- Edge AI 탐지
- Factory-A Log Adapter
- Dummy Sensor
- Edge IoT Publisher
- Lambda Data Processor
- Risk Normalizer
- Risk Score Engine
- Pipeline Status Aggregator
- Graph Aggregator 5m
- Cloud Infra Collector
- Daily Report Generator
- Risk Alert Dispatcher
- Image Snapshot Pipeline
- Dashboard Backend
- Dashboard Web
- AI 채팅 어시스턴트