Shotit ist eine auf TV und Film zugeschnittene Screenshot-zu-Video-Suchmaschine, die blitzschnell und recheneffizient ist.
Docker Compose ist erforderlich. Bitte installieren Sie es zuerst.
Mindestarbeitslast: 2v16G, 4v32G bevorzugt.
git clone https://github.com/shotit/shotit.git
cd shotit
.env.example
nach .env
.env
wie beim ersten Mal entsprechend Ihrem Setup.milvus.yaml.example
nach milvus.yaml
milvus.yaml
entsprechend Ihrem Setup, wie es zum ersten Mal der Fall ist.Erstellen Sie diese erforderlichen Ordner.
mkdir -p volumes/shotit-hash
mkdir -p volumes/shotit-incoming
mkdir -p volumes/shotit-media
mkdir -p volumes/mycores
mkdir -p volumes/mysql
Setzen Sie die Benutzer- und Gruppeninformationen von mycores
auf 8983, erforderlich für liresolr
.
sudo chown 8983:8983 volumes/mycores
Rufen Sie dann die Docker-Compose-Dienste auf.
(Windows or Mac):
docker compose up -d
(Linux):
docker-compose up -d
PS: Die Datei docker-compose.yml ruft Docker-Bilder von GitHub ab. Wenn Sie Dockerhub bevorzugen, verwenden Sie stattdessen die folgenden Befehle.
(Windows or Mac):
docker compose -f docker-hub-compose.yml up -d
(Linux):
docker-compose -f docker-hub-compose.yml up -d
Sobald der Cluster bereit ist, können Sie Ihre Videodateien zum Eingangsordner hinzufügen. Nehmen Sie als Beispiel Blenders Big Buck Bunny, dessen imdb-Tag tt1254207 lautet. Der Pfad sollte sein:
./volumes/shotit-incoming/tt1254207/Big_Buck_Bunny.mp4
Starten Sie shotit-worker-watcher
neu, falls die Änderung Ihrer Dateien nicht erkannt wird.
docker restart shotit-worker-watcher
Wenn shotit-worker-watcher
das Vorhandensein von Videodateien im eingehenden Ordner erkennt, beginnt er mit dem Hochladen der Videos auf den Objektspeicher von shotit-media
. Nach dem Hochladen werden die Videos entfernt, dann erstellt shotit-worker-hasher
einen Hash und shotit-worker-loader
lädt den Hash in die Vektordatenbank. Verwenden Sie den folgenden Befehl, um festzustellen, ob der Indexvorgang abgeschlossen ist:
docker logs -f -n 100 shotit-worker-loader
Wenn der Indexvorgang abgeschlossen ist, werden Sie das Protokoll Loaded tt1254207/Big_Buck_Bunny.mp4
bemerken und Sie können die Videos direkt über die unten stehende URL per Screenshot durchsuchen.
GET http://127.0.0.1:3311/search?url=https://i.ibb.co/KGwVkqy/big-buck-bunny-10.png
Antwort:
{
"frameCount": 0,
"error": "",
"result": [
{
"imdb": "tt1254207",
"filename": "Big_Buck_Bunny.mp4",
"episode": null,
"duration": 596.4169921875,
"from": 473.75,
"to": 479.17,
"similarity": 0.9992420673370361,
"video": "http://127.0.0.1:3312/video/tt1254207/Big%20Buck%20Bunny.mp4?t=476.46000000000004&now=1682985600&token=kc64vEWHPMsvu54Fpl1BrR7wz8",
"image": "http://127.0.0.1:3312/image/tt1254207/Big%20Buck%20Bunny.mp4.jpg?t=476.46000000000004&now=1682985600&token=K0qxDPHhoviiexOyEvS9qHRim4"
}
]
}
Glückwunsch! Sie haben Ihre shotit
Suchmaschine erfolgreich bereitgestellt.
Hinweis: Der erste API-Aufruf sollte länger dauern, da Shotit den Hash zuerst vollständig in den RAM laden muss.
Wong, L. (2024). Shotit: recheneffiziente Bild-zu-Video-Suchmaschine für die Cloud. ArXiv. /abs/2404.12169
Die vollständige Dokumentation finden Sie hier:
Shotit
besteht aus diesen Docker-Bildern.
Docker-Image | Docker CI-Build | Bildgröße |
---|---|---|
Shotit-API | ||
Shotit-Medien | ||
Shotit-Worker-Watcher | ||
Shotit-Worker-Hasher | ||
Shotit-Worker-Loader | ||
Shotit-Worker-Sucher | ||
Shotit-Sorter | ||
liresolr | ||
Minio | ||
usw | ||
mariadb | ||
Administrator | ||
redis | ||
milvus-standalone |
Datensatz | Episodennummer | Vektorvolumen | Suchzeit |
---|---|---|---|
Blender Open Movie | 15 | 55.677 | innerhalb von 5s |
Proprietärer Genre-Datensatz | 3.734 | 53.339.309 | innerhalb von 5s |
https://shotit.github.io/shotit-frontend/demo
Shotit
übernimmt maßgeblich sein Systemdesignmuster von Trace.moe. Die Vision von Shotit
ist es, die Screenshot-zu-Video-Suchmaschine genreneutral, benutzerfreundlich, recheneffizient und blitzschnell zu machen.
Siehe Beitragsleitfaden.
Apache-2.0