# -*- coding: utf-8 -*- # =================================================== # # Author : Fan Zhang # Email : zhangfan@baai.ac.cn # Institute : Beijing Academy of Artificial Intelligence (BAAI) # Create On : 2023-12-13 09:48 # Last Modified : 2023-12-20 04:10 # File Name : utils.py # Description : # # =================================================== 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