YOLOv8과 MiniCPM-V-2.6 결합을 통한 지능형 다중모달 보안 감시 시스템 구축

1. 기존 보안 시스템의 한계와 다중모달 AI의 도입 필요성

현대 스마트 캠퍼스나 산업단지에서 보안 관리는 단순한 영상 녹화를 넘어선 실시간 인지 기능이 요구되고 있다. 고객의 요구는 점점 더 정교해지고 있으며, 예를 들어 "A구역 입구에서 5분 이상 배회하는 사람 발견" 같은 자연어 형태의 자동 경보 생성을 기대한다. 이는 단순 움직임 감지로는 달성할 수 없는 수준의 상황 이해 능력을 의미한다.

기존의 규칙 기반 탐지는 특정 영역 침입 여부만 알려줄 뿐, "누가", "무엇을 하고 있는지"에 대한 맥락은 제공하지 못한다. 이를 극복하기 위해 우리는 두 개의 전문화된 모델을 조합하는 접근법을 채택했다: YOLOv8은 시각적 요소를 정확히 식별하고, MiniCPM-V-2.6은 그 정보를 바탕으로 인간 친화적인 설명을 생성한다. 이 조합은 ‘감지(Detect)’에서 ‘해석(Interpret)’으로의 전환을 가능하게 한다.

2. 아키텍처 설계: 역할 분담과 처리 흐름

전체 시스템은 비디오 입력부터 자연어 출력까지의 파이프라인으로 구성된다. 아래 다이어그램은 각 컴포넌트 간의 데이터 흐름을 나타낸다.

graph TD
    A[실시간 영상 스트림] --> B{YOLOv8 객체 탐지}
    B --> C[탐지 결과 집계 및 정제]
    C --> D[MiniCPM-V-2.6용 프롬프트 생성]
    D --> E{MiniCPM-V-2.6 추론}
    E --> F{결과 분류}
    F -- 정상 --> G[일반 로그 저장]
    F -- 이상 징후 --> H[경보 메시지 발송]
    G & H --> I[데이터베이스 또는 대시보드]
    

2.1 YOLOv8: 고속 객체 탐지 엔진

YOLOv8은 실시간 영상 처리에 최적화된 딥러닝 모델로, 초당 수십 프레임을 처리하면서도 높은 정밀도를 유지한다. 본 시스템에서는 yolov8s.pt와 같은 사전 학습 모델을 사용하여 사람, 차량, 자전거 등 80개 클래스를 식별한다.

주요 출력 항목은 다음과 같다:

  • 클래스 이름: 예 - 'person', 'car'
  • 신뢰도 점수: 0.0 ~ 1.0 사이 값
  • 바운딩 박스 좌표: 중심점 (x, y), 너비, 높이 형식

핵심 전처리 단계는 이 구조화된 데이터를 자연어로 해석 가능한 형태로 변환하는 것이다. 예를 들어, 여러 탐지 결과를 다음과 같이 요약할 수 있다:

"현재 화면에는 왼쪽 하단에 사람이 1명, 오른쪽 중앙에 정지된 승용차 1대가 있으며, 자전거 1대가 우측에서 좌측으로 이동 중입니다."

이 텍스트는 후속 모델에게 충분한 시각적 컨텍스트를 제공한다.

2.2 MiniCPM-V-2.6: 언어 기반 시나리오 분석기

MiniCPM-V-2.6은 이미지와 텍스트를 동시에 처리할 수 있는 다중모달 모델이지만, 본 구현에서는 계산 효율성을 위해 **텍스트 전달 방식**을 선택하였다. 즉, 원본 영상을 직접 입력하지 않고, YOLOv8이 생성한 텍스트 요약을 입력으로 사용한다.

이 방법의 장점은 명확하다:

  • GPU 리소스 소모를 크게 줄일 수 있음
  • 응답 시간 단축
  • 입력 포맷을 제어함으로써 출력 일관성 확보 가능

효과적인 분석을 위해 다음과 같은 정보를 포함하는 프롬프트를 설계한다:

  • 카메라 위치 및 시간 정보
  • 객체 탐지 요약
  • 해당 구역의 보안 정책 (예: 주차 금지, 출입 제한)
  • 출력 형식 지침 (예: "긴급" 접두어 사용 여부)

예시 프롬프트:

당신은 산업단지 보안 분석 시스템입니다. 다음 정보를 바탕으로 상황을 평가하고, 이상이 있을 경우 경보를 생성하세요.

[입력 데이터]
- 시간: 2024-07-15 14:22:10
- 위치: 3번 공장 동문
- 탐지 내용:
  • 사람(person): 1명, 문 근처에서 정지 상태
  • 안전모(safety_hat): 미착용
- 운영 규칙:
  • 모든 작업자는 안전모 착용 필수
  • 퇴근 시간 외 동문 접근 금지

[출력 지시]
결과를 두 문장 이내로 요약하고, 위반 사항이 있으면 '⚠️ 위반 감지'로 시작하세요.
    

모델의 출력 예:

⚠️ 위반 감지: 3번 공장 동문에서 안전모를 착용하지 않은 인원 1명이 확인되었습니다. 즉시 현장 확인 권고.

