Skip to content

component edge ai detection

JJong-03 edited this page Jun 17, 2026 · 2 revisions

Edge AI 탐지 (Factory A)

기준일: 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

핵심 판단은 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에서 운영 가능한 크기·속도를 제공한다.

음향: YAMNet

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).

K3s 배치

항목 기준
평시 배치 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 B/C와의 차이

구분 Factory A Factory B/C
AI 입력 실제 카메라·마이크 추론(YOLOv8n·YAMNet) dummy generator가 fire/fall/bend·acoustic 값을 synthetic 합성
해석 실제 현장 상태에 가까운 운영 데이터 rule·UI·파이프라인 검증용 테스트 데이터

관련 문서

Aegis-Pi Wiki

· 대표 문서 목록은 홈의 문서 탐색 표 참조

시작하기

요구사항

핵심 개념

아키텍처

컴포넌트 (Edge → Cloud → Dashboard)

Dashboard & 운영

시나리오 · 사례 · 참조

Clone this wiki locally