| import io |
| from PIL import Image |
| import cv2 |
| import numpy as np |
| try: |
| from petrel_client.client import Client |
| except ImportError as E: |
| "petrel_client.client cannot be imported" |
| pass |
|
|
|
|
| def pil_loader(img_str): |
| buff = io.BytesIO(img_str) |
| return Image.open(buff) |
|
|
| def cv2_loader(img_bytes): |
| |
| img_mem_view = memoryview(img_bytes) |
| img_array = np.frombuffer(img_mem_view, np.uint8) |
| imgcv2=cv2.imdecode(img_array, cv2.IMREAD_COLOR) |
| imgcv2=cv2.cvtColor(imgcv2, cv2.COLOR_BGR2RGB) |
| return Image.fromarray(imgcv2) |
|
|
| class TCSLoader(object): |
|
|
| def __init__(self, conf_path): |
| self.client = Client(conf_path) |
|
|
| def __call__(self, fn): |
| try: |
| img_value_str = self.client.get(fn) |
| img = pil_loader(img_value_str) |
| except: |
| try: |
| img = cv2_loader(img_value_str) |
| except: |
| print('Read image failed ({})'.format(fn)) |
| return None |
| else: |
| return img |
| else: |
| return img |
|
|