3. 시스템 구현 코드

다음은 실제 연동을 위한 핵심 파이썬 코드이다. OpenCV와 Ultralytics 라이브러리를 기반으로 하며, MiniCPM-V-2.6은 API 호출 방식으로 통합한다.

import cv2
from ultralytics import YOLO
from collections import defaultdict
import time

# YOLOv8 모델 로드
detector = YOLO('yolov8s.pt')

# 가상의 MiniCPM-V 추론 함수 (실제 배포 시엔 API 요청으로 교체)
def analyze_scene_with_llm(scene_text):
    # 실제 구현 시 Hugging Face Transformers 또는 REST API 사용
    return f"분석 결과: {scene_text} — 이상 활동 없음."

# 프레임 처리 함수
def analyze_security_frame(frame, frame_idx, camera_label):
    results = detector.track(frame, persist=True, verbose=False)[0]
    objects = []

    if results.boxes:
        for box in results.boxes:
            cls_id = int(box.cls)
            conf = float(box.conf)
            class_name = detector.names[cls_id]

            if conf > 0.6:  # 최소 신뢰도 임계값 설정
                objects.append({
                    'class': class_name,
                    'confidence': round(conf, 2),
                    'track_id': int(box.id) if box.id is not None else None
                })

    # 10초마다 요약 생성 (30fps 기준 300프레임)
    if frame_idx % 300 == 0 and objects:
        counter = defaultdict(int)
        details = []
        for obj in objects:
            counter[obj['class']] += 1
        
        summary_parts = [f"{cnt}명의 {cls}" if cls == 'person' else f"{cnt}대의 {cls}" 
                        for cls, cnt in counter.items()]
        object_summary = " 및 ".join(summary_parts)

        prompt = f"""
        감시 카메라 [{camera_label}]에서 다음 상황이 관찰되었습니다:
        - {object_summary}
        - 현재 시각: {time.strftime('%H:%M:%S')}
        
        이 상황을 분석하고, 잠재적 보안 위협이 있는지 판단하세요.
        """
        
        analysis = analyze_scene_with_llm(prompt)
        print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] {analysis}")

    # 실시간 시각화 (옵션)
    annotated_frame = results.plot()
    return annotated_frame

# 메인 실행 루프
cap = cv2.VideoCapture("rtsp://your-camera-stream")  # 또는 로컬 영상 파일
frame_number = 0
while cap.isOpened():
    ret, frame = cap.read()
    if not ret: break

    output_frame = analyze_security_frame(frame, frame_number, "FACTORY_GATE_3")
    cv2.imshow("Smart Surveillance", output_frame)
    
    if cv2.waitKey(1) == ord('q'):
        break
    frame_number += 1

cap.release()
cv2.destroyAllWindows()
    

4. 응용 가능성 확장

이 아키텍처는 보안 외에도 다양한 분야에 적용 가능하다:

  • 매장 운영: 고객 밀집 지역 탐지, 진열대 앞 체류 시간 분석
  • 교통 관제: 교차로 혼잡도 요약, 불법 주정차 보고서 자동 생성
  • 시설 관리: 쓰레기통 과다 적재 알림, 소화전 차단 여부 점검
  • 제조 현장: PPE 착용 여부 감시, 위험 구역 무단 출입 탐지

공통점은 모두 ‘구조화된 시각 데이터’를 ‘의미 있는 언어 정보’로 변환한다는 점이다. 이는 비전문가도 쉽게 상황을 파악할 수 있도록 돕는다.

5. 운영 시 고려사항

실제 배포 시 몇 가지 중요한 포인트가 있다:

  • 정확한 탐지를 위한 파인튜닝: 특정 작업복이나 장비 인식을 위해 YOLOv8을 도메인 데이터로 추가 학습해야 할 수 있다.
  • 프롬프트 최적화: 반복 실험을 통해 출력 형식과 분석 깊이를 조절해야 한다. 예컨대 "경보는 반드시 ‘🚨’ 이모티콘으로 시작하라"와 같은 지시어가 효과적이다.
  • 성능 튜닝: 전체 프레임을 분석하는 대신, 특정 이벤트(예: 사람 감지) 발생 시에만 LLM을 호출하는 것이 효율적이다.
  • 장애 복구 설계: LLM 서비스 장애 시 기본 규칙 엔진으로 전환하거나, 탐지 결과를 큐잉하여 복구 후 재처리하는 방안이 필요하다.

YOLOv8과 MiniCPM-V-2.6의 결합은 단순한 기술 연결을 넘어서, AI 기반 감시의 새로운 패러다임을 제시한다. 시스템은 더 이상 ‘무언가가 움직였다’고 말하지 않고, ‘안전모를 착용하지 않은 사람이 위험 구역에 들어섰습니다’라고 구체적으로 알려준다. 이러한 접근은 대규모 영상 데이터의 가치를 극대화하는 실질적인 해법이 될 수 있다.

태그: YOLOv8 MiniCPM-V-2.6 다중모달 AI 지능형 보안 시스템 객체 탐지

8월 1일 12:04에 게시됨