edit: api 변경 - 벡터이미지검색 -> 결과물에 parts 추가, 파츠검색 api 추가

This commit is contained in:
2025-11-27 15:27:22 +09:00
parent 12b12a95f5
commit 18b24dcafa
10 changed files with 384 additions and 145 deletions

View File

@@ -583,7 +583,7 @@ class VitModelType(str, Enum):
l14_336 = "l14_336"
class VactorSearchReq(BaseModel):
class VectorSearchReq(BaseModel):
"""
### [Request] vector 검색
"""
@@ -592,7 +592,7 @@ class VactorSearchReq(BaseModel):
search_num : int = Field(4, description='검색결과 이미지 갯수', example=4)
class VactorSearchVitReportReq(BaseModel):
class VectorSearchVitReportReq(BaseModel):
"""
### [Request] vector 검색(vit) 후 리포트 이미지 생성
"""
@@ -602,7 +602,7 @@ class VactorSearchVitReportReq(BaseModel):
report_path : str = Field(description='리포트 이미지 저장 경로', example='path')
class VactorSearchVitReq(BaseModel):
class VectorSearchVitReq(BaseModel):
"""
### [Request] vector 검색(vit) 후 이미지 생성
"""
@@ -611,22 +611,21 @@ class VactorSearchVitReq(BaseModel):
model_type : VitModelType = Field(VitModelType.l14, description='pretrained 모델 정보', example=VitModelType.l14)
search_num : int = Field(4, description='검색결과 이미지 갯수', example=4)
class VactorSearchVitRes(ResponseBase):
class VectorSearchVitRes(ResponseBase):
img_list : dict = Field({}, description='이미지 결과 리스트', example={})
@staticmethod
def set_error(error):
VactorSearchVitRes.img_list = {}
VactorSearchVitRes.result = False
VactorSearchVitRes.error = str(error)
VectorSearchVitRes.img_list = {}
VectorSearchVitRes.result = False
VectorSearchVitRes.error = str(error)
return VactorSearchVitRes
return VectorSearchVitRes
@staticmethod
def set_message(msg):
VactorSearchVitRes.img_list = msg
VactorSearchVitRes.result = True
VactorSearchVitRes.error = None
VectorSearchVitRes.img_list = msg
VectorSearchVitRes.result = True
VectorSearchVitRes.error = None
return VactorSearchVitRes
return VectorSearchVitRes

View File

@@ -23,12 +23,14 @@ from custom_apps.faiss_imagenet.main import search_idxs
from custom_apps.FEATURE_VECTOR_SIMILARITY_FAISS.faiss_functions import get_clip_info, save_report_image, get_models
from custom_apps.FEATURE_VECTOR_SIMILARITY_FAISS.faiss_similarity_search import FEMUsageInfo
from custom_apps.FEATURE_VECTOR_SIMILARITY_FAISS.const import VectorSearchItem
from custom_apps.FEATURE_VECTOR_SIMILARITY_FAISS.utils import search_glass_parts, file_name_to_parts
router = APIRouter(prefix="/services")
@router.post("/faiss/vector/search/imagenet", summary="imagenet search", response_model=M.ResponseBase)
async def vactor_search(request: Request, request_body_info: M.VactorSearchReq):
async def vactor_search(request: Request, request_body_info: M.VectorSearchReq):
"""
## 벡터검색
@@ -54,7 +56,7 @@ async def vactor_search(request: Request, request_body_info: M.VactorSearchReq):
@router.post("/faiss/vector/search/vit/report", summary="vit search report", response_model=M.ResponseBase)
async def vactor_report_vit(request: Request, request_body_info: M.VactorSearchVitReportReq):
async def vactor_report_vit(request: Request, request_body_info: M.VectorSearchVitReportReq):
"""
이미지 경로를 입력받아 repport image 저장
"""
@@ -75,23 +77,59 @@ async def vactor_report_vit(request: Request, request_body_info: M.VactorSearchV
return response.set_error(e)
@router.post("/faiss/vector/search/vit", summary="vit search", response_model=M.VactorSearchVitRes)
async def vactor_vit(request: Request, request_body_info: M.VactorSearchVitReq):
@router.post("/faiss/vector/search/vit", summary="vit search", response_model=M.VectorSearchVitRes)
async def vactor_vit(request: Request, request_body_info: M.VectorSearchVitReq):
"""
이미지 경로 를 입력받아 vit 방식으로 검색
"""
response = M.VactorSearchVitRes()
response = M.VectorSearchVitRes()
try:
if not os.path.exists(request_body_info.query_image_path):
raise FileNotFoundError(f"File {request_body_info.query_image_path} does not exist.")
model = get_models(index_type=request_body_info.index_type, model_type=request_body_info.model_type)
report_info = get_clip_info(model,request_body_info.query_image_path,top_k=request_body_info.search_num)
report_info = get_clip_info(model=model,
query_image_path=request_body_info.query_image_path,
item_info=VectorSearchItem.glass,
top_k=request_body_info.search_num)
parts = search_glass_parts(report_info.result_image_paths)
return response.set_message({
'result_image_paths': report_info.result_image_paths,
'result_percents': report_info.result_percents
'result_percents': report_info.result_percents,
'result_parts_list': parts
})
except Exception as e:
LOG.error(traceback.format_exc())
return response.set_error(e)
@router.post("/faiss/vector/search/vit/parts", summary="vit search parts", response_model=M.VectorSearchVitRes)
async def vactor_vit_parts(request: Request, request_body_info: M.VectorSearchVitReq):
"""
이미지 경로 를 입력받아 vit 방식으로 검색
"""
response = M.VectorSearchVitRes()
try:
if not os.path.exists(request_body_info.query_image_path):
raise FileNotFoundError(f"File {request_body_info.query_image_path} does not exist.")
model = get_models(index_type=request_body_info.index_type, model_type=request_body_info.model_type)
#TODO parts 데이터 확인필요
parts = file_name_to_parts(request_body_info.query_image_path)
report_info = get_clip_info(model=model,
query_image_path=request_body_info.query_image_path,
item_info=parts,
top_k=request_body_info.search_num)
return response.set_message({
'result_image_paths': report_info.result_image_paths,
'result_percents': report_info.result_percents,
})
except Exception as e: