該存儲庫在由 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 類別實例化:
速度:
特徵:
嵌入檔案:
前端:
部署: