Args: cfg (CfgNode): configs. Details can be found in slowfast/config/defaults.py
(self, cfg)
| 151 | """ |
| 152 | |
| 153 | def __init__(self, cfg): |
| 154 | """ |
| 155 | Args: |
| 156 | cfg (CfgNode): configs. Details can be found in |
| 157 | slowfast/config/defaults.py |
| 158 | """ |
| 159 | assert ( |
| 160 | cfg.DEMO.WEBCAM > -1 or cfg.DEMO.INPUT_VIDEO != "" |
| 161 | ), "Must specify a data source as input." |
| 162 | |
| 163 | self.source = ( |
| 164 | cfg.DEMO.WEBCAM if cfg.DEMO.WEBCAM > -1 else cfg.DEMO.INPUT_VIDEO |
| 165 | ) |
| 166 | |
| 167 | self.display_width = cfg.DEMO.DISPLAY_WIDTH |
| 168 | self.display_height = cfg.DEMO.DISPLAY_HEIGHT |
| 169 | |
| 170 | self.cap = cv2.VideoCapture(self.source) |
| 171 | |
| 172 | if self.display_width > 0 and self.display_height > 0: |
| 173 | self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, self.display_width) |
| 174 | self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, self.display_height) |
| 175 | else: |
| 176 | self.display_width = int(self.cap.get(cv2.CAP_PROP_FRAME_WIDTH)) |
| 177 | self.display_height = int(self.cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) |
| 178 | |
| 179 | if not self.cap.isOpened(): |
| 180 | raise IOError("Video {} cannot be opened".format(self.source)) |
| 181 | |
| 182 | self.output_file = None |
| 183 | |
| 184 | if cfg.DEMO.OUTPUT_FPS == -1: |
| 185 | self.output_fps = self.cap.get(cv2.CAP_PROP_FPS) |
| 186 | else: |
| 187 | self.output_fps = cfg.DEMO.OUTPUT_FPS |
| 188 | if cfg.DEMO.OUTPUT_FILE != "": |
| 189 | self.output_file = self.get_output_file( |
| 190 | cfg.DEMO.OUTPUT_FILE, fps=self.output_fps |
| 191 | ) |
| 192 | self.num_skip = cfg.DEMO.NUM_CLIPS_SKIP + 1 |
| 193 | self.get_id = -1 |
| 194 | self.put_id = -1 |
| 195 | self.buffer = [] |
| 196 | self.buffer_size = cfg.DEMO.BUFFER_SIZE |
| 197 | self.seq_length = cfg.DATA.NUM_FRAMES * cfg.DATA.SAMPLING_RATE |
| 198 | self.test_crop_size = cfg.DATA.TEST_CROP_SIZE |
| 199 | self.clip_vis_size = cfg.DEMO.CLIP_VIS_SIZE |
| 200 | |
| 201 | self.read_queue = queue.Queue() |
| 202 | self.write_queue = {} |
| 203 | self.not_end = True |
| 204 | self.write_lock = threading.Lock() |
| 205 | self.put_id_lock = threading.Lock() |
| 206 | self.input_lock = threading.Lock() |
| 207 | self.output_lock = threading.Lock() |
| 208 | self.stopped = False |
| 209 | atexit.register(self.clean) |
| 210 |
nothing calls this directly
no test coverage detected