這是圖像的搜索類似引擎。
這是一個Web應用程序,允許您在數據庫中搜索類似的圖像。
基本想法是,您可以隨時刪除或添加圖像,同時保持數據一致性。還實現了一個有用的功能:通過請求搜索類似的圖像(例如,查找相似的圖像,但僅在那些是拉布拉多的人中搜索)
我目前正在使用:
img2vec_pytorch圖像提取(https://github.com/christiansafka/img2vec)周圍的Alexnet包裝器CUBE擴展的postgeSQL ;向量很大,所以我無法構建索引,但是Postgres允許查詢數據,即使在JSON字段中在上一個版本中,我使用了hnswlib速度更快,但不像Postgres那樣靈活(您可以在“ HNSW”分支上檢查一下)
docker-compose build
docker-compose up要求:Postgesql;在docker'/postgres/dockerfile'中運行Postgres會更簡單,否則您必須重新編譯Cube擴展名(例如在Dockerfile中)也指定PG_USER , PG_DATABASE , PG_PASSWORD params 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將圖像添加到數據庫
Python請求
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下載圖像
Python請求
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刪除圖像
Python請求
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
Python請求
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字段中的所有圖像數據
Python請求
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獲取圖像數據(向量和一些其他信息)
Python請求
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字段中傳遞查詢數據
Python請求
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"}"