대부분의 보안팀은 블록된 카메라에 대해 같은 방식으로 알게 됩니다. 무언가가 사라지거나, 누군가 영상을 가져가고, 녹화 영상에는 한 시간 분량의 검은 화면, 기름진 흐릿함, 또는 벽의 선명한 모습이 담겨 있습니다. 이 사각지대가 좋은 AI 보안 카메라가 해결하는 첫 번째 문제입니다. AI CCTV 카메라가 침입자나 화재를 감지하기 전에, 카메라는 여전히 볼 수 있는지 확인해야 합니다. 저는 이것이 AI 보안 감시(security surveillance) 분야에서 가장 과소평가된 역할이라고 주장합니다. 왜냐하면 다른 모든 경고는 이것에 의존하기 때문입니다.
본 게시물에서는 변조(tampering), 가림(masking), 오작동(malfunction) 감지 기능이 내부적으로 어떻게 작동하는지, 어디서 속을 수 있는지, 그리고 공급업체의 데모를 신뢰하기 전에 무엇을 물어봐야 하는지를 자세히 설명합니다. 공장, 창고 또는 원격 변전소 전반에 걸쳐 AI 보안 모니터링을 운영하든, 직접 AI 기반 산업 감시(industrial surveillance) 시스템을 구축하든, 여기에서 실용적인 세부 사항을 찾을 수 있으며, 자체 피드에서도 시도해 볼 수 있는 짧은 OpenCV 코드 스니펫도 포함되어 있습니다.
카메라 변조, 가림 및 오작동이란 무엇인가?
**카메라 변조(Camera tampering)**는 CCTV 카메라가 사용할 수 있는 영상을 녹화하는 것을 막는 모든 의도적인 행위를 말합니다. 렌즈를 덮거나, 스프레이를 뿌리거나, 초점을 흐트러뜨리거나, 돌리거나, 케이블을 자르는 등의 행위가 포함됩니다. **카메라 가림(Camera masking)**은 무언가가 물리적으로 렌즈를 막는 종류의 변조입니다. **카메라 오작동(Camera malfunction)**은 사람에 의한 것이 아니라 결함으로 인해 발생하는 동일한 시야 손실이며, 예를 들어 작동하지 않는 적외선 LED, 멈춘 스트림, 또는 하우징 내부의 습기 등이 원인일 수 있습니다.
보안 데스크에서 이 세 가지는 모두 비슷하게 보입니다. 온라인이지만 쓸모없는 카메라 말이죠. 따라서 각각이 이미지에 어떤 영향을 미치는지 아는 것이 도움이 됩니다.
<table><thead><tr><th>문제점 (Problem)</th><th>이미지 모습 (What the image looks like)</th><th>흔한 원인 (Common causes)</th></tr></thead><tbody><tr><td>가림 (Masking)</td><td>디테일이 거의 없는 크고 어둡거나 평평하거나 단색의 영역</td><td>테이프, 비닐봉지, 페인트, 손, 쌓인 팔레트, 주차된 트레일러</td></tr><tr><td>초점 흐림 또는 블러 (Defocus or blur)</td><td>모서리가 희미해지는 부드럽고 번진 이미지</td><td>렌즈에 뿌린 것, 그리스, 또는 바셀린; 초점 링을 돌림; 먼지</td></tr><tr><td>눈부심 (Blinding)</td><td>밝게 날아가 거의 흰색인 화면</td><td>손전등, 레이저 포인터, 카메라 이동 후의 낮은 태양광</td></tr><tr><td>재배치 (Repositioning)</td><td>다른 장면; 익숙한 랜드마크가 사라짐</td><td>손으로 돌린 카메라, 느슨한 브래킷, 강풍</td></tr><tr><td>신호 손실 (Signal loss)</td><td>아무런 비디오 신호 없음</td><td>잘린 케이블, PoE 또는 전원 장애, 네트워크 오류</td></tr><tr><td>정지된 피드 (Frozen feed)</td><td>같은 프레임이 반복됨; 화면 속 시계가 멈춤</td><td>인코더 정지, 펌웨어 버그, 루프되거나 재생되는 스트림</td></tr><tr><td>이미지 저하 (Image degradation)</td><td>낮에 분홍색 색조, 밤에 검은 이미지, 심한 노이즈</td><td>고착된 IR-컷 필터, 고장난 IR LED, 수명이 다하는 센서, 응결</td></tr></tbody></table>
산업 현장에서 주목할 점: 가림의 많은 경우는 악의적이지 않습니다. 팔레트가 카메라 앞에 쌓이고, 새 간판이 올라가고, 한여름 동안 나무가 프레임 안으로 자라 들어옵니다. 결국 같은 사각지대가 생기므로, 감지 시스템 역시 동일한 방식으로 이를 포착해야 합니다.
전통적인 CCTV 모니터링이 카메라 변조를 놓치는 이유
영상 벽면에서 60개의 타일을 지켜보는 운영자를 상상해 보십시오. 새벽 2시에 찍힌 검은색 타일은 약한 IR을 가진 야간 카메라와 똑같아 보입니다. 흐릿한 타일은 비처럼 보입니다. 각도가 30도 돌아간 카메라는 여전히 완벽하게 정상적인 주차장을 보여주지만, 원래 커버해야 할 게이트는 아닙니다. 사람들은 움직임을 포착하는 데 능숙하지만, 무언가가 조용히 멈췄다는 사실을 알아차리는 데는 서툽니다.
내장된 도구들 역시 그리 나은 성능을 보여주지 못합니다. 대부분의 NVR(Network Video Recorder)은 신호가 사라질 때 "영상 손실(video loss)" 경보를 울리지만, 마스킹된 카메라는 계속 스트리밍하기 때문에 녹화기는 모든 것이 정상이라고 생각합니다. 기본적인 동작 감지는 누군가가 렌즈를 가릴 때 한 번 작동한 후 침묵할 수 있습니다. 많은 IP 카메라는 변조(tamper) 설정을 기본으로 제공하며, ONVIF 표준은 글로벌 장면 변화나 너무 흐릿하거나, 어둡거나, 밝은 이미지에 대한 이벤트까지 정의합니다. 하지만 실제로는 이러한 설정들이 꺼져 있거나, 설치 시 한 번 조정되었거나, 아무도 읽지 않는 녹화기에 기록되어 있는 경우가 많습니다.
그리고 수동 건강 검진이 있습니다. 많은 사이트가 매주 또는 매월 모든 카메라를 점검합니다. 이것이 아예 하는 것보다는 낫지만, 점검 다음 날 고장 난 카메라는 6일 이상 사각지대에 머무릅니다. 자동화된 감지는 이 기간을 몇 분 단위로 단축할 수 있습니다.
AI CCTV 카메라는 어떻게 변조(Tampering), 가림(Masking), 오작동을 감지하는가
AI 변조 감지(AI tamper detection)는 각 카메라가 정상적으로 무엇을 보는지 학습하고, 모든 새로운 프레임을 그 기준선과 비교하며, 차이가 크고, 구체적이며, 몇 초 이상 지속될 때 경보를 울리는 방식으로 작동합니다. 각 요소가 어떻게 맞물리는지 살펴보겠습니다.
모든 카메라에 대한 기준선(Baseline) 학습
정오의 하역장 카메라와 자정의 같은 카메라는 서로 다른 "정상 상태"입니다. 우수한 시스템은 보통 시간대별로 카메라당 참조 데이터를 구축합니다. 즉, 일반적인 밝기, 프레임이 유지하는 미세한 디테일 정도, 고정된 랜드마크가 위치하는 곳, 그리고 일반적인 움직임의 양 등입니다. 이 과정을 생략하면 단 하나의 글로벌 임계값(global threshold)은 바쁜 카메라의 변조를 놓치거나, 조용한 카메라의 경보에 압도될 것입니다.
디테일 측정으로 가림과 흐릿함을 포착
렌즈가 가려지거나 얼룩지면 디테일이 먼저 사라집니다. 세 가지 간단한 신호만으로 대부분의 문제를 포착할 수 있습니다. **선명도(Sharpness)**는 보통 라플라시안(Laplacian)의 분산(variance)으로 측정되는데, 렌즈에 스프레이를 뿌리거나 기름칠을 하거나 초점이 맞지 않으면 급격히 떨어집니다. **히스토그램 엔트로피(Histogram entropy)**는 픽셀 값들이 얼마나 다양한지를 알려주며, 테이프나 가방 등으로 이미지가 좁은 범위의 톤으로 평평해지면 이 값이 무너집니다. **장면 차이(Scene difference)**는 기준 프레임과 비교했을 때 무언가가 렌즈 앞에 놓이거나 카메라가 움직일 때 급증합니다.
OpenCV를 사용한 최소한의 Python 버전 코드입니다. 프로덕션 코드는 아니지만, 직접 피드에서 이 수치들이 어떻게 작동하는지 빠르게 확인할 수 있는 방법입니다:
import cv2
import numpy as np
def frame_health(frame, ref_gray):
"""기준 프레임과 비교하여 한 프레임의 간단한 상태 신호."""
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
sharpness = cv2.Laplacian(gray, cv2.CV_64F).var() # 흐릿하거나 가려질 때 감소
hist = cv2.calcHist([gray], [0], None, [256], [0, 256]).ravel()
p = hist / hist.sum()
entropy = -np.sum(p[p > 0] * np.log2(p[p > 0])) # 이미지가 평평해질 때 감소
brightness = gray.mean() # 0에 가까울수록 가려짐, 255에 가까울수록 눈부심
scene_diff = cv2.absdiff(gray, ref_gray).mean() # 막히거나 움직일 때 급증
return {"sharpness": sharpness, "entropy": entropy,
"brightness": brightness, "scene_diff": scene_diff}
가장 어려운 부분은 수학 자체가 아닙니다. 임계값(threshold)입니다. 단 하나의 전역적인 절단값만 믿지는 마세요. 각 값을 해당 카메라의 같은 시간대 이력과 비교하고, 30초 이상 범위 밖에 머물 때만 플래그를 지정해야 합니다.
랜드마크 매칭을 이용한 재배치 감지
누군가 카메라를 돌릴 경우, 이미지는 선명하고 밝게 유지되므로 위의 점검들을 통과할 수 있습니다. 이를 포착하기 위해 시스템은 문틀, 레일, 또는 울타리선 같은 고정된 특징점(fixed features)에서 핵심점(keypoints)을 저장한 다음, ORB와 같은 특징 검출기(feature detector)를 사용하여 새로운 프레임에서 이들을 일치시킵니다. 대부분의 핵심점이 더 이상 일치하지 않거나 추정되는 이동량이 크고 지속적으로 유지되면, 카메라는 움직인 것입니다.
스트림에서 오작동 감지
일부 고장은 사진에 나타나기 전에 비디오 데이터에서 먼저 나타납니다. 프레임 속도(Frame rate), 비트 전송률(bitrate), 드롭된 프레임(dropped frames) 모두 스트림별로 추적할 수 있습니다. 정지된 피드는 프레임을 해싱(hashing)하여 쉽게 포착할 수 있습니다. 평소에 움직임이 감지되는 카메라에서 해시 값이 1분 동안 변하지 않거나, 화면의 시계가 멈추면, 스트림이 멈췄거나 재생되고 있는 것입니다. 색상 점검은 막힌 IR-cut 필터(핑크빛 주간 색조)를 포착하고, 기준선보다 훨씬 어두운 야간 이미지는 IR 실패를 나타냅니다.
딥러닝이 자리 잡는 이유
신호 점검은 빠르고 설명 가능하지만, 문맥을 이해하지 못합니다. 훈련된 모델은 이해합니다. 수천 개의 정상적이고, 가려지고, 분사되고, 돌려진 프레임으로 훈련된 컨볼루션 네트워크(convolutional network)는 트럭이 카메라 앞에 5분 동안 주차된 경우와 그 위에 매달린 가방 사이의 차이점처럼, 수동으로 조정된 규칙으로는 놓치는 패턴을 포착합니다. 더 새로운 도구들은 또한 비전-언어 모델(vision-language models)을 사용하여 문제를 일반적인 말로 설명하여, 경고가 '이상 징후 점수 0.87' 대신 '렌즈 일부가 플라스틱으로 가려짐'과 같이 표시되도록 합니다. 제가 본 가장 효과적인 구성은 이 둘을 결합하는 것입니다: 매 프레임마다 실행되는 저렴한 점검과, 누군가 호출되기 전에 확인하는 더 무거운 모델입니다.
실제 사례: 런던 ULEZ 카메라와 대규모 변조
대규모의 분산된 카메라 네트워크가 표적이 되었을 때 어떤 일이 벌어지는지 알고 싶다면 2023년 런던의 초저배출 구역(Ultra Low Emission Zone) 사례를 살펴보십시오. 이 제도 확장은 논란이 많았고, 단속 카메라들은 반복적으로 공격받았습니다. 2023년 8월 1일까지 메트로폴리탄 경찰은 ULEZ 카메라와 관련된 총 288건의 범죄를 기록했는데, 여기에는 케이블 손상 보고서 185건, 도난당한 카메라 164대, 가려진(obscured) 카메라 38대가 포함되었습니다. 10월 말까지 메트로폴리탄 경찰의 집계는 도난당한 카메라 220대와 손상된 카메라 767대로 늘어났고, TfL은 이를 수리하는 엔지니어들을 보호하기 위해 경비원을 고용했습니다.
이러한 교훈들은 산업 현장에도 그대로 적용됩니다.
공격 유형은 위에서 언급한 범주들과 깔끔하게 일치합니다. 잘린 케이블은 신호 손실로 나타나고, 가려진 카메라는 마스킹(masking)이며, 전원이 여전히 공급되는 손상된 카메라는 오작동으로 간주될 수 있습니다. 만약 시스템이 이 모든 것을 하나의 '카메라 오프라인' 경보로 묶어버린다면, 팀은 기술자를 보내야 할지 아니면 경비원을 보내야 할지 판단할 수 없습니다.
저는 또한 그 가려진 카메라 38대가 과소평가된 것이라고 의심합니다. 도난당한 카메라는 스스로를 알립니다. 커다란 천으로 덮인 카메라는 계속 스트리밍을 하므로, 이미지를 직접 확인하는 사람이 없다면 며칠 동안 눈에 띄지 않을 수 있습니다.
마지막으로, 무인 현장에 대한 공격은 파도처럼 옵니다. The Telegraph는 한 시점에는 일주일에 40개에서 60개의 공격이 있었다는 내부 추정치를 인용했습니다. 태양광 발전소, 파이프라인, 변전소, 원격 저장 야적장 등은 비슷한 특성을 공유합니다. 즉, 카메라가 많고 사람이 가까이 없고, 누군가가 방해받지 않고 작업할 충분한 시간이 있다는 것입니다. 빠르고 구체적인 경보는 그러한 카메라 네트워크를 단순 녹화 시스템에서 조기 경보 시스템으로 변화시킵니다.
AI 보안 모니터링이 실제 변조와 오경보를 구분하는 방법
'늑대 소리를 지르는' 변조 경보는 일주일 안에 무시됩니다. 저는 팀들이 안개 때문에 매일 아침 카메라 상태 경보를 완전히 음소거하여, 시작하기 전보다 상황을 더 악화시킨 것을 본 적이 있습니다. 여기서 중요한 것은 순수한 민감도(raw sensitivity)보다 정확성(accuracy)입니다.
산업 현장에서 흔히 문제가 되는 것들은 예측 가능합니다. 가장 큰 것은 날씨입니다: 안개, 폭우, 하우징에 쌓인 눈, 렌즈 위에 고여 있는 물방울 등이 있습니다. 다음으로는 조명 변화가 오는데, 일출의 눈부심(glare), 헤드라이트, 황혼 무렵 IR 모드로 전환되는 것, 또는 근무 종료 시 창고 불이 꺼지는 경우 등이 있습니다. 거미줄도 전형적인 원인 중 하나인데, IR 빛은 곤충을 끌어당기고 그 뒤를 거미줄이 따르기 때문입니다. 그리고 지게차가 카메라 근처에 주차되거나 청소 인력이 작업하는 것 같은 정상적인 작동 또한 몇 분 동안 가림(masking)처럼 보일 수 있습니다.
좋은 시스템들은 이 문제들을 세 가지 방식으로 처리합니다. 경고를 울리기 전에 특정 조건이 설정된 시간 동안 지속되어야 합니다. 고정된 하나의 임계값 대신 카메라별, 시간대별 기준선(baseline)과 비교합니다. 그리고 여러 카메라에 걸쳐 상관관계를 분석합니다: 한 건물에 있는 12대의 카메라가 동시에 어두워진다면, 그것은 조명이나 전력 문제이지 12건의 변조 사건이 아닙니다. 더 나은 플랫폼들은 또한 운영자가 경고를 실제인지 오탐(false)으로 표시할 수 있게 하여, 각 카메라의 임계값이 시간이 지남에 따라 개선되도록 합니다.
제가 생각하는 원칙은 이렇습니다: 팀이 신뢰하는 주간 5건의 경고가 검토만 한 500건보다 가치가 있습니다.
변조 감지를 위한 AI 보안 모니터링에서 찾아야 할 것들
거의 모든 공급업체들이 변조를 감지한다고 말합니다. 진짜 질문은 얼마나 잘, 당신의 카메라와 환경에서 감지하느냐는 것입니다. 이것들은 제가 어떤 계약서에 서명하기 전에 물어볼 질문들입니다.