diff --git a/benchmark.py b/benchmark.py index 5c0c68419..7db09a5d7 100755 --- a/benchmark.py +++ b/benchmark.py @@ -61,7 +61,7 @@ def start(id, num_detections, detection_queue, event): object_detector.cleanup() print(f"{id} - Processed for {duration:.2f} seconds.") print(f"{id} - FPS: {object_detector.fps.eps():.2f}") - print(f"{id} - Average frame processing time: {mean(frame_times)*1000:.2f}ms") + print(f"{id} - Average frame processing time: {mean(frame_times) * 1000:.2f}ms") ###### diff --git a/frigate/comms/webpush.py b/frigate/comms/webpush.py index 602f8d11e..abfd52d19 100644 --- a/frigate/comms/webpush.py +++ b/frigate/comms/webpush.py @@ -151,7 +151,7 @@ class WebPushClient(Communicator): # type: ignore[misc] camera: str = payload["after"]["camera"] title = f"{', '.join(sorted_objects).replace('_', ' ').title()}{' was' if state == 'end' else ''} detected in {', '.join(payload['after']['data']['zones']).replace('_', ' ').title()}" message = f"Detected on {camera.replace('_', ' ').title()}" - image = f'{payload["after"]["thumb_path"].replace("/media/frigate", "")}' + image = f"{payload['after']['thumb_path'].replace('/media/frigate', '')}" # if event is ongoing open to live view otherwise open to recordings view direct_url = f"/review?id={reviewId}" if state == "end" else f"/#{camera}" diff --git a/frigate/config/camera/zone.py b/frigate/config/camera/zone.py index 65b34a049..37fc1b744 100644 --- a/frigate/config/camera/zone.py +++ b/frigate/config/camera/zone.py @@ -85,7 +85,7 @@ class ZoneConfig(BaseModel): if explicit: self.coordinates = ",".join( [ - f'{round(int(p.split(",")[0]) / frame_shape[1], 3)},{round(int(p.split(",")[1]) / frame_shape[0], 3)}' + f"{round(int(p.split(',')[0]) / frame_shape[1], 3)},{round(int(p.split(',')[1]) / frame_shape[0], 3)}" for p in coordinates ] ) diff --git a/frigate/detectors/plugins/tensorrt.py b/frigate/detectors/plugins/tensorrt.py index 380fa9107..de5459c6d 100644 --- a/frigate/detectors/plugins/tensorrt.py +++ b/frigate/detectors/plugins/tensorrt.py @@ -219,19 +219,19 @@ class TensorRtDetector(DetectionApi): ] def __init__(self, detector_config: TensorRTDetectorConfig): - assert ( - TRT_SUPPORT - ), f"TensorRT libraries not found, {DETECTOR_KEY} detector not present" + assert TRT_SUPPORT, ( + f"TensorRT libraries not found, {DETECTOR_KEY} detector not present" + ) (cuda_err,) = cuda.cuInit(0) - assert ( - cuda_err == cuda.CUresult.CUDA_SUCCESS - ), f"Failed to initialize cuda {cuda_err}" + assert cuda_err == cuda.CUresult.CUDA_SUCCESS, ( + f"Failed to initialize cuda {cuda_err}" + ) err, dev_count = cuda.cuDeviceGetCount() logger.debug(f"Num Available Devices: {dev_count}") - assert ( - detector_config.device < dev_count - ), f"Invalid TensorRT Device Config. Device {detector_config.device} Invalid." + assert detector_config.device < dev_count, ( + f"Invalid TensorRT Device Config. Device {detector_config.device} Invalid." + ) err, self.cu_ctx = cuda.cuCtxCreate( cuda.CUctx_flags.CU_CTX_MAP_HOST, detector_config.device ) diff --git a/frigate/plus.py b/frigate/plus.py index 83203356c..758089b85 100644 --- a/frigate/plus.py +++ b/frigate/plus.py @@ -68,11 +68,13 @@ class PlusApi: or self._token_data["expires"] - datetime.datetime.now().timestamp() < 60 ): if self.key is None: - raise Exception("Plus API not activated") + raise Exception( + "Plus API key not set. See https://docs.frigate.video/integrations/plus#set-your-api-key" + ) parts = self.key.split(":") r = requests.get(f"{self.host}/v1/auth/token", auth=(parts[0], parts[1])) if not r.ok: - raise Exception("Unable to refresh API token") + raise Exception(f"Unable to refresh API token: {r.text}") self._token_data = r.json() def _get_authorization_header(self) -> dict: @@ -116,15 +118,6 @@ class PlusApi: logger.error(f"Failed to upload original: {r.status_code} {r.text}") raise Exception(r.text) - # resize and submit annotate - files = {"file": get_jpg_bytes(image, 640, 70)} - data = presigned_urls["annotate"]["fields"] - data["content-type"] = "image/jpeg" - r = requests.post(presigned_urls["annotate"]["url"], files=files, data=data) - if not r.ok: - logger.error(f"Failed to upload annotate: {r.status_code} {r.text}") - raise Exception(r.text) - # resize and submit thumbnail files = {"file": get_jpg_bytes(image, 200, 70)} data = presigned_urls["thumbnail"]["fields"] diff --git a/frigate/ptz/autotrack.py b/frigate/ptz/autotrack.py index 9f7f5f1b8..fc6284f40 100644 --- a/frigate/ptz/autotrack.py +++ b/frigate/ptz/autotrack.py @@ -135,7 +135,7 @@ class PtzMotionEstimator: try: logger.debug( - f"{camera}: Motion estimator transformation: {self.coord_transformations.rel_to_abs([[0,0]])}" + f"{camera}: Motion estimator transformation: {self.coord_transformations.rel_to_abs([[0, 0]])}" ) except Exception: pass @@ -471,7 +471,7 @@ class PtzAutoTracker: self.onvif.get_camera_status(camera) logger.info( - f"Calibration for {camera} in progress: {round((step/num_steps)*100)}% complete" + f"Calibration for {camera} in progress: {round((step / num_steps) * 100)}% complete" ) self.calibrating[camera] = False @@ -690,7 +690,7 @@ class PtzAutoTracker: f"{camera}: Predicted movement time: {self._predict_movement_time(camera, pan, tilt)}" ) logger.debug( - f"{camera}: Actual movement time: {self.ptz_metrics[camera].stop_time.value-self.ptz_metrics[camera].start_time.value}" + f"{camera}: Actual movement time: {self.ptz_metrics[camera].stop_time.value - self.ptz_metrics[camera].start_time.value}" ) # save metrics for better estimate calculations @@ -983,10 +983,10 @@ class PtzAutoTracker: logger.debug(f"{camera}: Zoom test: at max zoom: {at_max_zoom}") logger.debug(f"{camera}: Zoom test: at min zoom: {at_min_zoom}") logger.debug( - f'{camera}: Zoom test: zoom in hysteresis limit: {zoom_in_hysteresis} value: {AUTOTRACKING_ZOOM_IN_HYSTERESIS} original: {self.tracked_object_metrics[camera]["original_target_box"]} max: {self.tracked_object_metrics[camera]["max_target_box"]} target: {calculated_target_box if calculated_target_box else self.tracked_object_metrics[camera]["target_box"]}' + f"{camera}: Zoom test: zoom in hysteresis limit: {zoom_in_hysteresis} value: {AUTOTRACKING_ZOOM_IN_HYSTERESIS} original: {self.tracked_object_metrics[camera]['original_target_box']} max: {self.tracked_object_metrics[camera]['max_target_box']} target: {calculated_target_box if calculated_target_box else self.tracked_object_metrics[camera]['target_box']}" ) logger.debug( - f'{camera}: Zoom test: zoom out hysteresis limit: {zoom_out_hysteresis} value: {AUTOTRACKING_ZOOM_OUT_HYSTERESIS} original: {self.tracked_object_metrics[camera]["original_target_box"]} max: {self.tracked_object_metrics[camera]["max_target_box"]} target: {calculated_target_box if calculated_target_box else self.tracked_object_metrics[camera]["target_box"]}' + f"{camera}: Zoom test: zoom out hysteresis limit: {zoom_out_hysteresis} value: {AUTOTRACKING_ZOOM_OUT_HYSTERESIS} original: {self.tracked_object_metrics[camera]['original_target_box']} max: {self.tracked_object_metrics[camera]['max_target_box']} target: {calculated_target_box if calculated_target_box else self.tracked_object_metrics[camera]['target_box']}" ) # Zoom in conditions (and) @@ -1069,7 +1069,7 @@ class PtzAutoTracker: pan = ((centroid_x / camera_width) - 0.5) * 2 tilt = (0.5 - (centroid_y / camera_height)) * 2 - logger.debug(f'{camera}: Original box: {obj.obj_data["box"]}') + logger.debug(f"{camera}: Original box: {obj.obj_data['box']}") logger.debug(f"{camera}: Predicted box: {tuple(predicted_box)}") logger.debug( f"{camera}: Velocity: {tuple(np.round(average_velocity).flatten().astype(int))}" @@ -1179,7 +1179,7 @@ class PtzAutoTracker: ) zoom = (ratio - 1) / (ratio + 1) logger.debug( - f'{camera}: limit: {self.tracked_object_metrics[camera]["max_target_box"]}, ratio: {ratio} zoom calculation: {zoom}' + f"{camera}: limit: {self.tracked_object_metrics[camera]['max_target_box']}, ratio: {ratio} zoom calculation: {zoom}" ) if not result: # zoom out with special condition if zooming out because of velocity, edges, etc. diff --git a/frigate/record/maintainer.py b/frigate/record/maintainer.py index 269735670..a4c23763d 100644 --- a/frigate/record/maintainer.py +++ b/frigate/record/maintainer.py @@ -449,7 +449,7 @@ class RecordingMaintainer(threading.Thread): return None else: logger.debug( - f"Copied {file_path} in {datetime.datetime.now().timestamp()-start_frame} seconds." + f"Copied {file_path} in {datetime.datetime.now().timestamp() - start_frame} seconds." ) try: diff --git a/frigate/review/maintainer.py b/frigate/review/maintainer.py index 8aa0f65e0..b4edb035b 100644 --- a/frigate/review/maintainer.py +++ b/frigate/review/maintainer.py @@ -256,7 +256,7 @@ class ReviewSegmentMaintainer(threading.Thread): elif object["sub_label"][0] in self.config.model.all_attributes: segment.detections[object["id"]] = object["sub_label"][0] else: - segment.detections[object["id"]] = f'{object["label"]}-verified' + segment.detections[object["id"]] = f"{object['label']}-verified" segment.sub_labels[object["id"]] = object["sub_label"][0] # if object is alert label @@ -352,7 +352,7 @@ class ReviewSegmentMaintainer(threading.Thread): elif object["sub_label"][0] in self.config.model.all_attributes: detections[object["id"]] = object["sub_label"][0] else: - detections[object["id"]] = f'{object["label"]}-verified' + detections[object["id"]] = f"{object['label']}-verified" sub_labels[object["id"]] = object["sub_label"][0] # if object is alert label diff --git a/frigate/service_manager/multiprocessing.py b/frigate/service_manager/multiprocessing.py index d0b169275..87bb4ffee 100644 --- a/frigate/service_manager/multiprocessing.py +++ b/frigate/service_manager/multiprocessing.py @@ -72,8 +72,7 @@ class BaseServiceProcess(Service, ABC): running = False except TimeoutError: self.manager.logger.warning( - f"{self.name} is still running after " - f"{timeout} seconds. Killing." + f"{self.name} is still running after {timeout} seconds. Killing." ) if running: diff --git a/frigate/track/tracked_object.py b/frigate/track/tracked_object.py index 3280965da..3da2a5e04 100644 --- a/frigate/track/tracked_object.py +++ b/frigate/track/tracked_object.py @@ -339,7 +339,7 @@ class TrackedObject: box[2], box[3], self.obj_data["label"], - f"{int(self.thumbnail_data['score']*100)}% {int(self.thumbnail_data['area'])}", + f"{int(self.thumbnail_data['score'] * 100)}% {int(self.thumbnail_data['area'])}", thickness=thickness, color=color, ) diff --git a/frigate/util/config.py b/frigate/util/config.py index bb050b5b6..d456c7557 100644 --- a/frigate/util/config.py +++ b/frigate/util/config.py @@ -314,7 +314,7 @@ def get_relative_coordinates( continue rel_points.append( - f"{round(x / frame_shape[1], 3)},{round(y / frame_shape[0], 3)}" + f"{round(x / frame_shape[1], 3)},{round(y / frame_shape[0], 3)}" ) relative_masks.append(",".join(rel_points)) @@ -337,7 +337,7 @@ def get_relative_coordinates( return [] rel_points.append( - f"{round(x / frame_shape[1], 3)},{round(y / frame_shape[0], 3)}" + f"{round(x / frame_shape[1], 3)},{round(y / frame_shape[0], 3)}" ) mask = ",".join(rel_points) diff --git a/process_clip.py b/process_clip.py index 54bbf0c1e..7ef9f4c75 100644 --- a/process_clip.py +++ b/process_clip.py @@ -208,7 +208,7 @@ class ProcessClip: box[2], box[3], obj["id"], - f"{int(obj['score']*100)}% {int(obj['area'])}", + f"{int(obj['score'] * 100)}% {int(obj['area'])}", thickness=thickness, color=color, ) @@ -227,7 +227,7 @@ class ProcessClip: ) cv2.imwrite( - f"{os.path.join(debug_path, os.path.basename(self.clip_path))}.{int(frame_time*1000000)}.jpg", + f"{os.path.join(debug_path, os.path.basename(self.clip_path))}.{int(frame_time * 1000000)}.jpg", current_frame, ) @@ -290,7 +290,7 @@ def process(path, label, output, debug_path): 1 for result in results if result[1]["true_positive_objects"] > 0 ) print( - f"Objects were detected in {positive_count}/{len(results)}({positive_count/len(results)*100:.2f}%) clip(s)." + f"Objects were detected in {positive_count}/{len(results)}({positive_count / len(results) * 100:.2f}%) clip(s)." ) if output: