Es ist eine Suche nach Bildern.
Mit dieser Webanwendung können Sie ähnliche Bilder in der Datenbank durchsuchen.
Die Grundidee ist, dass Sie jederzeit Bilder löschen oder hinzufügen können, während Sie die Datenkonsistenz beibehalten. Eine nützliche Funktion wird auch implementiert: Suche nach ähnlichen Bildern nach Anfrage (z. B. finden ähnliche Bilder, aber nur unter denjenigen, die Labradors sind)
Ich benutze derzeit:
img2vec_pytorch - Wrapper Alexnet für Bildfunktionsextraktion (https://github.com/christiansafka/img2Vec)postgeSQL mit CUBE ; Die Vektoren sind sehr groß, daher kann ich keinen Index erstellen, aber Postgres ermöglicht es, Daten auch in JSON -Feldern abzufragen In der letzten Version habe ich hnswlib verwendet, es war schneller, aber nicht so flexibel wie Postgres (Sie können es in der "HNSW" -Ast überprüfen)
docker-compose build
docker-compose up Anforderungen: postGESQL; Es PG_PASSWORD einfacher sein PG_DATABASE Postgres in Docker '/postgres/dockerfile' auszuführen. Andernfalls müssen settings/env PG_USER Cube -Erweiterung neu kompilieren (wie in DockerFile) auch angeben
virtualenv venv --python=python3.6
source venv/bin/activate
pip install -r requirements.txt
uvicorn run:app --host 0.0.0.0 --port 8001Die App wird in beiden Fällen unter 0.0.0.0:8001 verfügbar sein
Alle Handler sind unter 0,0.0.0:8001/docs erhältlich
POST /image in die Datenbank Bild hinzufügen
Python -Anfragen
import requests
r = requests . post (
url = 'http://0.0.0.0:8001/image' ,
files = { 'image' : open ( 'image_path' , 'rb' )}
)Locken
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} Bild per ID herunterladen
Python -Anfragen
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 )Locken
curl -X GET "http://0.0.0.0:8001/image/{id}" --output {output_file_name}
DELETE /image/{id} Bild durch ID löschen
Python -Anfragen
import requests
r = requests . delete ( url = 'http://0.0.0.0:8001/image/{id}' )Locken
curl -X DELETE "http://0.0.0.0:8001/image/{id}"
POST /image/search?k={k} Search K Nächste Bilder
Der komplexeste Handler. Sie können die nächsten Bilder in der gesamten Datenbank durchsuchen oder nur bestimmte Bilder auswählen (z. B. nur 'irische Terriers'). Für diese Auswahl müssen Sie Bilder zu Bildern als JSON -Felder hinzufügen (siehe POST data/{id} ). Für solche Abfragen übergeben Sie ein gültiges Diktat in Params
Python -Anfragen
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' })}
)Locken
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} zusätzliche Informationen für das Bild nach ID hinzufügen
Übergeben Sie alle Bilddaten in JSON -Feld
Python Anfragen
import requests
r = requests . post (
url = 'http://0.0.0.0:8001/data/{id}' ,
json = { 'dog_type' : 'Irish_terrier' }
)Locken
curl -X POST "http://0.0.0.0:8001/data/{id}"
-H "Content-Type: application/json" -d "{"dog_type":"Irish_terrier"}"
GET /data/{id} Daten für das Bild nach ID (Vektor und einige zusätzliche Informationen) abrufen
Python -Anfragen
import requests
r = requests . get ( url = 'http://0.0.0.0:8001/data/{id}' )Locken
curl -X GET "http://0.0.0.0:8001/data/{id}"
POST /data/query erhalten Daten für das Bild per Abfrage
Sie können nach Bildern suchen, indem Sie Daten abfragen (siehe POST /image/search ), müssen jedoch Abfragedaten im JSON -Feld übergeben
Python -Anfragen
import requests
r = requests . post (
url = 'http://0.0.0.0:8001/data/query' ,
json = { 'dog_type' : 'Irish_terrier' }
)Locken
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"}"