|
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 |
|
|