def __init__(self, **args): self.dataset_dir = os.path.join(Config.Dir.DATASET_DIR, args.get('dataset_id')) self.annotation_dir = os.path.join(Config.Dir.ANNOTATION_DIR, args.get('dataset_id')) create_if_not_exist(self.dataset_dir) create_if_not_exist(self.annotation_dir)
def __init__(self, frame_reader, thread_lock=threading.Lock(), max_queue_size=Config.Frame.FRAME_QUEUE_SIZE, max_frame_on_disk=Config.Frame.MAX_FRAME_ON_DISK, on_disk_save_path=Config.Frame.FRAME_ON_DISK): threading.Thread.__init__(self) self.frame_reader = frame_reader self.max_queue_size = max_queue_size self.max_frame_on_disk = max_frame_on_disk self.thread_lock = thread_lock self.stream_time = time.time() self.queue = [] self.on_disk_save_path = on_disk_save_path self.queue_on_disk = [] self.frame_number = 0 # if queue on disk is just full, need to process all the images before running again self.queue_on_disk_is_just_full = False self.running = True # remove old local cache self.clear_queue_on_disk() create_if_not_exist(self.on_disk_save_path)
def __init__(self, **kwargs): self.fps = kwargs.get('fps') self.video_dim = kwargs.get('video_dim') self.fourcc = cv2.VideoWriter_fourcc(*'XVID') self.camera_id = kwargs.get('camera_id') self.rel_video_dir = '%s/%s' % (Config.Dir.VIDEO, self.camera_id) abs_video_dir = '%s/%s' % (Config.Dir.DATA_DIR, self.rel_video_dir) create_if_not_exist(Config.Dir.VIDEO_DIR) create_if_not_exist(abs_video_dir)
def __init__(self, mean, covariance, track_id, n_init=3, max_age=30): self.track_id = track_id self.track_id_path = os.path.join(Config.Dir.TRACKING_DIR, str(self.track_id)) # below is attribute for kalman filer tracker self._n_init = n_init self._max_age = max_age self.state = TrackState.Tentative self.mean = mean self.covariance = covariance self.hits = 1 self.age = 1 self.time_since_update = 0 create_if_not_exist(self.track_id_path)
def doFaceTask(self, _task): data = _task.depackage() task_name = data['type'] if task_name != Config.Worker.TASK_TRACKER: return deleted_trackers = data['trackers'] for tracker in deleted_trackers: track_id_path = os.path.join(self.tracking_dir, str(tracker.track_id)) create_if_not_exist(track_id_path) for tracker_element in tracker.elements: save_image = tracker_element.display_image image_id = '{}_{}'.format(tracker.track_id, tracker_element.str_info()) image_name = image_id + '.jpg' image_path = os.path.join(track_id_path, image_name) if os.path.exists: # path exist if have dump in realtime continue misc.imsave(image_path, save_image) logger.debug('Save image: %s' % image_id)
def __init__(self, mean, covariance, track_id, n_init=3, max_age=30, _use_direction=Config.Track.USE_DIRECTION): self.track_id = track_id self.elements = [] self.face_id = Config.Track.INIT_FACE_ID self.represent_image_id = None self.is_registered = True self.track_id_path = os.path.join(Config.Dir.TRACKING_DIR, str(self.track_id)) self.use_direction = _use_direction # Here is the new attribute added this time # Since now we keep bad detections low coeff to track by iou # so we need to keep track of good faces to send self.nrof_good_faces = 0 # This attribute to serve RealTime tracker - we send tracker to matching two times: t1 and t2 # t1 is send when we we have n if good face, so t2 don't need to resend what t1 is already do self.sent_elements_index = 0 # below is attribute for kalman filer tracker self.state = TrackState.Tentative self.hits = 1 self.age = 1 self.time_since_update = 0 self.directions = [] super(FaceTracker, self).__init__(mean, covariance, track_id, n_init=3, max_age=30) create_if_not_exist(self.track_id_path)
def init(self): rtsp = self.database.get_rtsp_link() # rtsp = '/iq_facial_recognition/source/prod/unilever_alert/Timeline_1.mp4' print(rtsp) self.frame_reader = frame_reader.URLFrameReader(rtsp, convert_color=False, re_source=True) self.frame_queue = frame_queue.FrameQueue(self.frame_reader) self.points = [(578, 93), (853, 509)] self.messenger = messenger.SocketMessenger(Config.Socket.HOST, Config.Socket.PORT) self.snapshot_cache = queue.Queue(maxsize=Config.ViolationAlert.NROF_SNAPSHOT) self.statistic_queue = queue.Queue() self.rel_snapshot_dir = '%s/%s' % (Config.Dir.SNAPSHOT, self.camera_id) abs_snapshot_dir = '%s/%s' % (Config.Dir.DATA_DIR, self.rel_snapshot_dir) snapshot_dir = '%s/%s' % (Config.Dir.DATA_DIR, Config.Dir.SNAPSHOT) create_if_not_exist(Config.Dir.DATA_DIR) create_if_not_exist(snapshot_dir) create_if_not_exist(abs_snapshot_dir) stat_thread = Thread(target=self.statistic_collector) process_thread = Thread(target=self.do_process) stat_thread.start() process_thread.start()
def __init__(self, **args): self.tracking_dir = args.get('tracking_dir,', Config.Dir.TRACKING_DIR) create_if_not_exist(self.tracking_dir)
def create_dir(self): create_if_not_exist(Config.Dir.DATASET_DIR) create_if_not_exist(Config.Dir.MATCHER_DIR) create_if_not_exist(Config.Dir.ANNOTATION_DIR) create_if_not_exist(Config.Dir.LOG_DIR)
def create_data_dir(self): dataset_path = os.path.join(Config.Dir.DATASET_DIR, self.dataset_id) annotaion_path = os.path.join(Config.Dir.ANNOTATION_DIR, self.dataset_id) create_if_not_exist(dataset_path) create_if_not_exist(annotaion_path)
import sys import logging from logging.config import fileConfig from logging.handlers import RotatingFileHandler from config import Config from core.cv_utils import create_if_not_exist # add checking before run create_if_not_exist(Config.Dir.DATA_DIR) create_if_not_exist(Config.Dir.LOG_DIR) logger = logging.getLogger(Config.LogFile.LOG_NAME) if Config.Mode.PRODUCTION: handler = RotatingFileHandler(Config.LogFile.LOG_FILE) else: handler = logging.StreamHandler(sys.stdout) formatter = logging.Formatter( fmt='[%(asctime)s] [%(levelname)s] %(name)s - %(processName)s: %(message)s', datefmt='%Y-%m-%dT%H:%M:%S') handler.setFormatter(formatter) logger.addHandler(handler) logger.setLevel(logging.INFO)