Este repositorio implementa un motor de búsqueda de imágenes sobre fotografías locales impulsado por el modelo CLIP. Es sorprendentemente preciso y es capaz de encontrar imágenes en consultas complejas. Para obtener más información, consulte la publicación del blog Medium aquí.
La funcionalidad adicional de clasificar imágenes según las personas retratadas se implementa con la biblioteca face_recognition
. También hay disponibles varios filtros que le permitirán encontrar fotos de su grupo, capturas de pantalla, etc.
En un entorno virtual Python 3.8+, instale desde PIP o desde el código fuente:
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
Solución de problemas: si se encuentran problemas al crear ruedas para dlib durante la instalación de face_recognition, asegúrese de instalar el paquete python3.8-dev
(respectivamente python3.x-dev
) y recrear el entorno virtual desde cero con el comando mencionado anteriormente una vez que esté instalado.
Actualmente, el uso es el siguiente. La biblioteca primero calcula las incrustaciones de todas las imágenes una por una y las almacena en un diccionario seleccionado para futuras consultas. Para calcular y almacenar información sobre las personas en la imagen, habilite el indicador include_faces
(tenga en cuenta que hace que el proceso de indexación sea hasta 10 veces más lento).
from image_searcher import Search
searcher = Search ( image_dir_path = "/home/manu/perso/ImageSearcher/data/" ,
traverse = True ,
include_faces = False )
Una vez realizado este proceso una vez, a través de Python, se utiliza la biblioteca como tal:
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 )
Agregar etiquetas al final de la consulta (ejemplo: A bird singing #photo
) filtrará la búsqueda según la lista de etiquetas. Las etiquetas admitidas por el momento son:
Por venir está el apoyo a:
Después de haber indexado las imágenes de interés, se puede utilizar una API Flask para cargar modelos una vez y luego buscar de manera eficiente.
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 ))
Un proceso gunicorn también se puede iniciar localmente con:
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
Nota: Adapte el parámetro de tiempo de espera (en segundos) si se están indexando/
Abriendo en un navegador la página web con el motor de búsqueda de demostración search.html
.
A través del punto final API en línea: http://127.0.0.1:5000/get_best_images?q=a+photo+of+a+bird
En 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" ])
El uso de esta herramienta con fotos de vacaciones o archivos de fotos de Messenger y Whatsapp permite redescubrir fotos antiguas y es excelente para localizar fotos perdidas hace mucho tiempo.
Ejecute las pruebas con
python -m unittest
y pelusa con:
pylint image_searcher
Este repositorio es un trabajo en progreso que se inició recientemente. Tal como está, calcula alrededor de 10 imágenes por segundo durante la fase de indexación inicial y luego es casi instantáneo durante la fase de consulta.
Se aceptan solicitudes de funciones y contribuciones. ¡También agradeceríamos mucho las mejoras en la interfaz de búsqueda web!
Simplifique y robustezca la instanciación de la clase de búsqueda:
Velocidad:
Características:
Incrustar archivos:
Interfaz:
Despliegue: