13년차의 서버실

서버, 인프라, 홈랩 기술 블로그

[태그:] 보안 카메라 최적화

  • [HomeLabs] Frigate AI NVR로 홈랩 CCTV 오탐 줄인 객체 감지 최적화 사례

    [HomeLabs] Frigate AI NVR로 홈랩 CCTV 오탐 줄인 객체 감지 최적화 사례

    Frigate AI NVR로 홈랩 CCTV 오탐 줄인 객체 감지 최적화 사례

    홈랩 CCTV를 오래 굴리다 보면 제일 먼저 지치는 게 저장공간이 아니라 오탐(false positive, 잘못된 감지)입니다. 바람에 흔들리는 나뭇잎, 새벽 벌레, 비 오는 날 헤드라이트 반사까지 전부 이벤트로 찍히면, 정작 봐야 할 장면은 묻혀버리거든요. 저도 처음엔 알림이 많이 오면 좋은 줄 알았습니다. 근데 실제로 써보니까 너무 많이 울리는 시스템은 결국 안 보게 되더라고요. 그래서 이번 글에서는 Frigate AI NVR를 기준으로, 홈랩 CCTV 환경에서 객체 감지 정확도를 높이고 오탐 감소에 집중했던 과정을 사례 연구 형태로 정리해보겠습니다.

    특히 이 글은 “무조건 최신 장비를 사면 해결된다”가 아니라, 이미 가지고 있는 보안 카메라 최적화와 설정 조정만으로 어디까지 개선되는지에 초점을 맞췄습니다. 혹시 지금 홈랩 CCTV 알림 때문에 피곤하신 분이라면, 꽤 공감되실 겁니다.

    Frigate AI NVR가 카메라 스트림을 받아 객체를 감지하고 이벤트를 기록하는 전체 흐름을 보여주는 개요 이미지입니다.

    1. Frigate AI NVR가 왜 홈랩 CCTV에 잘 맞는가

    쉽게 말해 Frigate AI NVR는 카메라 영상을 받아서 사람이 직접 보기 전에, 먼저 객체를 구분해 주는 NVR(Network Video Recorder, 네트워크 비디오 레코더)입니다. 단순히 녹화만 하는 장비가 아니라, 사람이 지나갔는지 차량이 들어왔는지 같은 이벤트를 기준으로 영상을 정리해 주는 쪽에 가깝습니다.

    여기서 핵심은 모션 감지(motion detection)와 객체 감지(object detection)를 분리해서 생각하는 겁니다. 모션 감지는 픽셀 변화만 보고 움직임을 잡아내기 때문에 비, 그림자, 벌레에도 민감합니다. 반면 객체 감지는 “이게 사람인지, 차량인지”를 구분하려고 시도합니다. 물론 완벽하진 않지만, 방향이 다르죠.

    구분 모션 감지 객체 감지
    기준 화면 변화 사람, 차량 등 대상 식별
    장점 가볍고 빠름 의미 있는 이벤트 분류 가능
    단점 오탐이 많음 설정이 잘못되면 놓침 발생
    홈랩 활용 보조 지표 주 이벤트 기준

    제가 직접 해보니, 오탐 감소의 출발점은 모델이나 하드웨어보다도 카메라 구도, 감지 영역, 프레임 수, 객체 필터였습니다. 이 네 가지를 안 잡고 나머지만 만지면, 정말 삽질이 길어집니다.

    2. 오탐이 생기는 진짜 이유

    처음엔 저도 “감지 엔진이 별로인가?” 싶었는데, 실제 원인은 꽤 현실적이었습니다.

    • 야간 적외선(IR, 적외선 조명)에서 벌레가 렌즈 가까이 지나감
    • 차량 헤드라이트가 벽면에 반사되면서 큰 움직임처럼 보임
    • 현관 앞 화분이나 나뭇가지가 바람에 흔들림
    • 너무 넓은 화각으로 도로와 인도까지 같이 잡음
    • RTSP 스트림 해상도와 감지 해상도가 맞지 않아 형태가 흐려짐

    여기서 중요한 포인트가 있습니다. 오탐 감소는 AI 모델만의 문제가 아니라 입력 품질의 문제이기도 하다는 점입니다. 카메라가 쓸데없는 영역을 너무 많이 보고 있으면, Frigate AI NVR가 아무리 열심히 판단해도 헷갈릴 수밖에 없거든요.

    3. 제가 적용한 홈랩 CCTV 객체 감지 최적화 순서

    실제로는 이것저것 한 번에 건드리면 뭐가 효과 있었는지 모르게 됩니다. 그래서 저는 아래 순서로 정리했습니다.

    1. 카메라별 감시 목적 정의: 현관, 주차, 창고처럼 역할을 나눴습니다.
    2. 프레임 구도 조정: 필요 없는 도로, 하늘, 나무 영역을 최대한 빼냈습니다.
    3. 감지 해상도와 FPS(Frame Per Second, 초당 프레임 수) 조정
    4. 객체 종류 제한: 사람과 차량만 먼저 추적했습니다.
    5. 영역(Zone, 존) 기반 필터 적용
    6. 며칠 로그를 보고 다시 미세 조정

    이 순서가 중요한 이유는, 나중 단계로 갈수록 앞선 입력 품질에 의존하기 때문입니다. 예를 들어 존 설정을 정교하게 해도 카메라가 가로등 반사광을 계속 크게 잡으면 의미가 반감됩니다.

    4. 실전 구현: Docker와 Frigate 기본 구성

    제 홈랩에서는 Docker Compose로 올려서 운영하는 편이 관리가 편했습니다. 아래 예시는 구조를 이해하기 위한 기본 예시입니다. RTSP URL이나 저장 경로는 환경에 맞게 바꾸셔야 합니다.

    services:
      frigate:
        container_name: frigate
        image: ghcr.io/blakeblackshear/frigate:stable
        restart: unless-stopped
        privileged: true
        shm_size: "512mb"
        ports:
          - "5000:5000"
          - "8554:8554"
        volumes:
          - ./config:/config
          - ./media:/media/frigate
          - /etc/localtime:/etc/localtime:ro

    실행은 단순합니다.

    docker compose up -d
    docker compose logs -f frigate

    기본 설정 파일은 이런 식으로 시작했습니다.

    mqtt:
      enabled: false
    
    cameras:
      front_door:
        ffmpeg:
          inputs:
            - path: rtsp://USER:[email protected]:554/stream1
              roles:
                - detect
        detect:
          width: 1280
          height: 720
          fps: 5
        objects:
          track:
            - person
            - car
        snapshots:
          enabled: true
    
      parking:
        ffmpeg:
          inputs:
            - path: rtsp://USER:[email protected]:554/stream1
              roles:
                - detect
        detect:
          width: 1280
          height: 720
          fps: 5
        objects:
          track:
            - person
            - car

    처음엔 이것만으로도 굴러갑니다. 그런데 여기서 만족하면 오탐 감소는 반쯤밖에 안 됩니다. 진짜 차이는 다음 단계에서 나더라고요.

    Frigate AI NVR 설정과 홈랩 CCTV 감지 영역 구성 화면

    카메라별 detect 해상도, FPS, 추적 객체, 영역 설정을 조정하는 실전 구성 이미지를 넣는 자리입니다.

    5. 오탐 감소 핵심: 영역 제한과 객체 필터

    제가 가장 큰 효과를 본 건 zone(존, 감지 영역)과 track(추적 객체) 정리였습니다. 예를 들어 현관 카메라에서 굳이 고양이나 새까지 추적할 필요가 없었거든요. 사람만 제대로 잡으면 되는 환경이라면, 범위를 좁히는 게 훨씬 낫습니다.

    cameras:
      front_door:
        ffmpeg:
          inputs:
            - path: rtsp://USER:[email protected]:554/stream1
              roles:
                - detect
        detect:
          width: 1280
          height: 720
          fps: 5
        objects:
          track:
            - person
        zones:
          porch:
            coordinates: 220,720,420,420,980,420,1180,720

    이렇게 하면 화면 전체가 아니라, 실제로 사람이 서거나 지나가는 구역에 더 집중하게 됩니다. 물론 좌표는 직접 화면 보고 잡아야 해서 약간 귀찮습니다. 저도 처음엔 점 몇 개 찍는 게 뭐가 어렵나 했는데, 은근히 감각이 필요합니다. 너무 빡빡하게 잡으면 사람이 프레임 가장자리로 들어올 때 이벤트를 놓칠 수 있거든요.

    또 하나는 FPS입니다. 많은 분이 높을수록 좋다고 생각하시는데, 홈랩 CCTV 객체 감지 목적이라면 무조건 그렇진 않습니다. 오히려 감지용 스트림은 적절한 수준으로 낮춰서 안정적으로 분석하게 하는 편이 나았습니다. 특히 CPU가 빠듯한 미니 PC나 홈서버에서는 더 체감됐습니다.

    실무 느낌으로 정리한 튜닝 우선순위

    • 1순위: 카메라 각도와 불필요한 배경 제거
    • 2순위: 사람/차량처럼 필요한 객체만 추적
    • 3순위: 현관, 주차 구역 등 존 설정
    • 4순위: detect 해상도와 FPS 조정
    • 5순위: 이벤트 로그 보고 재조정

    6. ⚠️ 실제로 겪은 트러블슈팅

    이 부분은 정말 중요합니다. 설정 예시만 복붙하면 끝날 것 같지만, 현실은 늘 다르거든요. 제가 삽질했던 지점들을 정리해보겠습니다.

    1) 밤에 벌레가 사람처럼 잡히는 문제

    적외선 조명이 강한 카메라는 렌즈 앞 벌레가 크게 부각됩니다. 이 경우 소프트웨어만으로 100% 해결은 어렵습니다. 저는 카메라 위치를 조금 옮기고, 조명이 벽을 과하게 비추지 않게 조정하니 확실히 줄었습니다. 보안 카메라 최적화는 설정 파일 안에서만 일어나지 않더라고요.

    2) 비 오는 날 반사광 이벤트 폭증

    주차장 바닥이 젖으면 차량 불빛이 넓게 퍼집니다. 이때 화면 하단 반사 구역을 존 밖으로 빼거나, 실제 진입 경로만 존으로 남겨두는 식으로 정리했습니다. 이건 예상보다 효과가 컸습니다.

    3) RTSP 스트림 품질이 들쭉날쭉한 문제

    와이파이 구간이 불안정하면 감지 자체가 흔들립니다. 처음엔 객체 감지 모델을 의심했는데, 결국 네트워크 품질 이슈였습니다. 가능하면 고정 배선이나 안정적인 AP 구성이 먼저입니다.

    4) 화면은 넓은데 정작 대상은 너무 작게 나오는 문제

    한 화면에 마당 전체, 담장, 도로까지 다 넣으면 보기엔 시원합니다. 그런데 감지 정확도는 떨어질 수 있습니다. 사람 객체가 너무 작게 잡히면 분류가 불리해지거든요. 저는 차라리 카메라 역할을 나눠서 넓게 보는 카메라와 좁게 보는 카메라를 분리했습니다.

    문제 증상 해결 방향
    벌레 오탐 야간에 작은 물체가 크게 감지됨 카메라 위치, IR 반사, 구도 조정
    반사광 비 오는 날 이벤트 급증 존 축소, 반사 영역 제외
    불안정한 스트림 감지 누락, 프레임 깨짐 네트워크 안정화
    너무 넓은 화각 대상이 작아져 분류 어려움 카메라 역할 분리

    7. 검증: 어떤 기준으로 결과를 확인했는가

    최적화는 느낌으로 하면 끝이 없습니다. 저는 최소 3일 이상 로그를 보고, 같은 시간대 기준으로 비교했습니다. 예를 들어 새벽 1시부터 5시까지 이벤트 수가 얼마나 줄었는지, 실제 사람 방문 이벤트는 놓치지 않았는지를 같이 봤습니다.

    1. 최적화 전 이벤트 수를 대략 기록합니다.
    2. 존과 객체 필터를 바꾼 뒤 2~3일 관찰합니다.
    3. 오탐과 실제 이벤트를 분리해서 확인합니다.
    4. 놓친 감지가 있으면 구도 또는 존을 다시 완화합니다.

    제가 직접 해보니 가장 좋은 결과는 “이벤트 수가 적은 상태”가 아니라 의미 없는 이벤트는 줄고, 확인해야 할 이벤트는 남는 상태였습니다. 이 균형이 정말 중요합니다. 오탐 감소만 너무 밀어붙이면 진짜 사람이 지나갔는데도 안 잡히는 상황이 생길 수 있습니다.

    Frigate AI NVR 최적화 전후 오탐 감소 결과 대시보드

    최적화 전후의 이벤트 분포, 시간대별 감지 빈도, 실제 유효 이벤트 비율을 비교하는 결과 시각화 이미지입니다.

    docker logs frigate --tail 100
    curl http://localhost:5000/

    로그를 볼 때는 에러만 찾지 말고, 감지가 몰리는 시간대와 카메라를 함께 보는 게 좋습니다. 특정 카메라만 유독 시끄럽다면 소프트웨어보다 설치 위치 문제일 가능성이 큽니다.

    8. 정리와 다음 단계

    Frigate AI NVR를 홈랩 CCTV에 붙여서 오탐 감소를 시도해 보면, 결국 답은 거창한 데 있지 않았습니다. 카메라가 무엇을 보고 있는지, 어떤 객체만 추적할지, 어느 구역만 의미 있게 볼지. 이 세 가지를 정리하니 체감이 확 오더라고요. 드디어 됐다! 싶은 순간이 있었습니다.

    정리하면 이렇습니다.

    • Frigate AI NVR는 모션 감지보다 의미 있는 이벤트 정리에 강점이 있습니다.
    • 홈랩 CCTV에서는 카메라 각도와 존 설정이 오탐 감소에 가장 큰 영향을 줍니다.
    • 객체 감지는 많이 잡는 것보다, 필요한 것만 정확히 잡게 만드는 쪽이 중요합니다.
    • 보안 카메라 최적화는 소프트웨어와 설치 환경을 같이 봐야 효과가 납니다.

    혹시 지금 알림 피로가 심한 상태라면, 제일 먼저 카메라 한 대만 골라서 테스트해 보세요. 전체를 한 번에 손대면 금방 복잡해집니다. 다음 글에서는 Frigate AI NVR와 Home Assistant 연동, 그리고 이벤트 자동화 흐름도 다뤄볼 예정입니다. 이전 글에서 홈랩 네트워크 분리와 저장소 구성 얘기를 보셨다면, 이번 최적화와 연결해서 보시면 더 이해가 쉬우실 겁니다.

    Frigate AI NVR 오탐 감소 체크리스트와 최적화 요약 인포그래픽

    카메라 각도, 존 설정, 객체 필터, 네트워크 안정화 등 핵심 체크포인트를 한 장으로 정리한 요약 이미지입니다.

    자주 묻는 질문

    Frigate AI NVR를 쓰면 오탐이 완전히 없어지나요?

    아닙니다. 다만 의미 없는 이벤트를 줄이고, 확인할 가치가 있는 이벤트 비율을 높이는 데 큰 도움이 됩니다.

    객체 감지는 무조건 많은 클래스를 켜는 게 좋나요?

    아닙니다. 목적이 현관 감시라면 사람 중심으로, 주차 감시라면 차량 중심으로 좁히는 편이 관리가 쉽습니다.

    설정만 만지면 해결되나요?

    경험상 절반만 맞습니다. 카메라 위치, 조명, 반사, 네트워크 상태까지 같이 봐야 제대로 정리됩니다.