|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from datetime import datetime |
|
import logging |
|
import logging.config |
|
import hashlib |
|
import os |
|
import os.path as osp |
|
import uuid |
|
from PIL import Image |
|
|
|
from decord import VideoReader |
|
|
|
os.makedirs(osp.join(osp.dirname(__file__), "..", "log"), exist_ok=True) |
|
|
|
def config_logger(logger_name): |
|
logger_config = { |
|
"version": 1, |
|
"formatters": { |
|
"standard": { |
|
"format": "%(asctime)s - %(filename)s: %(lineno)d - [%(levelname)s] - %(message)s", |
|
"datefmt": "%Y-%m-%d %H:%M:%S", |
|
}, |
|
}, |
|
"handlers": { |
|
"console": { |
|
"class": "logging.StreamHandler", |
|
"formatter": "standard", |
|
"level": "INFO", |
|
}, |
|
"file": { |
|
"class": "logging.handlers.TimedRotatingFileHandler", |
|
"filename": osp.join(osp.dirname(__file__), "..", "log", f"{logger_name}.log"), |
|
"formatter": "standard", |
|
"level": "INFO", |
|
"when": "D", |
|
"interval": 7, |
|
"backupCount": 90, |
|
}, |
|
}, |
|
"loggers": { |
|
logger_name: { |
|
"handlers": ["file", "console"], |
|
"level": "INFO", |
|
"propagate": True, |
|
}, |
|
}, |
|
} |
|
|
|
logging.config.dictConfig(logger_config) |
|
logger = logging.getLogger(logger_name) |
|
return logger |
|
|
|
frontend_logger = config_logger("Emu-v2_frontend") |
|
beckend_logger = config_logger("Emu-v2_backend") |
|
|
|
|
|
def extract_frames(video, num_frames): |
|
video = VideoReader(video) |
|
total_frames = len(video) |
|
segment = int(total_frames // num_frames) |
|
|
|
frames = video.get_batch(list(range(int(segment//2), total_frames, segment))).asnumpy() |
|
frames = [Image.fromarray(f) for f in frames] |
|
return frames |
|
|
|
|
|
def image2md5(image: Image.Image): |
|
md5hash = hashlib.md5(image.tobytes()) |
|
return md5hash.hexdigest() |
|
|
|
|
|
def gen_id(): |
|
logid = datetime.now().strftime("%Y%m%d%H%M%d") |
|
logid += f"{uuid.uuid4().hex}" |
|
return logid |
|
|
|
|