Files
sora_python/app/api/api_similar_match.py

40 lines
1.4 KiB
Python
Raw Normal View History

2024-04-10 14:33:06 +08:00
import io
2024-03-28 10:30:18 +08:00
import logging
import time
2024-04-10 14:33:06 +08:00
from PIL import Image
2024-03-28 10:30:18 +08:00
from fastapi import APIRouter
2024-04-10 14:33:06 +08:00
from matplotlib import pyplot as plt
2024-03-28 10:30:18 +08:00
2024-04-10 14:33:06 +08:00
from app.core.config import SIMILAR_MATCH_DRAW
2024-03-28 10:30:18 +08:00
from app.schemas.similar_match import SimilarMatchMItem
from app.service.similar_match.service import SimilarMatch
from app.service.utils.decorator import RunTime
logger = logging.getLogger()
router = APIRouter()
@RunTime
@router.post("/similar_match")
2024-03-28 10:30:18 +08:00
def similar_match(request_item: SimilarMatchMItem):
try:
if request_item.result_number <= 0:
raise KeyError("results number can't be less than 0")
2024-03-28 10:30:18 +08:00
service = SimilarMatch(request_item)
search_response = service.match_features()
response_data = []
for response in search_response[0]:
response_data.append(response['entity'])
2024-04-10 14:33:06 +08:00
if SIMILAR_MATCH_DRAW:
resource_image = service.load_image(request_item.image_path)
similar_diagram_list = [service.load_image(image_url['image_path']) for image_url in response_data]
resource_image.save("similar_match/3/resource.png")
for i, image in enumerate(similar_diagram_list):
image.save(f"similar_match/3/{i}.png")
2024-03-28 10:30:18 +08:00
return {"message": "ok", "data": response_data}
except KeyError as e:
logger.warning(str(e))
return {"message": "results number can't be less than 0", "data": []}