
1. 들어가며: 보안 검색대 CCTV, 왜 칼을 보고도 놓칠까?
최근 공공장소나 보안 구역에서의 안전 문제가 대두되면서, 지능형 CCTV를 이용한 위험물 탐지 기술에 대한 수요가 폭발적으로 증가하고 있습니다. 하지만 우리가 흔히 접하는 딥러닝 튜토리얼 코드를 실제 보안 카메라에 적용해 보면 처참한 결과를 마주하게 됩니다.
사람의 눈은 복잡한 배경 속에서도 칼이나 가위 같은 위험물을 쉽게 식별하지만, AI 모델은 조명이 조금만 어둡거나 물건이 가방에 반쯤 가려져 있어도 인지하지 못하는 경우가 많습니다. 더 큰 문제는 스마트폰을 권총으로, 은색 볼펜을 칼로 오인하는 **오탐(False Positive)**입니다.
이번 포스팅에서는 Python과 최신 객체 탐지 모델(YOLOv8)을 활용해 실제 환경에서 작동 가능한 수준의 위험물 탐지 시스템을 구축하면서 겪었던 시행착오와, 특히 심각했던 오탐 문제를 해결한 실전 노하우를 공유하고자 합니다.
2. 프로젝트 환경 및 '악조건' 데이터셋 구축 전략
성공적인 보안 모델의 핵심은 '양질의 데이터'가 아닌 '현실적인 데이터'에 있습니다. 인터넷에 떠도는 깨끗한 흰 배경의 칼 사진만으로는 실제 CCTV 환경을 절대 커버할 수 없습니다.
- 개발 환경: Python 3.10, PyTorch 2.0, Ultralytics YOLOv8 (Medium 모델 기반)
- 타겟 클래스: Knife(칼), Gun(총기), Scissors(가위) - 3종
- 데이터 수집 전략:
- 저는 모델의 강인함을 기르기 위해 일부러 '악조건 데이터' 300장을 직접 제작했습니다.
- 실제 상황처럼 가방에서 물건을 꺼내는 순간, 손에 쥐어 일부만 보이는 경우, 어두운 조명 아래 놓인 경우 등을 집중적으로 촬영하여 학습 데이터에 포함시켰습니다.
3. 전체 시스템 파이프라인: 실시간 탐지에서 경보까지
단순히 이미지를 넣어 박스를 그리는 것을 넘어, 실제 보안 관제 시스템에서 사용할 수 있도록 전체적인 흐름을 설계했습니다. 아래 그림은 실시간 영상 입력부터 최종 경보 알림까지의 시스템 구조도입니다.

CCTV에서 들어온 영상 프레임은 전처리를 거쳐 학습된 YOLOv8 모델로 입력됩니다. 모델은 객체를 탐지하고, 시스템은 이 결과 중 신뢰도(Confidence Score)가 일정 기준(예: 0.75) 이상인 '위험 클래스'에 대해서만 최종적으로 경보를 울리게 됩니다.
4. 핵심 문제 해결: "볼펜이 칼이라고?" 오탐(False Positive)과의 전쟁
프로젝트 초기, 가장 큰 골칫거리는 실제 위험물을 놓치는 것(미탐)이 아니라, 안전한 물건을 위험물로 잘못 인식하는 **오탐(False Positive)**이었습니다. 특히 은색 금속 재질의 볼펜이나 스마트폰을 칼이나 권총으로 오인하는 경우가 빈번했습니다. 실제 보안 현장에서 이런 오탐이 잦으면 경보 자체에 대한 신뢰도가 바닥으로 떨어지게 됩니다.
저는 이 문제를 해결하기 위해 두 가지 핵심적인 접근을 시도했습니다.
- 네거티브 샘플링(Negative Sampling) 강화: 모델이 헷갈려하는 볼펜, 스마트폰, 지갑 등의 이미지를 수집하여 "이것은 칼이 아니다", "이것은 총이 아니다"라고 명확히 학습시켰습니다. 이를 통해 모델이 위험물과 유사한 안전한 물건의 특징을 구분하도록 만들었습니다.
- 신뢰도 임계값(Confidence Threshold) 튜닝: 초기에는 0.5 이상의 신뢰도면 모두 탐지했으나, 이를 0.75로 상향 조정했습니다. 약간의 미탐을 감수하더라도, 확실한 경우에만 경보를 울려 시스템의 신뢰성을 높이는 전략을 선택했습니다.
아래 이미지는 오탐이 발생하던 초기 모델과, 이를 개선한 후의 결과를 비교한 것입니다.

이러한 과정을 통해, 일상적인 사무용품이나 소지품을 위험물로 오인하는 비율을 획기적으로 줄일 수 있었습니다.
5. 최종 구현 결과 및 성능 평가
개선된 모델과 로직을 통합하여 실제 환경과 유사한 테스트베드에서 성능을 검증했습니다. 앞서 언급한 '악조건 데이터'를 포함한 다양한 시나리오에서 테스트를 진행했습니다.
아래 이미지는 실제 가방에서 흉기를 꺼내는 순간을 모델이 정확하게 포착한 결과 화면입니다.

테스트 결과, 정제된 테스트셋에서는 95% 이상의 높은 mAP(mean Average Precision)를 보였으며, 실제 악조건 환경에서도 80% 이상의 준수한 탐지율을 유지했습니다. 무엇보다 오탐률을 초기 대비 70% 이상 감소시켜 실용성을 크게 높였습니다.
6. 결론 및 향후 과제: 엣지 디바이스로의 확장
이번 프로젝트를 통해 딥러닝 기반의 객체 탐지 기술이 실제 보안 현장에서 충분히 활용될 수 있음을 확인했습니다. 하지만 여전히 고성능 GPU가 장착된 PC 환경에서만 원활하게 작동한다는 한계가 있습니다.
진정한 의미의 지능형 CCTV를 구현하기 위해서는 카메라 자체나 소형 셋톱박스에서 추론이 가능해야 합니다. 다음 포스팅에서는 모델 경량화(Quantization, Pruning) 기술을 적용하여, NVIDIA Jetson Nano와 같은 저전력 엣지 디바이스(Edge Device)에 이 시스템을 이식하는 과정을 다뤄보겠습니다. 현장에서의 실시간성은 보안 시스템의 생명이니까요.
'Computer Vision + Python > 산업 응용 & 비즈니스활용 (전문가)' 카테고리의 다른 글
| 실전 리테일 분석: Python과 CCTV로 고객의 숨은 니즈를 파악하는 행동 분석 시스템 구축기 (0) | 2026.01.05 |
|---|---|
| 실전 Python 프로젝트: 지능형 주차장 빈자리 감지 시스템 구축과 조명 변화 극복기 (0) | 2026.01.04 |
| 이론을 넘어선 실전: Python 차량 번호 인식(LPR) 및 위반 감지 시스템 구축기 (0) | 2026.01.02 |
| 실전 Python DMS 구현: 졸음운전 방지를 위한 눈 깜빡임 감지(EAR) 알고리즘 최적화 (0) | 2026.01.01 |
| 실전 Python 산업용 비전: 공정 라인 결함 검사(Auto-Inspection) 시스템 구축과 '미세 결함' 탐지 노하우 (0) | 2025.12.30 |