Dieses Repository implementiert eine Bildsuchmaschine für lokale Fotos, die auf dem CLIP-Modell basiert. Es ist überraschend präzise und kann bei komplexen Abfragen Bilder finden. Weitere Informationen finden Sie im Medium-Blogpost hier.
Die zusätzliche Funktionalität, Bilder abhängig von den abgebildeten Personen zu klassifizieren, wird mit der face_recognition
-Bibliothek implementiert. Es stehen auch mehrere Filter zur Verfügung, mit denen Sie Ihre Gruppenbilder, Screenshots usw. finden können.
Installieren Sie in einer virtuellen Umgebung mit Python 3.8+ entweder von PIP oder von der Quelle:
pip install image-searcher
pip install face_recognition # Optional to enable face features
pip install flask flask_cors # Optional to enable a flask api
pip install -r dev_requirements.txt
pip install face_recognition # Optional to enable face features
pip install flask flask_cors # Optional to enable a flask api
Fehlerbehebung: Wenn während der face_recognition-Installation Probleme beim Erstellen von Rädern für dlib auftreten, stellen Sie sicher, dass Sie das Paket python3.8-dev
(bzw. python3.x-dev
) installieren und die virtuelle Umgebung nach der Installation mit dem oben genannten Befehl von Grund auf neu erstellen.
Derzeit ist die Verwendung wie folgt. Die Bibliothek berechnet zunächst die Einbettungen aller Bilder einzeln und speichert sie zur weiteren Bezugnahme in einem ausgewählten Wörterbuch. Um Informationen über die Personen im Bild zu berechnen und zu speichern, aktivieren Sie das Flag include_faces
(beachten Sie, dass dadurch der Indexierungsprozess bis zu 10-mal langsamer wird).
from image_searcher import Search
searcher = Search ( image_dir_path = "/home/manu/perso/ImageSearcher/data/" ,
traverse = True ,
include_faces = False )
Sobald dieser Vorgang einmal über Python durchgeführt wurde, wird die Bibliothek wie folgt verwendet:
from image_searcher import Search
searcher = Search ( image_dir_path = "/home/manu/perso/ImageSearcher/data/" ,
traverse = True ,
include_faces = False )
# Option 1: Pythonic API
from PIL import Image
ranked_images = searcher . rank_images ( "A photo of a bird." , n = 5 )
for image in ranked_images :
Image . open ( image . image_path ). convert ( 'RGB' ). show ()
# Option 2: Launch Flask api from code
from image_searcher . api import run
run ( searcher = searcher )
Durch das Hinzufügen von Tags am Ende der Abfrage (Beispiel: A bird singing #photo
) wird die Suche basierend auf der Tag-Liste gefiltert. Derzeit unterstützte Tags sind:
Zukünftig gibt es Unterstützung für:
Nachdem die Bilder von Interesse indiziert wurden, kann eine Flask-API verwendet werden, um Modelle einmal zu laden und dann effizient zu durchsuchen.
image_dir_path : /home/manu/Downloads/facebook_logs/messages/inbox/
save_path : /home/manu/
traverse : true
include_faces : true
reindex : false
n : 42
port :
host :
debug :
threaded :
from image_searcher . api import run
# Option 1: Through a config file
run ( config_path = "path_to_config_file.yml" )
# Option 2: Through an instanciated Search object
from image_searcher import Search
run ( searcher = Search ( image_dir_path = "/home/manu/perso/ImageSearcher/data/" ,
traverse = True ,
include_faces = False ))
Ein Gunicorn-Prozess kann auch lokal gestartet werden mit:
gunicorn " api.run_flask_gunicorn:create_app('path_to_config_file.yml') "
--name image_searcher
--bind 0.0.0.0: ${GUNICORN_PORT :- 5000}
--worker-tmp-dir /dev/shm
--workers= ${GUNICORN_WORKERS :- 2}
--threads= ${GUNICORN_THREADS :- 4}
--worker-class=gthread
--log-level=info
--log-file ' - '
--timeout 30
Hinweis: Passen Sie den Timeout-Parameter (in Sekunden) an, wenn viele neue Bilder indiziert werden/
Durch Öffnen der Webseite mit der Demo-Suchmaschine search.html
in einem Browser.
Über den API-Endpunkt online: http://127.0.0.1:5000/get_best_images?q=a+photo+of+a+bird
In Python:
import requests
import json
import urllib . parse
query = "a photo of a bird"
r = requests . get ( f"http://127.0.0.1:5000/get_best_images?q= { urllib . parse . quote ( query ) } " )
print ( json . loads ( r . content )[ "results" ])
Die Verwendung dieses Tools mit Urlaubsfotos oder Messenger- und WhatsApp-Fotoarchiven führt zur Wiederentdeckung alter Fotos und eignet sich hervorragend zum Auffinden längst verlorener Fotos.
Führen Sie die Tests mit aus
python -m unittest
und fusseln mit:
pylint image_searcher
Dieses Repo ist eine laufende Arbeit, die kürzlich begonnen wurde. So wie es ist, berechnet es während der anfänglichen Indizierungsphase etwa 10 Bilder pro Sekunde und erfolgt dann während der Abfragephase nahezu augenblicklich.
Feature-Anfragen und Beiträge sind willkommen. Verbesserungen an der Such-Weboberfläche wären ebenfalls sehr willkommen!
Vereinfachen und stabilisieren Sie die Instanziierung der Suchklasse:
Geschwindigkeit:
Merkmale:
Einbetten von Dateien:
Frontend:
Einsatz: