동영상 검색 시스템 구축을 위한 4단계
이름에서 알 수 있듯이, 이미지로 동영상을 검색하는 것은 입력 이미지와 유사한 프레임을 포함하는 동영상을 저장소에서 검색하는 과정입니다. 핵심 단계 중 하나는 동영상을 임베딩으로 변환하는 것, 즉 키 프레임을 추출하고 그 특징을 벡터로 변환하는 것입니다. 이제, 일부 호기심 많은 독자들은 이미지로 동영상을 검색하는 것과 이미지로 이미지를 검색하는 것의 차이가 무엇인지 궁금해할 수 있습니다. 사실, 동영상에서 키 프레임을 검색하는 것은 이미지로 이미지를 검색하는 것과 동일합니다.
관심이 있다면 이전 글 Milvus x VGG: Building a Content-based Image Retrieval System을 참고할 수 있습니다.
시스템 overview2
다음 다이어그램은 이러한 동영상 검색 시스템의 일반적인 워크플로를 보여줍니다.
동영상 검색 시스템 워크플로.
동영상을 가져올 때, OpenCV 라이브러리를 사용하여 각 동영상을 프레임으로 자르고, 이미지 특징 추출 모델 VGG를 사용하여 키 프레임의 벡터를 추출한 다음, 추출된 벡터(임베딩)를 Milvus에 삽입합니다. 원본 동영상 저장에는 Minio를 사용하고, 동영상과 벡터 간의 상관관계 저장에는 Redis를 사용합니다.
동영상을 검색할 때, 동일한 VGG 모델을 사용하여 입력 이미지를 특징 벡터로 변환하고 Milvus에 삽입하여 가장 유사한 벡터를 찾습니다. 그런 다음 시스템은 Redis의 상관관계에 따라 인터페이스에서 Minio로부터 해당 동영상을 검색합니다.
데이터 준비
이 글에서는 동영상 검색을 위한 엔드투엔드 솔루션을 구축하는 데 Tumblr의 약 100,000개 GIF 파일을 샘플 데이터셋으로 사용합니다. 자체 동영상 저장소를 사용할 수도 있습니다.
배포
이 글에서 동영상 검색 시스템을 구축하기 위한 코드는 GitHub에 있습니다.
1단계: Docker 이미지 빌드.
동영상 검색 시스템에는 Milvus v0.7.1 docker, Redis docker, Minio docker, 프런트엔드 인터페이스 docker, 백엔드 API docker가 필요합니다. 프런트엔드 인터페이스 docker와 백엔드 API docker는 직접 빌드해야 하며, 나머지 세 docker는 Docker Hub에서 직접 가져올 수 있습니다.
# 동영상 검색 코드 가져오기
$ git clone -b 0.10.0 https://github.com/JackLCL/search-video-demo.git
# 프런트엔드 인터페이스 docker 및 api docker 이미지 빌드
$ cd search-video-demo & make all
2단계: 환경 구성.
여기서는 docker-compose.yml을 사용하여 위에서 언급한 다섯 개의 컨테이너를 관리합니다. docker-compose.yml의 구성은 다음 표를 참조하세요:
Docker compose 구성.
위 표의 IP 주소 192.168.1.38은 이 글에서 동영상 검색 시스템을 구축하기 위해 특별히 사용한 서버 주소입니다. 이를 귀하의 서버 주소로 업데이트해야 합니다.
Milvus, Redis, Minio용 저장 디렉터리를 수동으로 생성한 다음, docker-compose.yml에 해당 경로를 추가해야 합니다. 이 예시에서는 다음 디렉터리를 생성했습니다:
/mnt/redis/data /mnt/minio/data /mnt/milvus/db
docker-compose.yml에서 Milvus, Redis, Minio를 다음과 같이 구성할 수 있습니다:
Milvus, Redis, MinIO, Docker-compose 구성.
3단계: 시스템 시작.
수정된 docker-compose.yml을 사용하여 동영상 검색 시스템에서 사용할 다섯 개의 docker 컨테이너를 시작합니다:
$ docker-compose up -d
그런 다음 docker-compose ps를 실행하여 다섯 개의 docker 컨테이너가 제대로 시작되었는지 확인할 수 있습니다. 다음 스크린샷은 성공적으로 시작된 후의 일반적인 인터페이스를 보여줍니다.
성공적인 설정.
이제 데이터베이스에는 동영상이 없지만, 동영상 검색 시스템을 성공적으로 구축했습니다.
4단계: 동영상 가져오기.
시스템 리포지토리의 deploy 디렉터리에는 비디오를 가져오기 위한 스크립트인 import_data.py가 있습니다. 스크립트를 실행하려면 비디오 파일 경로와 가져오기 간격만 업데이트하면 됩니다.
비디오 경로 업데이트.
data_path: 가져올 비디오의 경로입니다.
time.sleep(0.5): 시스템이 비디오를 가져오는 간격입니다. 비디오 검색 시스템을 구축하는 데 사용하는 서버에는 96개의 CPU 코어가 있습니다. 따라서 간격을 0.5초로 설정하는 것이 좋습니다. 서버의 CPU 코어 수가 더 적다면 간격을 더 큰 값으로 설정하세요. 그렇지 않으면 가져오기 프로세스가 CPU에 부담을 주고 좀비 프로세스를 생성합니다.
import_data.py를 실행하여 비디오를 가져옵니다.
$ cd deploy
$ python3 import_data.py
비디오를 가져오고 나면, 나만의 비디오 검색 시스템이 모두 준비됩니다!
인터페이스 표시
브라우저를 열고 192.168.1.38:8001을 입력하면 아래와 같이 비디오 검색 시스템의 인터페이스가 표시됩니다.
비디오 검색 인터페이스.
오른쪽 상단의 기어 스위치를 전환하면 리포지토리의 모든 비디오를 볼 수 있습니다.
모든 비디오 보기.
왼쪽 상단의 업로드 상자를 클릭하여 대상 이미지를 입력합니다. 아래와 같이 시스템은 가장 유사한 프레임이 포함된 비디오를 반환합니다.
고양이 추천 시스템을 즐기세요.
다음으로, 저희 비디오 검색 시스템을 즐겨보세요!
직접 구축하기
이 글에서는 Milvus를 사용하여 이미지로 비디오를 검색하는 시스템을 구축했습니다. 이는 비정형 데이터 처리에서 Milvus의 적용 사례를 보여줍니다.
Milvus는 여러 딥러닝 프레임워크와 호환되며, 수십억 규모의 벡터에 대해 밀리초 단위의 검색을 가능하게 합니다. 더 많은 AI 시나리오에 Milvus를 자유롭게 활용해 보세요: https://github.com/milvus-io/milvus.
계속 읽기

A Few Notes from Databricks Data + AI Summit 2026: Why the Data Layer Matters Again
James Luan shares notes from Databricks Data + AI Summit 2026 on why production AI is pushing the data layer back to the center of infrastructure.

Introducing Zilliz CLI and Agent Skills for Zilliz Cloud
Manage your vector database from your terminal or AI coding agent. Zilliz CLI and Agent Skills work with Claude Code, Cursor, Codex, and Copilot.

Zilliz Cloud Audit Logs Goes GA: Security, Compliance, and Transparency at Scale
Zilliz Cloud Audit Logs are now GA, giving enterprises real-time visibility, compliance-ready trails, and stronger security across AWS, GCP, and Azure.



