这是图像的搜索类似引擎。
这是一个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"}"