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 기반 감시의 새로운 패러다임을 제시한다. 시스템은 더 이상 ‘무언가가 움직였다’고 말하지 않고, ‘안전모를 착용하지 않은 사람이 위험 구역에 들어섰습니다’라고 구체적으로 알려준다. 이러한 접근은 대규모 영상 데이터의 가치를 극대화하는 실질적인 해법이 될 수 있다.