이미지와 유사한 엔진입니다.
웹 응용 프로그램으로 데이터베이스에서 유사한 이미지를 검색 할 수 있습니다.
기본 아이디어는 데이터 일관성을 유지하면서 언제든지 이미지를 삭제하거나 추가 할 수 있다는 것입니다. 유용한 기능도 구현됩니다. 요청에 따라 유사한 이미지 검색 (예 : 유사한 이미지 찾기, 래브라도 인 사람들 중에서 만 검색)
현재 사용 중입니다.
img2vec_pytorch 이미지 기능 추출을위한 Alexnet 주변의 래퍼 (https://github.com/christiansafka/img2vec)CUBE 확장 기능이있는 postgeSQL ; 벡터는 매우 크기 때문에 인덱스를 만들 수 없지만 Postgres는 JSON 필드에서도 데이터를 쿼리 할 수 있습니다. 마지막 버전에서는 hnswlib 사용했습니다. 더 빠르지 만 Postgres만큼 유연하지는 않습니다 ( 'HNSW'브랜치에서 확인할 수 있음).
docker-compose build
docker-compose up 요구 사항 : postgesql; docker '/postgres/dockerfile'에서 Postgres를 실행하는 것이 더 간단합니다. 그렇지 않으면 Dockerfile의 큐브 확장 (Dockerfile 예 : PG_USER , PG_DATABASE , PG_PASSWORD 매개 변수를 지정해야합니다 settings/env
virtualenv venv --python=python3.6
source venv/bin/activate
pip install -r requirements.txt
uvicorn run:app --host 0.0.0.0 --port 8001앱은 두 경우 모두 0.0.0.0:8001에서 사용할 수 있습니다
모든 핸들러는 0.0.0.0:8001/docs에서 사용할 수 있습니다
POST /image 데이터베이스에 이미지 추가
파이썬 요청
import requests
r = requests . post (
url = 'http://0.0.0.0:8001/image' ,
files = { 'image' : open ( 'image_path' , 'rb' )}
)컬
curl -X POST "http://0.0.0.0:8001/image"
-H "Content-Type: multipart/form-data" -F "image=@{image_path};type=image/jpeg"
GET /image/{id} id별로 이미지 다운로드
파이썬 요청
import requests
r = requests . get ( url = 'http://0.0.0.0:8001/image/{id}' )
with open ( 'output_file_name' , 'wb' ) as f :
f . write ( r . content )컬
curl -X GET "http://0.0.0.0:8001/image/{id}" --output {output_file_name}
DELETE /image/{id} id로 이미지를 삭제합니다
파이썬 요청
import requests
r = requests . delete ( url = 'http://0.0.0.0:8001/image/{id}' )컬
curl -X DELETE "http://0.0.0.0:8001/image/{id}"
POST /image/search?k={k} k 가장 가까운 이미지 검색
가장 복잡한 핸들러. 가장 가까운 이미지를 검색 할 수 있거나 모든 데이터베이스를 검색하거나 특정 이미지 (예 : '아일랜드 테리어'만) 만 선택할 수 있습니다. 이러한 선택의 경우 JSON 필드 ( POST data/{id} 참조)로 이미지에 데이터를 추가해야합니다. 또한 동일한 방식으로 '이름'또는 '경로'로 이미지를 선택할 수도 있습니다. 이러한 쿼리의 경우 유효한 DICT를 Params로 전달합니다
파이썬 요청
import json
import requests
r = requests . post (
url = 'http://0.0.0.0:8001/image/search' ,
files = {
'image' : open ( 'image_path' , 'rb' ),
},
params = { 'k' : 3 , 'query' : json . dumps ({ 'dog_type' : 'Irish_terrier' })}
)컬
curl -X POST "http://0.0.0.0:8001/image/search?k={k}&query=%7B%22dog_type%22%3A%20%22Irish_terrier%22%7D"
-H "accept: application/json"" -H "Content-Type: multipart/form-data" -F "image=@{image_path};type=image/jpeg"
POST /data/{id} ID별로 이미지에 대한 추가 정보 추가
JSON 필드에서 모든 이미지 데이터를 전달하십시오
파이썬 요청
import requests
r = requests . post (
url = 'http://0.0.0.0:8001/data/{id}' ,
json = { 'dog_type' : 'Irish_terrier' }
)컬
curl -X POST "http://0.0.0.0:8001/data/{id}"
-H "Content-Type: application/json" -d "{"dog_type":"Irish_terrier"}"
GET /data/{id} ID (vector 및 일부 추가 정보)로 이미지에 대한 데이터 가져옵니다.
파이썬 요청
import requests
r = requests . get ( url = 'http://0.0.0.0:8001/data/{id}' )컬
curl -X GET "http://0.0.0.0:8001/data/{id}"
POST /data/query 별 이미지 데이터를 가져옵니다
데이터를 쿼리하여 이미지를 검색 할 수 있지만 ( POST /image/search 참조) JSON 필드에서 쿼리 데이터를 전달해야합니다.
파이썬 요청
import requests
r = requests . post (
url = 'http://0.0.0.0:8001/data/query' ,
json = { 'dog_type' : 'Irish_terrier' }
)컬
curl -X POST "http://0.0.0.0:8001/data/query" -H "accept: application/json"
-H "Content-Type: application/json" -d "{"dog_type":"Irish_terrier"}"