该存储库在由 CLIP 模型支持的本地照片上实现了图像搜索引擎。它的精确度令人惊讶,并且能够根据复杂的查询找到图像。有关更多信息,请参阅此处的 Medium 博文。
根据所描绘的人对图片进行分类的附加功能是通过face_recognition
库实现的。还提供多种过滤器,使您能够找到您的团体照片、屏幕截图等...
在 Python 3.8+ 虚拟环境中,从 PIP 或源安装:
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
故障排除:如果在安装face_recognition期间遇到为dlib构建wheel的问题,请确保安装python3.8-dev
包(分别为python3.x-dev
),并在安装后使用上述命令从头开始重新创建虚拟环境。
目前,用法如下。该库首先逐一计算所有图像的嵌入,并将它们存储在选定的字典中以供进一步参考。要计算和存储有关图片中人物的信息,请启用include_faces
标志(请注意,这会使索引过程减慢 10 倍)。
from image_searcher import Search
searcher = Search ( image_dir_path = "/home/manu/perso/ImageSearcher/data/" ,
traverse = True ,
include_faces = False )
一旦这个过程完成一次,通过Python,该库就可以这样使用:
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 )
在查询末尾添加标签(例如: A bird singing #photo
)将根据标签列表过滤搜索。目前支持的标签有:
即将推出的支持:
对感兴趣的图像建立索引后,可以使用 Flask API 加载模型一次,然后进行高效搜索。
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 ))
还可以通过以下方式在本地启动 Gunicorn 进程:
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
注意:如果正在索引大量新图像/,请调整超时参数(以秒为单位)
通过在浏览器中使用演示搜索引擎search.html
打开网页。
通过在线API端点: http://127.0.0.1:5000/get_best_images?q=a+photo+of+a+bird
q=a+photo+of+a+bird
在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" ])
使用此工具处理度假照片或 Messenger 和 Whatsapp 照片档案可以重新发现旧照片,并且在查找长期丢失的照片方面效果惊人。
运行测试
python -m unittest
和 lint:
pylint image_searcher
该存储库是最近开始的一项正在进行的工作。事实上,它在初始索引阶段每秒计算大约 10 个图像,然后在查询阶段几乎是瞬时的。
欢迎功能请求和贡献。对搜索网络界面的改进也将不胜感激!
简化并增强 Search 类实例化:
速度:
特征:
嵌入文件:
前端:
部署: