# Gemini의 비디오 임베딩 기능을 활용한 초단위 이하 의미 기반 영상 검색 도구 SentrySearch

> Clean Markdown view of GeekNews topic #27851. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=27851](https://news.hada.io/topic?id=27851)
- GeekNews Markdown: [https://news.hada.io/topic/27851.md](https://news.hada.io/topic/27851.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2026-03-26T04:33:09+09:00
- Updated: 2026-03-26T04:33:09+09:00
- Original source: [github.com/ssrajadh](https://github.com/ssrajadh/sentrysearch)
- Points: 2
- Comments: 1

## Topic Body

- **대시캠 등 영상 파일에서 자연어로 장면을 검색**해 해당 구간을 자동으로 잘라내는 **의미 기반 검색 시스템**
- **Google Gemini Embedding 2** 모델을 이용해 **비디오 자체를 벡터로 임베딩**하고, **ChromaDB** 에 저장해 텍스트 쿼리와 직접 비교
- **ffmpeg** 로 영상을 **겹치는 청크 단위로 분할**해 임베딩하며, 검색 시 가장 유사한 구간을 **하위 초 단위 속도**로 반환
- **전처리와 정지 프레임 스킵** 기능으로 API 호출 비용을 줄이고, 1시간 영상 인덱싱에 약 **$2.84** 수준의 비용 발생
- **Gemini Embedding 2의 비디오 직접 임베딩 기능**을 활용해 자막 생성 없이도 수시간 분량의 영상에서 빠른 의미 검색을 가능하게 함

---

### 개요
- **SentrySearch**는 **대시캠 영상에서 의미 기반 검색(semantic search)** 을 수행하는 도구로, 사용자가 자연어로 검색어를 입력하면 해당 장면이 포함된 **잘린 클립(trimmed clip)** 을 반환함
- **Google Gemini Embedding 2** 모델을 이용해 **영상 자체를 벡터로 임베딩**하고, 이를 **ChromaDB** 로컬 데이터베이스에 저장함
- 텍스트 쿼리를 동일한 벡터 공간에 임베딩해 가장 유사한 영상 조각을 찾아냄
- 검색 결과는 원본 파일에서 자동으로 잘라 저장되며, **하위 초 단위(sub-second)** 의 검색 속도를 제공함

### 작동 방식
- 영상은 **겹치는 구간(overlapping chunks)** 으로 분할되어 각 구간이 Gemini Embedding 모델을 통해 직접 임베딩됨
- 각 임베딩 벡터는 **ChromaDB** 에 저장되며, 검색 시 텍스트 쿼리가 동일한 벡터 공간으로 변환되어 매칭됨
- 가장 높은 유사도를 가진 구간이 원본 영상에서 자동으로 잘려 클립으로 저장됨
- **ffmpeg** 가 영상 분할과 트리밍에 사용되며, 시스템에 설치되어 있지 않으면 `imageio-ffmpeg` 가 자동으로 사용됨

### 설치 및 초기 설정
- Python 3.10 이상 환경에서 다음 명령으로 설치 가능
  - `git clone` 후 `pip install -e .`
- `sentrysearch init` 명령으로 **Gemini API 키**를 설정하고 `.env` 파일에 저장
  - 키 유효성 검증을 위해 테스트 임베딩을 수행함
- 수동 설정 시 `.env.example`을 복사해 직접 API 키를 추가할 수 있음

### 주요 명령어 및 옵션
- ## `index`
  - 지정된 폴더 내 `.mp4` 파일을 재귀적으로 스캔해 인덱싱 수행
  - 각 파일은 여러 **chunk** 로 분할되어 임베딩됨
  - 옵션
    - `--chunk-duration` : 청크 길이(초 단위)
    - `--overlap` : 청크 간 겹침 길이
    - `--no-preprocess` : 다운스케일링 및 프레임 축소 생략
    - `--target-resolution` : 전처리 시 목표 해상도(기본 480p)
    - `--target-fps` : 전처리 시 목표 프레임 속도(기본 5fps)
    - `--no-skip-still` : 정지 프레임 구간도 모두 임베딩
- ## `search`
  - 예시: `sentrysearch search "red truck running a stop sign"`
  - 결과는 유사도 점수와 함께 표시되며, 최고 결과는 자동으로 잘려 저장됨
  - 유사도 점수가 **기본 임계값(0.35)** 이하일 경우 확인 프롬프트가 표시됨
  - 옵션
    - `--results N` : 표시할 결과 수
    - `--output-dir DIR` : 클립 저장 경로
    - `--no-trim` : 자동 트리밍 비활성화
    - `--threshold` : 유사도 임계값 조정
- ## `stats`
  - 인덱싱된 총 청크 수와 원본 파일 수를 표시
- ## `--verbose`
  - 임베딩 차원, API 응답 시간, 유사도 점수 등 디버그 정보를 출력

### 기술적 배경
- **Gemini Embedding 2**는 **비디오를 직접 임베딩**할 수 있으며, 텍스트 쿼리와 동일한 **768차원 벡터 공간**에서 비교 가능
- 별도의 **자막 생성이나 프레임 캡션화 과정이 필요 없음**
- 예를 들어 “red truck at a stop sign”이라는 텍스트 쿼리는 30초짜리 영상 클립과 직접 비교 가능
- 이 기능으로 **수 시간 분량의 영상에서도 초 단위 이하의 의미 검색**이 가능함

### 비용 구조
- 기본 설정(30초 청크, 5초 겹침) 기준으로 **1시간 영상 인덱싱 비용은 약 $2.84**
  - Gemini API는 업로드된 영상에서 초당 1프레임만 처리함
  - 전처리 과정은 480p, 5fps로 다운스케일링하여 **전송 속도 최적화** 및 **타임아웃 방지** 목적
- ## 비용 절감 최적화
  - **전처리(preprocessing)** : 업로드 크기와 전송 시간을 줄임
  - **정지 프레임 스킵(still-frame skipping)** : 시각적 변화가 없는 구간은 임베딩 생략
    - 주차 중 장시간 녹화된 영상에서 효과적
  - 검색 쿼리는 텍스트 임베딩만 수행하므로 비용이 거의 없음
  - 추가 조정 옵션
  - `--chunk-duration`, `--overlap` : API 호출 횟수 조절
  - `--no-skip-still` : 모든 청크 임베딩
  - `--target-resolution`, `--target-fps` : 전처리 품질 조정
  - `--no-preprocess` : 원본 청크 그대로 전송

### 한계 및 향후 개선
- **정지 프레임 감지**는 JPEG 파일 크기 비교 기반의 휴리스틱 방식으로, 미세한 움직임을 놓치거나 정지 구간을 잘못 포함할 수 있음
- **검색 품질은 청크 경계에 의존**, 이벤트가 두 청크에 걸칠 경우 완벽히 포착되지 않을 수 있음
  - 향후 **장면 감지(scene detection)** 기반 청크 분할로 개선 가능
- **Gemini Embedding 2**는 현재 **프리뷰 단계**로, API 동작 및 가격이 변경될 수 있음

### 호환성 및 요구사항
- `.mp4` 형식의 모든 영상 파일에서 작동하며, **Tesla Sentry Mode** 영상에 한정되지 않음
- 폴더 구조와 관계없이 모든 `.mp4` 파일을 재귀적으로 탐색
- 요구사항
  - Python 3.10 이상
  - `ffmpeg` 설치 필요 (또는 `imageio-ffmpeg` 자동 사용)
  - **Gemini API 키** 필요 (무료 키 발급 가능: [aistudio.google.com/apikey](https://aistudio.google.com/apikey))

## Comments



### Comment 53849

- Author: neo
- Created: 2026-03-26T04:33:09+09:00
- Points: 1

###### [Hacker News 의견들](https://news.ycombinator.com/item?id=47503617) 
- 이 구현 방식이 정말 멋지다고 느껴짐. 여전히 **임베딩(embeddings)** 은 마법처럼 느껴지는 부분이 있음  
  하지만 이런 기술이 현실에서 **감시 사회**로 이어질 가능성이 가장 걱정스러움  
  지금은 수많은 카메라가 있지만, 실제로 모든 영상을 사람이 다 보는 건 불가능하기 때문에 어느 정도의 익명성과 사생활이 유지되고 있음  
  그러나 AI가 모든 영상을 실시간으로 분석하고 특정 인물이나 행동을 자연어로 탐지할 수 있게 되면, **전면 감시(panopticon)** 가 현실이 될 수 있음  
  범죄 탐지나 낙상 감지 같은 긍정적인 활용도 있겠지만, 규제가 없다면 그 결과는 매우 위험할 것임
  - 지금 이게 실제로 **구현 중**임. 시의회 회의에서 ALPR 카메라 계약을 논의하는 걸 들었는데, 거기서 [Fusus](https://www.axon.com/products/axon-fusus)라는 대시보드 제품을 알게 됨  
    다양한 카메라 시스템과 ALPR, 경보를 통합하고, **자연어로 영상 질의**가 가능하다고 함  
    앞으로는 시민이 설치한 카메라도 통합될 예정이라 함. 결국 이게 [Citizen 앱](https://citizen.com/) 같은 서비스와 연결되면, 이웃집 카메라가 경찰 시스템에 바로 연결되는 세상이 올 수도 있음  
    정말 걱정스러운 방향임
  - 지금은 비용($2.50/시간)과 **지연 시간(latency)** 때문에 실시간 인덱싱이 어렵지만, 머지않아 가능해질 것임  
    그래서 나는 **로컬 모델**로 이런 걸 처리해서 영상이 외부로 나가지 않게 하는 게 중요하다고 생각함  
    하지만 전체적인 기술의 방향성은 신중히 고민해야 함
  - 대부분의 카메라는 한 조직이 전부 접근할 수 없고, 정부가 보려면 **영장(subpoena)** 이 필요함  
    문제는 Flock이나 Ring처럼 대규모로 배포되거나, 한 회사가 모든 영상에 접근할 수 있을 때 생김
  - 기술적으로는 이미 **전면 감시 체계**가 가능함. 단지 지금은 비용이 많이 들 뿐임
  - 이런 비전 인식 모듈이 **저전력 ASIC**에서도 돌아가게 되면, 드론이 끔찍한 무기가 될 수 있음

- **멀티모달 AI**가 광고 탐지와 광고 삽입 간의 **무기 경쟁**을 불러올 것 같음  
  예전에 Gemini 이전 모델로 AI 광고 제거를 실험했는데, 이번 기술은 훨씬 강력해서 광고를 즉시 식별하고 음소거하거나 제거할 수 있을 듯함  
  관련 실험을 [여기서 정리함](https://notes.npilk.com/experiments-with-ai-adblock)
  - 흥미로운 글이었음. 어떤 사람이 AI 기반 웹 검색의 미래를 그렸는데, 결론은 밝지 않았음  
    결국 광고는 사라지지 않을 것임. AI 제공자가 광고 화이트리스트를 받거나, 더 나쁘게는 AI가 직접 **광고 제품을 홍보**하게 될 수도 있음

- 몇 달 전 **Rexing 대시캠**을 샀는데, 영상 접근이 너무 불편해서 직접 시스템을 만들어보려 함  
  SD카드를 뽑지 않고도 영상을 탐색하고 다운로드할 수 있게 하려는 중임  
  녹화 영상을 스크롤하다가 ‘이 장면을 **자연어로 검색**할 수 있으면 좋겠다’고 생각했는데, 이번 프로젝트를 보니 바로 적용하고 싶어짐  
  공유해줘서 고마움

- 이 기술을 **영상 편집 소프트웨어**에 적용할 수 있을까 궁금함  
  예를 들어 Premiere 플러그인에서 “고양이가 나오는 장면을 모두 제거해줘”라고 하면 자동으로 **EDL(Edit Decision List)** 을 만들어주는 식으로
  - 좋은 아이디어임. 나도 이걸 다음 단계로 생각하고 있었음  
    SentrySearch는 이미 자연어 질의에 대해 정확한 in/out 타임스탬프를 반환하고 ffmpeg로 자동 트리밍함  
    이걸 EDL이나 Premiere 플러그인으로 확장하는 건 자연스러운 진화임  
    나는 Premiere 전문가는 아니지만, 누군가 **EDL 익스포터**나 플러그인을 시도한다면 PR 리뷰와 병합을 도와줄 의향이 있음  
    시작하면 GitHub 이슈로 알려주면 좋겠음

- 이게 **로컬 모델**에서도 작동할 수 있는지 궁금함

- 대시캠이 아니라 **홈 모니터링** 용도로도 흥미로움
  - 대부분의 홈 모니터링은 **움직임 감지 시에만 녹화**하므로 이미 검색 공간이 많이 줄어듦  
    앞뒤로 빠르게 넘기면 문 앞에 누가 다가오는 30초 정도는 쉽게 찾을 수 있음
  - 이런 기능은 앞으로 모든 **홈 보안 시스템의 필수 기능**이 될 것 같음  
    예전에 고양이가 문이 열렸을 때 밖으로 나갔는지 확인하려고 몇 시간씩 영상을 돌려봤는데, 사실은 집 안에 숨어 있었음

- 나도 **임베딩 프로젝트**를 진행 중인데, 아직 프로토타입 단계임  
  내 경우 Gemini는 아니고, **게임용 연결 퍼즐(reverse connections)** 을 만드는 중임  
  관련 내용은 [여기서 볼 수 있음](https://collections.lwarfield.dev)

- “영상 조각이 대부분 정지 프레임인지 확인”하는 코드 부분을 봤는데, ffmpeg의 **select**와 **scene** 파라미터를 조합하면 자동으로 처리할 수 있을 것 같음

- 나는 **콘텐츠/비디오 인텔리전스** 분야에서 일함  
  Gemini는 이런 **사용 사례**에 정말 잘 맞는 도구임

- 데모에서 “뒤에 자전거 거치대가 달린 차가 밤에 나를 끼어들었을 때”를 검색하는 걸 보고 웃었음  
  아마 그 차를 찾는 게 이 프로젝트를 만든 **진짜 동기**였을 듯함
  - 틀린 말은 아닌 듯함
