import io import logging import time from PIL import Image from fastapi import APIRouter from matplotlib import pyplot as plt from app.core.config import SIMILAR_MATCH_DRAW 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") def similar_match(request_item: SimilarMatchMItem): try: if request_item.result_number <= 0: raise KeyError("results number can't be less than 0") service = SimilarMatch(request_item) search_response = service.match_features() response_data = [] for response in search_response[0]: response_data.append(response['entity']) 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") 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": []}