2024-07-19 15:10:28 +08:00
|
|
|
import os
|
|
|
|
|
|
|
|
|
|
import numpy as np
|
|
|
|
|
|
|
|
|
|
from app.core.config import SEG_CACHE_PATH
|
2024-05-28 15:22:11 +08:00
|
|
|
from ..builder import PIPELINES
|
|
|
|
|
from ...utils.design_ensemble import get_seg_result
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@PIPELINES.register_module()
|
|
|
|
|
class Segmentation(object):
|
|
|
|
|
|
2024-07-19 15:17:54 +08:00
|
|
|
# @ClassCallRunTime
|
2024-05-28 15:22:11 +08:00
|
|
|
def __call__(self, result):
|
2024-07-24 15:21:06 +08:00
|
|
|
# 本地查询seg 缓存是否存在
|
2024-07-19 15:10:28 +08:00
|
|
|
_, seg_result = self.load_seg_result(result["image_id"])
|
2024-07-22 15:41:07 +08:00
|
|
|
result['seg_result'] = seg_result
|
2024-07-19 15:10:28 +08:00
|
|
|
if not _:
|
2024-07-24 15:21:06 +08:00
|
|
|
# 推理获得seg 结果
|
|
|
|
|
seg_result = get_seg_result(result["image_id"], result['image'])[0]
|
|
|
|
|
self.save_seg_result(seg_result, result['image_id'])
|
|
|
|
|
# 处理前片后片
|
|
|
|
|
temp_front = seg_result == 1.0
|
|
|
|
|
result['front_mask'] = (255 * (temp_front + 0).astype(np.uint8))
|
|
|
|
|
temp_back = seg_result == 2.0
|
|
|
|
|
result['back_mask'] = (255 * (temp_back + 0).astype(np.uint8))
|
|
|
|
|
result['mask'] = result['front_mask'] + result['back_mask']
|
2024-05-28 15:22:11 +08:00
|
|
|
return result
|
2024-07-19 15:10:28 +08:00
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
def save_seg_result(seg_result, image_id):
|
|
|
|
|
file_path = f"{SEG_CACHE_PATH}{image_id}.npy"
|
|
|
|
|
try:
|
|
|
|
|
np.save(file_path, seg_result)
|
|
|
|
|
print("保存成功", os.path.abspath(file_path))
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"保存失败: {e}")
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
def load_seg_result(image_id):
|
|
|
|
|
file_path = f"{SEG_CACHE_PATH}{image_id}.npy"
|
|
|
|
|
try:
|
|
|
|
|
seg_result = np.load(file_path)
|
|
|
|
|
return True, seg_result
|
|
|
|
|
except FileNotFoundError:
|
|
|
|
|
print("文件不存在")
|
|
|
|
|
return False, None
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"加载失败: {e}")
|
|
|
|
|
return False, None
|