É um mecanismo de pesquisa semelhante para imagens.
Este é um aplicativo da Web permite pesquisar imagens semelhantes no banco de dados.
A idéia básica é que você possa excluir ou adicionar imagens a qualquer momento, mantendo a consistência dos dados. Um recurso útil também é implementado: pesquise imagens semelhantes por solicitação (por exemplo, encontre imagens semelhantes, mas pesquise apenas entre aqueles que são labradores)
Atualmente estou usando:
img2vec_pytorch - Wrapper em torno de AlexNet para extração de recursos de imagem (https://github.com/christiansafka/img2vec)postgeSQL com extensão CUBE ; Os vetores são muito grandes, então não posso criar índice, mas o Postgres permite consultar dados mesmo em JSON Fields Na última versão, usei hnswlib foi mais rápido, mas não tão flexível quanto o Postgres (você pode conferir na filial 'HNSW')
docker-compose build
docker-compose up Requisitos: PostGesql; Será mais simples executar o Postgres no Docker '/PostGres/Dockerfile', caso contrário, você terá que recompilar a extensão do cubo (como no Dockerfile) também especificar PG_USER , PG_DATABASE , PG_PASSWORD params no arquivo 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 8001O aplicativo estará disponível em 0.0.0.0:8001 em ambos os casos
Todos os manipuladores estão disponíveis em 0.0.0.0:8001/docs
POST /image Adicionar imagem ao banco de dados
Solicitações Python
import requests
r = requests . post (
url = 'http://0.0.0.0:8001/image' ,
files = { 'image' : open ( 'image_path' , 'rb' )}
)Curl
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} download imagem por id
Solicitações 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
curl -X GET "http://0.0.0.0:8001/image/{id}" --output {output_file_name}
DELETE /image/{id} excluir imagem por id
Solicitações Python
import requests
r = requests . delete ( url = 'http://0.0.0.0:8001/image/{id}' )Curl
curl -X DELETE "http://0.0.0.0:8001/image/{id}"
POST /image/search?k={k} pesquisa k imagens mais próximas
Manipulador mais complexo. Você pode pesquisar imagens mais próximas n todos os bancos de dados ou pode selecionar apenas imagens específicas (por exemplo, apenas 'Irish Terriers') para essas seleções que você precisa adicionar dados às imagens como campos json (consulte POST data/{id} ) também pode selecionar imagens por 'nome' ou 'caminho' da mesma maneira. Para tais consultas, passe o ditado válido em parâmetros
Solicitações 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
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} adicionar informações adicionais para imagem por id
Passe todos os dados da imagem no campo JSON
Solicitações Python
import requests
r = requests . post (
url = 'http://0.0.0.0:8001/data/{id}' ,
json = { 'dog_type' : 'Irish_terrier' }
)Curl
curl -X POST "http://0.0.0.0:8001/data/{id}"
-H "Content-Type: application/json" -d "{"dog_type":"Irish_terrier"}"
GET /data/{id} obtenha dados para imagem por id (vetor e algumas informações adicionais)
Solicitações Python
import requests
r = requests . get ( url = 'http://0.0.0.0:8001/data/{id}' )Curl
curl -X GET "http://0.0.0.0:8001/data/{id}"
POST /data/query Get Data for Image by Consulta
Você pode procurar imagens consultando dados (consulte POST /image/search ), mas precisa passar dados de consulta no campo JSON
Solicitações Python
import requests
r = requests . post (
url = 'http://0.0.0.0:8001/data/query' ,
json = { 'dog_type' : 'Irish_terrier' }
)Curl
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"}"