これは、画像の同様のエンジンを検索します。
これは、データベースで同様の画像を検索できるWebアプリケーションです。
基本的なアイデアは、データの一貫性を維持しながらいつでも画像を削除または追加できることです。有用な機能も実装されています。リクエストごとに同様の画像を検索します(たとえば、同様の画像を見つけますが、ラブラドールである人の間でのみ検索)
私は現在使用しています:
img2vec_pytorch画像機能抽出のためのalexnet周辺のラッパー(https://github.com/christiansafka/img2vec)CUBEエクステンションを備えたpostgeSQL ;ベクトルは非常に大きいため、インデックスを構築できませんが、PostgresはJSONフィールドでもデータをクエリすることができます前回のバージョンでは、 hnswlibを使用しましたが、ポストグレスほど柔軟ではありませんでした(「HNSW」ブランチで確認できます)
docker-compose build
docker-compose up要件:PostgesQl; docker '/postgres/dockerfile'でpostgresを実行する方が簡単です。そうしないとsettings/env PG_USERエクステンション(dockerfileなど) PG_DATABASE再コンパイルする必要がありますPG_PASSWORD
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最寄りの画像を検索します
最も複雑なハンドラー。最寄りの画像nすべてのデータベースを検索するか、特定の画像(たとえば「アイルランドのテリア」のみ)のみを選択することができます。そのような選択に対して、JSONフィールドとして画像にデータを追加する必要があります( POST data/{id}を参照)同じ方法で「名前」または「パス」で画像を選択できます。そのようなクエリの場合、PARAMの有効な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(vectorといくつかの追加情報)によって画像のデータを取得する
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"}"