이 저장소는 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용 휠을 구축하는 데 문제가 발생하는 경우 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
파이썬에서는:
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" ])
휴가 사진이나 메신저 및 Whatsapp 사진 아카이브와 함께 이 도구를 사용하면 오래된 사진을 재발견할 수 있으며 오랫동안 잃어버린 사진을 찾는 데 놀라운 효과가 있습니다.
다음을 사용하여 테스트를 실행하세요.
python -m unittest
그리고 다음을 사용하여 린트합니다.
pylint image_searcher
이 저장소는 최근에 시작된 진행 중인 작업입니다. 그대로 초기 인덱싱 단계에서 초당 약 10개의 이미지를 계산한 다음 쿼리 단계에서는 거의 즉각적으로 수행됩니다.
기능 요청 및 기여를 환영합니다. 검색 웹 인터페이스의 개선도 매우 높이 평가됩니다!
Search 클래스 인스턴스화를 단순화하고 강력하게 만듭니다.
속도:
특징:
파일 삽입:
프런트엔드:
전개: