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

GeekNews (AI) | | 🔬 연구
#chromadb #gemini #review #sentrysearch #영상 검색 #임베딩
원문 출처: GeekNews (AI) · Genesis Park에서 요약 및 분석

요약

대시캠 등 영상 파일에서 자연어로 장면을 검색해 해당 구간을 자동으로 잘라내는 의미 기반 검색 시스템 Google Gemini Embedding 2 모델을 이용해 비디오 자체를 벡터로 임베딩하고, ChromaDB 에 저장해 ...

본문

- 대시캠 등 영상 파일에서 자연어로 장면을 검색해 해당 구간을 자동으로 잘라내는 의미 기반 검색 시스템 - 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 파일을 재귀적으로 탐색 - 요구사항

Genesis Park 편집팀이 AI를 활용하여 작성한 분석입니다. 원문은 출처 링크를 통해 확인할 수 있습니다.

공유

관련 저널 읽기

전체 보기 →