Skip to content

Vineyard Wildlife Realtime Camera MVP

ehdwo0427 edited this page May 8, 2026 · 3 revisions

카메라 실시간 검출 MVP — picamera2 + ncnn FP16

이 문서를 보는 이유

학습이 잘 되고 백엔드 비교까지 끝나도, 실제 카메라 + 추론 + 텍스트 출력 파이프라인 까지 묶지 않으면 의미가 없습니다.

이 문서는:

  • picamera2로 실시간 캡처 → ncnn FP16 추론 → 박스 영상 + 검출 텍스트 로그까지 묶은 MVP의 산출물
  • 라이브 환경에서 측정한 FPS와 false positive 패턴
  • 데모 전 보완 카드

를 정리합니다. 학습 시점 mAP가 좋아도 현장에선 어떤 식으로 어긋날 수 있는지 가장 잘 보여주는 트랙입니다.

산출물

realtime_camera_detection.py

picamera2 실시간 캡처 + ncnn FP16 multi-class YOLO 추론 + bbox 그려진 MP4 + 검출 텍스트 로그 + JSON 통계.

CLI 인자

인자 기본값 의미
--model multiclass 320 ncnn FP16 디렉토리 모델 경로 (ncnn 디렉토리 또는 .pt)
--imgsz 320 추론 해상도
--conf 0.5 신뢰도 임계값
--iou 0.45 NMS IoU 임계값
--width / --height 640 / 480 카메라 캡처 해상도
--duration 20.0 캡처 시간 (초)
--fps-cap 15.0 처리 FPS 상한 (CPU 보호)
--out-dir / --prefix outputs/captures, rtdetect 출력 위치/이름

산출물 3종

파일 내용
<prefix>_<ts>.mp4 bbox + 라벨 + 프레임 메타 오버레이된 영상
<prefix>_<ts>.detections.log TSV (frame t_sec class conf x1 y1 x2 y2)
<prefix>_<ts>.json 전체 통계 (achieved_fps, inference_ms p95/mean, class_hits)

실시간 콘솔 출력

검출이 발생할 때마다:

[DETECT f12 t= 1.05s] roe_deer   conf=0.823 bbox=[145,80,512,440]

TSV 로그도 같은 정보를 머신 파싱 가능한 포맷으로 남깁니다:

# frame  t_sec  class  conf  x1  y1  x2  y2
12       1.05   roe_deer  0.823  145  80   512  440

라이브 테스트 측정

정적 이미지 sanity (test split의 IR 너구리 이미지)

  • 검출: raccoon conf=0.945
  • 박스 위치 정확
  • annotation 파이프라인 정상 확인

Live Test — 1st (ceiling) vs 2nd (fan in view)

라이브 1차 — 서버실 천장 (단색 벽)

항목
캡처 시간 15초
처리 프레임 133
달성 FPS 8.81
추론 mean / p95 100.8 / 103.7 ms
검출 0건 (예상 — 단색 벽)

라이브 2차 — 각도 변경, 서버실 안 선풍기 비춤

항목
캡처 시간 15초
처리 프레임 116
달성 FPS 7.73 (1차보다 낮음 — 매 프레임 annotation 비용)
추론 mean / p95 115.3 / 129.8 ms
검출 111건 (96% 프레임에서)
검출 클래스 bird 100% — false positive
Bbox [407, 263, 550, 451] 일관 (선풍기 머리 위치)
Conf 분포 0.50 ~ 0.69

실제 화면 비교 (1차 vs 2차)

Live 1st (ceiling, no detection) vs 2nd (fan misclassified as bird)

좌측: 1차 — 단색 천장이라 검출 0건 (의도한 sanity). 우측: 2차 — 선풍기 헤드를 bird 0.50으로 오인. 검출 박스가 모든 프레임에서 거의 같은 좌표에 일관되게 그려짐 (단순 1프레임 노이즈가 아니라 패턴화된 false positive).

핵심 발견 — bird 클래스 실내 false positive

흰색·은색 둥근 물체(선풍기 헤드)를 새로 잘못 인식.

왜 이런 일이 났는가

요인 설명
학습 데이터 분포 야외 / IR 카메라트랩 위주
실내 분포 학습 분포에 거의 없음
bird 클래스 자체의 약점 5종 중 test mAP 가장 낮음 (0.617 @ 320)
선풍기 형태 둥근 흰색 → 새의 몸체 윤곽과 유사

