Ini adalah mesin pencarian yang serupa untuk gambar.
Ini adalah aplikasi web memungkinkan Anda untuk mencari gambar serupa dalam database.
Ide dasarnya adalah Anda dapat menghapus atau menambahkan gambar kapan saja sambil mempertahankan konsistensi data. Fitur yang berguna juga diimplementasikan: Cari gambar serupa berdasarkan permintaan (misalnya, temukan gambar yang serupa, tetapi hanya mencari di antara mereka yang labrador)
Saya saat ini menggunakan:
img2vec_pytorch - pembungkus di sekitar Alexnet untuk ekstraksi fitur gambar (https://github.com/christiansafka/img2vec)postgeSQL dengan ekstensi CUBE ; Vektor sangat besar, jadi saya tidak dapat membangun indeks, tetapi postgres memungkinkan untuk menanyakan data bahkan di bidang json Dalam versi terakhir saya telah menggunakan hnswlib itu lebih cepat, tetapi tidak begitu fleksibel seperti postgres (Anda dapat memeriksanya di cabang 'hnsw')
docker-compose build
docker-compose up Persyaratan: PostgesQL; Akan lebih sederhana untuk menjalankan postgres di Docker '/Postgres/DockerFile', jika tidak Anda harus mengkompilasi ulang ekstensi kubus (seperti di DockerFile) juga menentukan PG_USER , PG_DATABASE , PG_PASSWORD Params di settings/env dalam File
virtualenv venv --python=python3.6
source venv/bin/activate
pip install -r requirements.txt
uvicorn run:app --host 0.0.0.0 --port 8001Aplikasi akan tersedia di 0,0.0.0:8001 dalam kedua kasus
Semua penangan tersedia di 0,0.0.0:8001/docs
POST /image Tambahkan gambar ke database
Permintaan Python
import requests
r = requests . post (
url = 'http://0.0.0.0:8001/image' ,
files = { 'image' : open ( 'image_path' , 'rb' )}
)Keriting
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} unduh gambar dengan id
Permintaan 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 )Keriting
curl -X GET "http://0.0.0.0:8001/image/{id}" --output {output_file_name}
DELETE /image/{id} hapus gambar dengan id
Permintaan Python
import requests
r = requests . delete ( url = 'http://0.0.0.0:8001/image/{id}' )Keriting
curl -X DELETE "http://0.0.0.0:8001/image/{id}"
POST /image/search?k={k} Cari k Gambar terdekat
Pawang paling kompleks. Anda dapat mencari gambar terdekat dan semua database atau Anda hanya dapat memilih gambar tertentu (misalnya hanya 'Irish Terrier') untuk pemilihan tersebut Anda perlu menambahkan data ke gambar sebagai bidang JSON (lihat POST data/{id} ) juga Anda dapat memilih gambar dengan 'nama' atau 'jalur' dengan cara yang sama. Untuk pertanyaan seperti itu melewati dikt valid di params
Permintaan 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' })}
)Keriting
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} Tambahkan info tambahan untuk gambar dengan ID
Lewati semua data gambar di bidang JSON
Permintaan Python
import requests
r = requests . post (
url = 'http://0.0.0.0:8001/data/{id}' ,
json = { 'dog_type' : 'Irish_terrier' }
)Keriting
curl -X POST "http://0.0.0.0:8001/data/{id}"
-H "Content-Type: application/json" -d "{"dog_type":"Irish_terrier"}"
GET /data/{id} Dapatkan data untuk gambar dengan ID (vektor dan beberapa info tambahan)
Permintaan Python
import requests
r = requests . get ( url = 'http://0.0.0.0:8001/data/{id}' )Keriting
curl -X GET "http://0.0.0.0:8001/data/{id}"
POST /data/query Dapatkan data untuk gambar dengan kueri
Anda dapat mencari gambar dengan meminta data (lihat POST /image/search ) tetapi Anda perlu meneruskan data kueri di bidang JSON
Permintaan Python
import requests
r = requests . post (
url = 'http://0.0.0.0:8001/data/query' ,
json = { 'dog_type' : 'Irish_terrier' }
)Keriting
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"}"