إنه بحث محرك مماثل للصور.
هذا تطبيق ويب يتيح لك البحث عن صور مماثلة في قاعدة البيانات.
الفكرة الأساسية هي أنه يمكنك حذف أو إضافة صور في أي وقت مع الحفاظ على اتساق البيانات. يتم تنفيذ ميزة مفيدة أيضًا: ابحث عن صور مماثلة حسب الطلب (على سبيل المثال ، ابحث عن صور مماثلة ، ولكن البحث فقط بين أولئك الذين هم لابرادور)
أنا أستخدم حاليًا:
img2vec_pytorch - غلاف حول Alexnet لاستخراج ميزة الصورة (https://github.com/christiansafka/IMG2VEC)postgeSQL مع امتداد CUBE . المتجهات كبيرة جدًا ، لذلك لا يمكنني إنشاء فهرس ، لكن Postgres يسمح بالاستعلام عن البيانات حتى في حقول JSON في الإصدار الأخير ، استخدمت hnswlib أنه كان أسرع ، ولكن ليس مرنًا مثل Postgres (يمكنك التحقق من ذلك على فرع "HNSW")
docker-compose build
docker-compose up المتطلبات: postgesql ؛ سيكون من الأسهل تشغيل postgres في Docker '/postgres/dockerfile "، وإلا يجب عليك إعادة ترجمة امتداد المكعب (كما هو الحال في DockerFile) حدد أيضًا PG_USER ، PG_DATABASE ، PG_PASSWORD params في settings/env file
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 أضف صورة إلى قاعدة البيانات
طلبات بيثون
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} قم بتنزيل الصورة حسب المعرف
طلبات بيثون
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} حذف الصورة بالمعرف
طلبات بيثون
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 في جميع قاعدة بيانات أو يمكنك تحديد صور محددة فقط (على سبيل المثال فقط "Terriers Irish Terriers") لمثل هذه التحديدات التي تحتاجها إلى إضافة بيانات إلى صور مثل JSON Fields (انظر POST data/{id} ) يمكنك أيضًا تحديد الصور بواسطة "الاسم" أو "المسار". لمثل هذه الاستعلامات ، تمريريل ساري المفعول في المعلمة
طلبات بيثون
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} إضافة معلومات إضافية للصورة بالمعرف
تمرير جميع بيانات الصور في حقل JSON
طلبات بيثون
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} احصل على بيانات للصورة حسب المعرف (متجه وبعض المعلومات الإضافية)
طلبات بيثون
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
طلبات بيثون
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"}"