학습 mAP 단계에서는 "조류가 다른 종보다 약하구나" 로만 보였지만, 카메라 단계에서는 "실내 인공물에 100% false positive" 로 드러났습니다.

데모 전 보완 카드

Bird FP confidence distribution + threshold options

카드 효과 비용
conf 임계값 0.5 → 0.7 bird FP 80%+ 제거 (대부분 0.5~0.65 범위) 진짜 새 미검출 가능성 ↑
클래스별 임계값 (bird만 0.8) 선택적 필터링, 다른 종 그대로 인자 추가
시간 일관성 필터 (N프레임 연속) 1프레임 노이즈 제거 약 0.3s 지연
모션 게이트 정지 영상에서 미검출 → 선풍기 안 도는 상태 안전 모션 감지 코드 추가

데모용 1차 카드는 "conf 0.7 + bird만 0.8" 조합이 가장 비용/효과 좋아 보입니다.

RPi 운용 트러블슈팅 (이 MVP를 만들면서 부딪힌 것들)

문제 원인 대응
재부팅 2회 (val·양자화 도중) CPU 풀로드 + 쿨링 부재 → 82°C → thermal shutdown 외부 선풍기 임시 적용으로 38°C 유지
/tmp 스크립트 날아감 tmpfs 재부팅 시 휘발 영구 디스크에 로그 + 스크립트 idempotent화
SSH 끊김 시 작업 중단 nohup 미사용 nohup + 영구 로그 경로로 SSH 의존 제거
카메라 실내 false positive bird 클래스 + 학습 분포 mismatch conf 임계값 + 클래스별 임계값 + 시간 일관성 필터

다음 액션

  1. conf 0.7로 라이브 재테스트 (false positive 제거 확인)
  2. 실제 동물 사진(폰 화면)을 카메라 앞에 띄워 진짜 검출 확인
  3. 클래스별 임계값 옵션 추가 (--class-conf bird:0.8,roe_deer:0.5,...)
  4. 1시간 연속 안정성 테스트 (발열·메모리 추이)
  5. (선택) Flask + MJPEG 웹 스트리밍으로 데모 시연 강화
  6. multi-scale 학습 다시 시도 (torch+ultralytics 호환성 이슈 우회 후)

회고

1. 학습 mAP는 운영 신호가 된다 (그러나 모든 신호는 아니다)

bird mAP 0.617이 학습 단계에서는 그냥 "낮네" 였습니다. 카메라 단계에서는 100% false positive로 드러났습니다. 학습 mAP는 운영 약점의 1차 지표.

2. 학습 데이터 분포와 deploy 분포 차이를 미리 알아야 한다

야외 IR 카메라트랩 위주 데이터를 실내 일반 카메라에 그대로 쓰면 일반화에 실패합니다. deploy 환경의 분포 가정을 학습 단계부터 의식해야 합니다.

3. "측정 가능한 MVP"가 다음 결정의 근거를 만든다

TSV 로그 + JSON 통계 + MP4 영상 3종을 매 실행마다 남기게 한 덕분에, 데모 전 보완 카드(conf 임계값 0.7) 같은 결정이 측정 기반으로 나올 수 있었습니다.

4. 카메라 통합은 "한 줄 추가"가 아니다

picamera2 초기화, RGB↔BGR 변환, fps cap, annotation 비용, 헤드리스 환경 출력 검증 등 의외로 챙길 게 많았습니다. 학습 코드와 카메라 코드는 같은 파이썬이지만 별개의 시스템이라고 생각하는 게 맞았습니다.

관련 자료

Woody's AI Backend Engineering Log


💼 About

Deepvisions | AI Engineer 2026.03 ~ 재직중


🚀 Projects (최신순)

CCTV 자전거 경로 & 공회전 탐지 — 한동대학교 리빙랩

2026.05 ~ | @ Deepvisions 캠퍼스 CCTV 4대 · 자전거 OCR + 차량 공회전 다중 신호

야생동물 탐지 — RPi 엣지 배포

2026.04 ~ | @ Deepvisions 포도밭 침입 탐지 (5종 multi-class · 라즈베리파이 4 실시간)

포도밭 병해충 탐지 및 수확량 예측

2026.03 ~ | @ Deepvisions 드론 이미지 기반 객체 탐지 + GSD calibration + 수확량 예측


📦 종료된 프로젝트

OnTheTop

2025.03 ~ 2025.08 | 카카오테크부트캠프 | ✅ 종료 AI 기반 데스크테리어 추천 서비스


AI Notes


About

Clone this wiki locally