|
import sys |
|
import time |
|
import logging |
|
|
|
import cv2 |
|
import numpy as np |
|
from PIL import Image |
|
|
|
logger = logging.getLogger(__name__) |
|
logger.setLevel(logging.INFO) |
|
logging.basicConfig( |
|
format="%(asctime)s - %(levelname)s - %(name)s - %(message)s", |
|
datefmt="%m/%d/%Y %H:%M:%S", |
|
handlers=[logging.StreamHandler(sys.stdout), ], |
|
) |
|
|
|
|
|
def read_img_general(img_path): |
|
if "s3://" in img_path: |
|
cv_img = read_img_ceph(img_path) |
|
|
|
return Image.fromarray(cv2.cvtColor(cv_img, cv2.COLOR_BGR2RGB)) |
|
else: |
|
return Image.open(img_path).convert('RGB') |
|
|
|
|
|
client = None |
|
|
|
|
|
def read_img_ceph(img_path): |
|
init_ceph_client_if_needed() |
|
img_bytes = client.get(img_path) |
|
assert img_bytes is not None, f"Please check image at {img_path}" |
|
img_mem_view = memoryview(img_bytes) |
|
img_array = np.frombuffer(img_mem_view, np.uint8) |
|
|
|
img = cv2.imdecode(img_array, cv2.IMREAD_COLOR) |
|
return img |
|
|
|
|
|
def init_ceph_client_if_needed(): |
|
global client |
|
if client is None: |
|
logger.info(f"initializing ceph client ...") |
|
st = time.time() |
|
from petrel_client.client import Client |
|
client = Client(enable_mc=True) |
|
ed = time.time() |
|
logger.info(f"initialize client cost {ed - st:.2f} s") |