มันเป็นเครื่องมือค้นหาที่คล้ายกันสำหรับรูปภาพ
นี่คือเว็บแอปพลิเคชันช่วยให้คุณสามารถค้นหาภาพที่คล้ายกันในฐานข้อมูล
แนวคิดพื้นฐานคือคุณสามารถลบหรือเพิ่มรูปภาพได้ตลอดเวลาในขณะที่รักษาความสอดคล้องของข้อมูล นอกจากนี้ยังมีการใช้คุณสมบัติที่มีประโยชน์: ค้นหาภาพที่คล้ายกันตามคำขอ (ตัวอย่างเช่นค้นหาภาพที่คล้ายกัน แต่ค้นหาเฉพาะในหมู่ผู้ที่เป็นลาบราดอร์)
ฉันกำลังใช้:
img2vec_pytorch - wrapper รอบ Alexnet สำหรับการแยกคุณสมบัติภาพ (https://github.com/christiansafka/img2vec)postgeSQL พร้อมส่วนขยาย CUBE ; เวกเตอร์มีขนาดใหญ่มากดังนั้นฉันจึงไม่สามารถสร้างดัชนีได้ แต่ Postgres อนุญาตให้สอบถามข้อมูลได้แม้ในฟิลด์ JSON ในเวอร์ชันล่าสุดที่ฉันใช้ hnswlib มันเร็วกว่า แต่ไม่ยืดหยุ่นเหมือน postgres (คุณสามารถตรวจสอบได้ที่สาขา 'HNSW')
docker-compose build
docker-compose up ข้อกำหนด: PostgesQl; มันจะง่ายกว่าที่จะเรียกใช้ postgres ใน docker '/postgres/dockerfile' มิฉะนั้นคุณต้องคอมไพล์ส่วนขยาย cube ใหม่ (เช่นใน Dockerfile) ยังระบุ PG_USER , PG_DATABASE , PG_PASSWORD params ในไฟล์ 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 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} ภาพดาวน์โหลดโดย 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} ลบภาพด้วย 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} ค้นหาภาพที่ใกล้ที่สุด
ตัวจัดการที่ซับซ้อนที่สุด คุณสามารถค้นหารูปภาพที่ใกล้ที่สุด n ฐานข้อมูลทั้งหมดหรือคุณสามารถเลือกเฉพาะภาพเฉพาะ (ตัวอย่างเช่น 'terriers') สำหรับการเลือกดังกล่าวที่คุณต้องเพิ่มข้อมูลลงในรูปภาพเป็นฟิลด์ JSON (ดู POST data/{id} ) นอกจากนี้คุณสามารถเลือกรูปภาพโดย 'ชื่อ' หรือ 'เส้นทาง' ในลักษณะเดียวกัน สำหรับการสืบค้นดังกล่าวผ่าน dict ที่ถูกต้องใน params
คำของูเหลือม
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
คำของูเหลือม
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 (เวกเตอร์และข้อมูลเพิ่มเติมบางส่วน)
คำของูเหลือม
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"}"