| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- import numpy as np
- from PIL import Image
- import io
- import base64
- def show_mask(mask):
- h, w = mask.shape[-2:]
- mask = mask.astype(np.uint8)
- # 创建一个全黑的RGBA图像
- mask_image = np.zeros((h, w, 4), dtype=np.uint8)
- # 将掩码区域设为白色(前景)
- mask_image[mask > 0] = [0, 122, 204, 255] # 白色前景
- mask_image[mask == 0] = [0, 0, 0, 0] # 黑色背景
- return mask_image
- def show_masks(masks, scores):
- base64_images = []
- for i, (mask, score) in enumerate(zip(masks, scores)):
- np_arr = show_mask(mask)
- arr_img = Image.fromarray(np_arr)
-
- # 将图像转换为base64
- buffered = io.BytesIO()
- arr_img.save(buffered, format="PNG")
- img_str = base64.b64encode(buffered.getvalue()).decode()
- base64_images.append(img_str)
-
- return base64_images
- def convert_to_serializable(obj):
- """递归将numpy和torch类型转换为可序列化的Python类型"""
- import torch
- if isinstance(obj, np.ndarray):
- return obj.tolist() # 将numpy数组转换为Python列表
- elif isinstance(obj, torch.Tensor):
- return obj.detach().cpu().numpy().tolist() # 将tensor转换为numpy再转为列表
- elif isinstance(obj, (np.floating, np.integer, np.bool_)):
- return obj.item() # 将numpy标量转换为Python原生类型
- elif isinstance(obj, (list, tuple)):
- return [convert_to_serializable(item) for item in obj]
- elif isinstance(obj, dict):
- return {key: convert_to_serializable(value) for key, value in obj.items()}
- else:
- return obj
|